サン・マイクロシステムズとリクルートが開催するマッシュアップ・コンテスト Mash up Award 3rd がスタートしました。 今回は募集期間も少し長く取られていて,9月10日までの開催となっています。 夏休みにちょっと頑張って,倍増された最優秀賞の賞金100万円を目指しましょう!

図1:Mash up Award 3rd

 今回は第3回目とあって,完成度の高い作品が増えそう。 とはいえ,ビジュアルと実用性を兼ね備えた機能満載のフルスペック・マッシュアップだけでなく, ピリリと光る小ワザ・一発ネタの作品でも十分に入賞する可能性があります。 シンプルなマッシュアップでも,アイディアを膨らませるのがポイント。 (あえて各社の副賞を狙う戦略も!?)

 コンテストの応募対象となる API 提供者も計28社へと拡大しているので, 多様な作品が集まりそうです。 ここでの注意点は「コンテスト対象外の API を利用したマッシュアップも OK」ということ。 参加 API のうち一つでも利用していれば,そのほかにいくつ API を組み合わせても構わないのです。

kizAPI 関連語検索 API

 さて今回は,その Mash up Award 3rd 参加 API の中から kizasi.jp の提供する kizAPI(きざっぴ)の関連語検索 API を利用したサンプル・コードをご紹介します。 前々回 の連載で,Yahoo! JAPAN 提供の関連検索ワード Web サービスを利用した「連想ゲーム」を作成しましたが, 今回はその kizAPI 版となります。

図2:kizasi.jp

 kizasi.jp はもともと日本国内の多数のブログ書き込みから盛り上がっているキーワードをピックアップして, 最新の話題を知ったり「きざし」を見つけるためのサービスですから, kizAPI では Yahoo! JAPAN の API よりも“旬”なフレーズに強い連想ゲームが可能になります。

API リクエスト・レスポンス例

 kizAPI の関連語検索 API のマニュアルは, こちら を参照。REST 方式の API リクエストは,以下の形式になります。(リスト1)

リスト1:APIリクエスト例 ⇒デモ
http://kizasi.jp/kizapi.py?type=coll&span=1w&kw_expr=%E5%A4%8F%E7%A5%AD%E3%82%8A

 最初のパラメタ type= は,API タイプ名を指定します。 関連語検索 API では,固定値 coll です。

 次のパラメタ span= は,キーワード抽出期間を指定します。 24(=1日),1w(=1週間),1m(=1ヶ月)から選択可能です。

 最後のパラメタ kw_expr= は,関連語を取り出す親キーワードを指定します。 UTF-8 の URL エンコードです。

 対する API からのレスポンスは,RSS フォーマットの XML で返ってきます。(リスト2)

リスト2:APIレスポンス例
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>kizasi.jp で見る【期間】の【キーワード】の関連語</title>
 <link>【詳細ページURL】</link>
 <description>今週の「【キーワード】」の関連語を,最大●件含んでいます。</description>
 <language>ja</language>
 <copyright>Copyright 2007 kizasi Company,Inc</copyright>
 <image>
  <title>kizasi.jp</title>
  <url>http://kizasi.jp/cmn/img/headerLogo.gif</url>
  <link>http://kizasi.jp/</link>
  <width>190</width>
  <height>45</height>
 </image>
 <docs>http://blogs.law.harvard.edu/tech/rss</docs>
 <lastBuildDate>【アクセス日時】</lastBuildDate>

 <item>
  <title>【関連語】</title>
  <pubDate>【測定日時】</pubDate>
  <link>【検索結果画面URL】</link>
  <guid isPermaLink="true">【linkと同じ】</guid>
  <description><![CDATA[【1日/1週間/1ヶ月の検索結果画面へのリンク】]]></description>
 </item>

(中略)

</channel>
</rss>

 検索結果の数だけ,<item> 要素が繰り返されます。

今回のサンプル・コードの構成

 今回のサンプル・コードでは,下記の図3の構成で API 通信~画面描画を行います。 JavaScript では XHR のクロスドメイン通信制限により, RSS 形式のレスポンスを返す kizAPI サーバーと直接通信できないため, 間に JSON/RSS プロキシとなる CGI を挟みます。

図3:API プロキシーを挟む構成

 直接 kizAPI と通信を行う CGI は RSS 形式のレスポンスを受信し, JSON 形式に変換して JavaScript に返します。 RSS 形式のままでも構わないのですが, 必要な情報のみを取り出すことでデータ容量を軽量化するのと, XML よりも JavaScript ネイティブで処理しやすい JSON 形式に変換することで, 画面描画処理の高速化を図っています。

 なお,CGI プログラムは,呼び出し元の HTML ファイルと同じドメイン名のサーバー上に設置してある必要があります。 サーバー上でこのようなプロキシ処理をカマすことにより, JavaScript の制限を越えてインターネット上の多くの API を自由に活用することができるのです。 (既存 API に対する JavaScript 向けの「ラッパー API」とも言えます)

 ただし,アクセスキーなどで認証が必要な WEB サービスもありますし, また誰でも任意のウェブサイトにアクセスできるような「匿名プロキシサービス」にならないよう, 例えばアクセス制限を実装しておくなど注意する必要があるでしょう。