マッシュアップ・ラボ 第1回 WebサービスAPI+マッシュアップことはじめ

http://itpro.nikkeibp.co.jp/article/COLUMN/20061020/251301/

 Web 2.0の要素として,「マッシュアップmash up)」という言葉がよく聞かれるようになりました。マッシュアップとは,複数のWebサービスを融合して,新しいサービスとして提供する形態を指します。コンテンツ・ホルダーがWebサービスとして自社データの提供を拡大してくる中で,マッシュアップによって新たな価値を生み出す場が広がってきました。

 この「マッシュアップ・ラボ」では,WebサービスAPIマッシュアップ技術の最新動向と,マッシュアップ・サイト構築の要素となる各社のAPIの具体的な使い方についてサンプル・コードを交えて紹介していきます。

 1回目となる今回は,まずWebサービスAPIマッシュアップについて簡単におさらいすることにします。

1000以上のマッシュアップ・サイトが登場

 この1年で,スクロール地図を利用したサイトがとても増えてきました。不動産業者の物件地図,飲食店の情報マップ,写真と合わせたクチコミサイトなど,いたるところで地図を見かけるようになりました。

 ほんの数年前まではWeb上の地図データは,高額な利用料が発生したり,自前で地図画像を作成するのも手間なので,なかなか手を出しにくい分野でした。現在はGoogle Mapsなどの無料のWebサービスが提供されているため,プログラミング力があれば手軽に自サイトに地図を導入できるようになりました。しかも,日本中〜世界中の地図をスクロールや拡大縮小して見られますし,衛星写真にも切り替えられる便利な地図機能です。

 Googleは,自社以外のサイトでもGoogle Mapsの地図機能を利用できるように,Google Maps APIというWebサービスAPIを無償で公開しています。“API”とはApplication Program Interfaceの略で,機能を呼び出す手順の決まりごとのようなものです。Google Maps APIでは,地図機能をGoogle以外のサイトからも利用できるインタフェースが提供されています。

 ProgrammableWebのサイトには,世界中の1000を超えるマッシュアップ・サイトが掲載されています。毎日,平均2.7サイトが新規に登録される勢いがあります。その約半数は,地図を利用したマッシュアップを構築しているそうです。

 そのようなマッシュアップ技術が注目されるきっかけとなったサイトとして,HousingMaps(図1)が挙げられます。個人によって構築されたこのサイトは,まだ公式のGoogle Maps APIが公開される以前から,Google Mapsの地図データとcraigslistの不動産データを融合したサービスを提供していました(当時は“マッシュアップ”でなく“コンボサイト”と呼んでいました)。今日,マッシュアップと言えば真っ先に地図データの利用が挙げられるのも,初期のHousingMapsの登場と,またその後のYahoo!Googleによる地図APIの公開が大きく影響していると言えそうです。

 Google以外にも,Amazonの商品情報やTechnoratiのブログ検索など,各社が自社データをWebサービスAPI経由で提供しています。海外だけでなく日本国内でも,はてなはてなウェブサービスをはじめ,livedoorの天気情報,価格.comの商品検索など多くのWebサービスが登場してきました。これらのWebサービスで提供されるデータを活用することで,自分のアイディアを活かした新しいマッシュアップ・サイトを構築していくことができます。

JavaScriptからWebサービスAPIを使う

 もともとの“Webサービス”という言葉は,SOAP/WSDLベースの通信を行うものに限定する向きもありましたが,現在では,RESTベースのサービスも広がりを見せるなど,通信方式を限定せずに広義の意味で使われることが多くなってきました。技術的には,以下のような呼び出し方式が使われています。

-XML-RPC : metaWeblog APIのブログ投稿管理APIなど。XMLベース
-SOAP/WSDLGoogle SOAP Search APIのWebサイト検索APIなど。XMLベース
-REST : Technoratiのブログ検索APIなど。レスポンスはXMLJSONが多い

 これらの通信方式はWebサービス提供者側が決めることですので,サービス利用者側(マッシュアップサイト構築者)にとってはそれほど重要なことではありません。Web 2.0で重要なのはデータですから,プロトコルやデータフォーマットでなく,通信して受け取れるコンテンツ自体が大事です。Webサービス提供者側のドキュメントの指示に沿って,ありがたくサービスを利用させていただくことにしましょう。

 ただ,このところの潮流としては,REST-fulなインタフェースを採用してXML形式だけでなくJSON形式のレスポンスを返すサービスが増えてきているようです。RESTベースのWebサービスAPIは,その動作を手軽に試せるぶん,APIを利用したサービスが開発しやすい特徴があります。

 JSONJavaScript Object Notation)は,JavaScriptのネイティブ表記に近いデータ交換フォーマットで,RFC-4627に定義されています。JSONでは文字コード指定や属性値など,XMLの全機能を再現できるわけではありません。しかし,Webサービスのデータのやり取りに必要となる主な機能はJSONでも代替可能で,何より,Ajaxを用いてJavaScriptをクライアントとした場合に最も利用しやすいフォーマットであると言えるでしょう。JavaPHPPerlなどの他言語用のライブラリも登場していますから,サーバーサイドでの処理・互換性にも問題ありません。

 そのJSONをさらに応用した,JSONPJSON with Padding)も注目されています。レスポンスのJSON形式データの先頭に,JavaScriptのコールバック関数名や代入先変数名を指定できるようにしたものです。JavaScriptのscriptタグ(script要素)から簡単に使用できるため,XMLHttpRequestを用いた Ajax通信が不要になる手軽さが特徴です。その半面,Webサービスからのレスポンスが,単純なデータ構造のみでなく,確実にJavaScriptプログラムを含む形式になるため,信頼できるWebサービスに利用を限定するなどセキュリティ面の注意は必要です。

サーバーサイドからWebサービスAPIを使う

 Webサービスは,ブラウザ上からJavaScript経由で利用するだけのものではありません。むしろ,Ajax登場以前はサーバー上で稼働するプログラムから通信するのが主流でした。現在も,サービスの内容によってはサーバー上で処理する必要があることも多いです。PerlプログラムからWebサービスAPIを利用する手順をまとめておきます。

 Perl上でXMLを扱うモジュールとしては,まずXML::ParserやXML::LibXMLなどが挙げられます。しかしXMLベースのWeb サービスにアクセスする際には,これらのモジュールを利用して直接読み書きするよりも,XMLの内容をPerlのハッシュ・配列に展開してくれるXML::SimpleやXML::TreePP(図2)モジュールを利用したほうが,より手軽にプログラムを構築できます。XML::TreePPはPure Perl実装のためコンパイル不要と導入しやすく,しかし動作は高速ですから,筆者(=XML::TreePPモジュール作者)としてはオススメできます。

 REST/XMLベースのWebサービスAPIについてはXML::TreePPモジュールが最適ですが,SOAP/WSDLベースのAPIについてはSOAP::Liteモジュールを利用するのが便利です。WSDLの解析からSOAPの複雑なリクエスト生成・レスポンス解析を請け負ってくれます。

 また,REST/JSONベースのAPIでは,JSON.pmまたはJSON::Syckモジュールが必要です。JSON.pmはPure Perl実装で導入しやすい半面,libsyckライブラリを利用するJSON::Syckのほうが動作は高速なようです。JSON::Syckが利用できる場合はJSON::Syck,速度を優先しない場合はJSON.pmと選択するのが良いでしょう。

 WebサービスAPIへの通信には,LWP::UserAgentモジュールを使うのが正攻法です。最近のレンタル・サーバーでは,LWPは標準でインストールされていることも多いです。インストールされていなければ,Pure Perl実装のHTTP::Liteモジュールもお手軽です。

WebサービスAPIを活用して実践マッシュアップ

 “くるくるブログ”(図3)は,12カ国語対応のブログマッチングサービスです。JavaScriptを多用した動きのある画面構成が特徴で,日替わりのテーマに沿って各国語の最新ブログ記事を紹介していきます。占いのようにスロットで登場したブログへの出会いを提供します。直接的な実用性は乏しいですが,各国のブログは画面の色調などにも違いがあって見ているだけでも楽しいです。

 このサイトは,関連語辞書・翻訳辞書機能としてのWikipediaと,ブログ検索サービスとしてのTechnorati API,それに画面キャプチャ&サムネイル画像生成サービスのWebToJpegを組み合わせたマッシュアップと言えます。WikipediaWebサービスAPIを提供しているわけではありませんが,XMLを解析するのと同様に HTMLページの解析により関連語や翻訳語を取得することができます。このように,既存のサービスに独自のアイディアというスパイスを加えることでオリジナルの美味しいマッシュアップ・サイトを構築することができます。

 マッシュアップ・サイトの発展は,WebサービスAPI提供側(コンテンツ・ホルダー)から見ても利点があります。WebサービスAPIの提供と利用が広がれば,マッシュアップを構築するサードパーティを経由することで,コンテンツ・ホルダー単独ではリーチできなかったエンドユーザーに対しても,新たなサービスを提供できます。WebサービスAPI提供者とマッシュアップ構築者は,共存関係になるのです。

 今回は,具体的なWebサービスAPIの使い方・活用法の解説に入る前に,マッシュアップの背景や技術要素の基礎を復習しました。今後,Webサービス APIはますます多くの企業から提供されるようになるでしょう。そのときにAPIを活用して,スパイスの効いたサービスをいちはやく展開できるように準備していきましょう。

(川崎 有亮)[2006/10/23]