作って学ぶ、今どきのWebサービス:第4回 Webサービスって実はこんなに簡単 (1/2)

前回まで3回に渡って、PerlにおけるWebプログラミングの基礎を解説しました。今回は一歩進めて、より実用的なアプリケーションを作るため、その足がかりとなるであろうXML Webサービスの使い方について解説していきたいと思います。


 前回まで3回に渡って、PerlプログラムからWeb上のコンテンツを取得するLWPと、LWPで取得したXML文書を料理するためのXMLモジュールの利用方法を学びました。いずれもPerlにおけるWebプログラミングの基礎となるものでした。今回は一歩進めて、より実用的なアプリケーションを作るため、その足がかりとなるであろうXML 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 APIsとYahoo! Search Web Services

 先ほど「Googleが検索機能をWebサービスとして公開していれば」と書きました。実は、Googleは実際にWebサービスとしてその検索機能を公開していて、「Google Web APIs」という名前がつけられています。

 また、GoogleのライバルであるところのYahoo!も、2005年3月1日から検索のWebサービスを開始しました。こちらは「Yahoo! Search Web Services」という名前で公開されています。

Yahoo.jpg Yahoo! Search Web Services

 Webサービスの実例としては、これら検索のAPIが比較的シンプルで分かりやすいと思います。ここで1つ、検索APIを使った簡単なアプリケーションを作ってみます。まずはAPIの扱いが簡単なYahoo! Search Web Servicesから使ってみましょう。

Application IDを取得する

 Yahoo! Search Web Servicesを利用するには、Application IDが必要です。IDは開発者登録をすることで取得可能で、開発者登録を行うためにはYahoo!のアカウントが必要です。ということで、Yahoo!のアカウントを持っていない方はサインアップしてアカウントを取得しましょう。

 Yahoo!にサインアップしてアカウントを取得したら、Yahoo!にログインして「get an application ID」のリンクからIDを取得します。登録フォームに8〜40文字で任意の文字列を送信すると、それがApplication IDとして利用可能になります。

Yahoo! Search Web Servicesを使ってみよう

 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


リスト1 「hatena」でWeb検索をするURL

 すでにお気づきかと思いますが、前回解説した方法を使えばこの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>

リスト2 「hatena」でWeb検索をしたときのレスポンス

このページで出てきた専門用語

パース

文法に沿ってデータを分析・分解すること。

リスト1のURLにGETリクエストを送信すれば良く

********には先に取得したApplication IDが入る。また、ここでは「language=ja」で日本語の結果にのみ絞っている。


       1|2 次のページへ

Copyright© 2010 ITmedia, Inc. All Rights Reserved.




キャリアアップ



エンタープライズ・ピックアップ

news004.jpg 世界で勝つ 強い日本企業のつくり方:利用契約の検討――グローバルクラウドで失敗しないために(前編)
2010年以降、クラウドサービスの利用がさらに加速する。サービスを利用する企業はプロバイダーのデータセンターに預けた自社情報を保護するために、法的な要素を理解しておかなければならない。企業が注意を払うべき法的な検討事項を整理する。

news001.jpg IT投資の新方程式:「Twitter使ってます」――現役MS社員が“社員力”を語る(前編)
マイクロソフトが掲げるプロモーションメッセージ「社員にチカラを。ITで企業力を。(以下、BIEB)」からは、ITで社員の生産性を向上することが業績の拡大につながる、といったニュアンスを感じる。そこで気になるのが「じゃあ、マイクロソフトの社員自身はどうなのよ?」ということ。3人の現役MS社員により実態が明らかになる……?

news010.jpg 産業構造を変えるか:「住宅クラウド」の衝撃
住宅都市工学研究所が進める「住宅クラウド」は、クラウドが企業のIT領域にとどまらず、ビジネスのやり方自体を変える可能性を示している。

news010.jpg オルタナティブな生き方 栗原進さん:ネットでリアルを楽しくしたい
SE出身の企業広報マンでありながら、趣味は落語で憧れの人はインディ・ジョーンズとアナログ全開の栗原さんに、ブログを書く理由やネットからはじまるコミュニケーションについて伺った。

news001.jpg 最強最速アルゴリズマー養成講座:トップクラスだけが知る「このアルゴリズムがすごい」――「探索」基礎最速マスター
プログラミングにおける重要な概念である「探索」を最速でマスターするために、今回は少し応用となる探索手法などを紹介しながら、その実践力を育成します。問題をグラフとして表現し、効率よく探索する方法をぜひ日常に生かしてみましょう。