第4回 Webサービスって実はこんなに簡単:作って学ぶ、今どきのWebサービス(2/2 ページ)
前回まで3回に渡って、PerlにおけるWebプログラミングの基礎を解説しました。今回は一歩進めて、より実用的なアプリケーションを作るため、その足がかりとなるであろうXML Webサービスの使い方について解説していきたいと思います。
LWPとXML::SimpleでYahoo! Search Web Servicesを料理する
それでは具体的にPerlで検索のアプリケーションを書いてみましょう。任意の検索語句を渡すと、その検索結果のタイトルを10件出力するという(実行例1)、簡単なコマンドラインアプリケーションです。コードはリスト3のようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
今回利用するモジュールは、
- Jcode
- LWP::Simple
- URI::Escape
- XML::Simple
の4つです。LWPとXML::Simpleは前回解説したとおり。Yahoo! Search Web Servicesでは入力も出力もマルチバイト文字をUTF-8で扱うことになっているので、Jcodeは文字コードを変換するために利用します*。また、URI::EscapeはクエリパラメータをURLエンコードするために利用しています。
特に難しいところはないですね。大枠は前回解説したコードとほとんど一緒です。クエリパラメータ付きのURLを先に組み立てておいて、LWP::SimpleでそれをGET。取得したXML文書をXML::Simpleでパースしてタイトルに当たる個所だけを出力、ということを行っています。
具体例を見て、Webサービスとは何かをつかんでいただけたでしょうか。Webサービスを利用することで、Webを介してXMLをやり取りして、任意のアプリケーションにWebサイトの機能(ここではYahoo!の検索)を取り込むことができました。
ここでは入力をスクリプト実行時の引数、出力を標準出力にしていますが、この入力をWebから、出力をWebに書き換えれば、Webアプリケーションとして検索ページが作れます(このあたりは今後解説したいと思います)。
Yahoo::Searchでよりお手軽に
さて、リスト3ではLWP::SimpleとXML::Simpleを使っていますが、CPANを探すとYahoo::Searchというモジュールが見つかると思います。これはYahoo! Search Web Services専用のモジュールで、Yahoo!社員がCPANに登録しているものです。
LWPとXML::Simpleも良いですが、このモジュールを使うと*、もっとシンプルかつすっきりとしたコードで同じ機能のプログラムが書けます(リスト4)。
URLの組み立てや、XML::Simpleが作った生のデータ構造をたどったりする必要がなくなり、かなり分かりやすくなったと思いませんか? このように、CPANには特定のWebサービス専用のモジュールなどもあるという好例といえるでしょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
SOAPとREST
ところで、Webサービスに関係する言葉で、SOAP(Simple Object Access Protocol)というものを聞いたことがあるかもしれません。SOAPとは、WebサービスにおけるXML文書交換用のプロトコルのことです。
ここで示したYahoo! Web Search APIではSOAPは利用していません。Yahoo! Web Searchのように、HTTPのGETでURLにアクセスしてシンプルにXML文書を取得するAPIは、REST API(あるいはXML over HTTP)などと呼ばれます。
Google Web APIsはSOAPを採用しています。今回はSOAPによるWebサービスの解説は省略しますが、SOAPによるWebサービスはPerlならSOAP::Liteを使ってHackすると良いでしょう。
次回は
今回はGoogleとYahoo!の検索機能に関するWebサービスを題材に解説してきました。しかしながら、実用的なアプリケーションを作ると言いつつも、Web検索の機能をアプリケーションに統合するだけでは、いまいち面白みがありません。工夫次第でいろいろ面白いものが作れるとは思いますが、より実用的なデータをWebサービスで扱いたいところですね。
そこで次回は、Amazon.comが提供するAmazon Webサービスを題材にしたいと思います。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
Jcodeは文字コードを変換するために利用します
Perl 5.8ではこれまでEncodeモジュールを利用するのが一般的だったがEncodeのラッパーモジュールとしてJcode 2.xも利用可能だ。こちらの方が使いやすいので、今後は日本語の変換にはJcodeを使っても良いだろう。
このモジュールを使うと
コンストラクタに渡しているそれぞれのパラメータの説明は、Yahoo::Searchのperldocかsearch.cpan.orgのドキュメントを参照してほしい。
本記事は、オープンソースマガジン2005年8月号「作って学ぶ、今どきのWebサービス 第2回」を再構成したものです。
関連記事
- developersLife〜開発者という生き方
- 連載第1回:何はなくともCPANを知ろう
最近のWebかいわいでは、Webアプリケーション同士が連携してどんどん面白いサービスが生まれています。しかし、Web上のサービスは手元にソフトウェアも何も残らないので、どうしても雲をつかむような分かりにくさがあります。そこで本連載では、Webサービスを実際に利用/作成しながら、そういった「今どき」のテクノロジーを学んでみたいと思います。 - 連載第2回:RSSフィードの料理はLWPとXML::RSSにおまかせ
今回から、いよいよPerlプログラミングの世界に入っていきましょう。手始めに、PerlにおけるWebプログラミングの要ともいえるLWPを用いた、HTTPコンテンツをPerlでHackする手法を解説します。 - 連載第3回:XML::SimpleであらゆるXML文書を料理する
RSSにおけるXML::RSSのように、専用のモジュールがある場合にはそれを使えばよいのですが、そうでない場合は汎用のXMLパーサーモジュールを使ってパースすることになります。今回は、XML::Simpleを使ってあらゆるXML文書を料理できるようにしてみます。
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.