前回まで3回に渡って、PerlにおけるWebプログラミングの基礎を解説しました。今回は一歩進めて、より実用的なアプリケーションを作るため、その足がかりとなるであろうXML Webサービスの使い方について解説していきたいと思います。
前回まで3回に渡って、PerlプログラムからWeb上のコンテンツを取得するLWPと、LWPで取得したXML文書を料理するためのXMLモジュールの利用方法を学びました。いずれもPerlにおけるWebプログラミングの基礎となるものでした。今回は一歩進めて、より実用的なアプリケーションを作るため、その足がかりとなるであろうXML Webサービスの使い方について解説していきたいと思います。
前回も少し触れましたが、XML Webサービス(以下、Webサービス)について少しおさらいしておきましょう。
Webサービスとは「あるWebサイトが持つ機能をほかのアプリケーションから利用できるよう、その機能をコンポーネント化しXMLによるAPIとして公開したもの」です。もう少し簡単にいうと、Webサイトの検索機能とかショッピングサイトのカート機能などを、ほかのアプリケーションから利用できるよう「開発者向けに」作られた機能、といったところでしょうか。
例えばあなたが、ローカルPC上で動作するアプリケーションを開発していたとしましょう。そのアプリケーション内に、世界中のWebサイトから全文検索する機能を搭載したいと思ったときに、どのような手段でそれを実現するでしょうか。自分で世界中のWebサイトからデータを集めてきて、検索するプログラムを作りますか? とてもじゃないですが、無理ですね。それはあのGoogleが何万台ものコンピュータを使ってようやく実現できている世界なのですから。
でももしGoogleが検索機能をWebサービスとして公開していれば、それを利用することであなた自身は検索のプログラムをほとんど書くことなく、そのアプリケーションに世界中のWebサイトからの全文検索機能、例えばGoogleエンジンによる検索機能を搭載できるのです。
つまりWebサービスとは、Webサイトにおける特定機能を、アプリケーション用インタフェース(=API)としてWeb上で公開したものといえます。WebサービスAPIはいろいろなプログラミング言語から利用できるよう、多くの場合XMLが使われています。
「PerlでWebサービスを利用する」とは、このXML文書を取りに行き、返ってきた結果をパース*して、その機能やデータを取り込む、といったプログラムを書くことです(前回学んだLWPとXMLモジュールの使い方を知っていれば利用できる、ということでもあります)。
まだ少しもやもやしているでしょうか。ここから先は具体例を示した方が分かりやすそうですね。
先ほど「Googleが検索機能をWebサービスとして公開していれば」と書きました。実は、Googleは実際にWebサービスとしてその検索機能を公開していて、「Google Web APIs」という名前がつけられています。
また、GoogleのライバルであるところのYahoo!も、2005年3月1日から検索のWebサービスを開始しました。こちらは「Yahoo! Search Web Services」という名前で公開されています。
Webサービスの実例としては、これら検索のAPIが比較的シンプルで分かりやすいと思います。ここで1つ、検索APIを使った簡単なアプリケーションを作ってみます。まずはAPIの扱いが簡単なYahoo! Search Web Servicesから使ってみましょう。
Yahoo! Search Web Servicesを利用するには、Application IDが必要です。IDは開発者登録をすることで取得可能で、開発者登録を行うためにはYahoo!のアカウントが必要です。ということで、Yahoo!のアカウントを持っていない方はサインアップしてアカウントを取得しましょう。
Yahoo!にサインアップしてアカウントを取得したら、Yahoo!にログインして「get an application ID」のリンクからIDを取得します。登録フォームに8〜40文字で任意の文字列を送信すると、それがApplication IDとして利用可能になります。
Yahoo! Search Web Servicesでは、Web検索以外にもイメージ検索やニュース検索、ビデオ検索なども利用可能です。それぞれのAPIとWeb検索の使い方は「Yahoo! Search Web Services」の右側に記載されています。
Yahoo! Search Web Servicesのアーキテクチャはとてもシンプルで、「HTTPリクエストのクエリパラメータに検索語句などを指定してHTTPのGETメソッドでアクセスすると、検索結果がXMLで返却されてくる」というものです。
例えばキーワード「hatena」で検索するには、リスト1のURLにGETリクエストを送信すれば良く*、その応答はリスト2のようなXML文書で返ってきます(一部省略しています)。XMLの中身は、斜め読みでもだいたい分かりますね。検索結果が何件か入っていて、それぞれにタイトルや要約、そのURLなどがセットになっているといった具合です。
http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=********&query=hatena&type=all&results=10&start=1&format=any&language=ja
すでにお気づきかと思いますが、前回解説した方法を使えばこのAPIを料理するのは簡単です。そう、LWPで先のURLをGETして、返却されてきたXML文書をXML::SimpleなどのモジュールでパースすればOKです。
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:yahoo:srch"
xsi:schemaLocation="urn:yahoo:srch http://api.search.yahoo.com/
WebSearchService/V1/WebSearchResponse.xsd"
totalResultsAvailable="4435952"
totalResultsReturned="10"
firstResultPosition="1">
<Result>
<Title>はてな</Title>
<Summary>知りたいページを文章でたずねてください...</Summary>
<Url>http://www.hatena.ne.jp/</Url>
<ClickUrl>http://rds.yahoo.com/S=96857362/K=hatena/v=2/...</ClickUrl>
<ModificationDate>1117868400</ModificationDate>
<MimeType>text/html</MimeType>
</Result>
<Result>
<Title>はてなダイアリー- キーワードでつながる面白ブログ</Title>
<Summary>関連サービス. キーワード. はてなダイアリーへようこそ...</Summary>
<Url>http://d.hatena.ne.jp/</Url>
<ClickUrl>http://rds.yahoo.com/S=96857362/K=hatena/v=2/...</ClickUrl>
<ModificationDate>1117868400</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>http://rds.yahoo.com/S=96857362/K=hatena/v=2/XP=yws/...</Url>
<Size>25191</Size>
</Cache>
</Result>
:
:
</ResultSet>
文法に沿ってデータを分析・分解すること。
********には先に取得したApplication IDが入る。また、ここでは「language=ja」で日本語の結果にのみ絞っている。
Copyright © ITmedia, Inc. All Rights Reserved.