TechNote by 古賀信哉

技術情報のメモ書き(備忘録)

Technorati API

2005-04-04 02:25:40 | Webサービス
Technorati JAPANのサイトでは、キーワードとURLによる単純なBlog検索のインタフェースしか提供されておらず、http://www.technorati.jp/search/search.htmlというCGIに、"query"というパラメータでキーワードかURLを指定することしかできません。

このCGIに渡す"query"パラメータは、それがキーワードの場合には、そのキーワードを含むBlogページの一覧を出してくれますし、URLの場合には、そのページにリンクを張っているBlogページの一覧を出してくれます。検索結果として出力されたBlogページの一覧には、「リンクを見る」という項目があり、そいつをクリックすると、そのBlogにリンクを張っている他のBlogの一覧を検索できます。HTMLのソースを見ると、「リンクを見る」を囲ったa要素のhref属性として、'search.html?query=<そのBlogのURL>'という指定をしています。

JAPANのサイトでは、α版ということで、お手軽インタフェースしか提供されていないようですが、USのサイトでは、"API"として、CGI呼び出しのインタフェースが細分化されています。上のキーワード/URL検索の場合だと、それぞれは、"Search query"、"Cosmos query"という二つのCGIに分割され、googleの検索APIのように、検索結果が大量にある場合に、それらを分割して指定して取得することも可能になっています。また、JAPANのサイトでは検索結果がブラウザ表示用のHTMLテキストとして返されますが、USのサイトで提供されているAPIでは、CGIが返す検索結果は、より軽量なXML文書です。

ただし、そのサービスを使うには、googleの場合と同じように、ユーザ登録してAPIキーを取得し、そいつをCGIパラメータの一つとして渡さなければいけません。C++の擬似コードで書くと、次のようになります。なお、以下の擬似コードにある、"HttpFetch"というのは、指定したURLに対してHTTP GETし、HTTP responseで得たデータをstd::stringに格納して返すGet()というメソッドを持つクラスです。

HttpFetch httpClient;
std::string result;

httpClient.Get(
"http://api.technorati.com/cosmos?" // "Cosmos query"のURL
"key=<APIキー>" // APIキーを指定
""&url=http://www.kuniritsu.com", // 検索キー(URL)を指定
&result);

USのサイトには、開発者向けのエリアがあり、そこでは、APIが返すXML文書のDTDなど、技術情報が公開されています。上記のAPI呼び出しと、APIが返すXML文書を解析してBlogページ属性の一覧にアクセスするコードも、それら開発者が登録したものが公開されており、JavaやC#、PHPで書かれたものがありますので、それを組み込んでアプリケーションを作ることが可能です。

さて、APIが返すXML文書のエンコーディングがUTF-8ですので、Javaで書くのが楽は楽なんですが、HTTPアクセスやXMLのパーザなど、下位のライブラリを整備するためのターゲットとして、C/C++で書いてみようかと思っています。とはいえ、単にライブラリだけ書いても面白くないので、TechnoratiのAPIをうまく使ったアプリケーションを考えなければいけません。

昔、MagicCapTeleScriptの資料を見ていた時に、「検索エージェントがネットワークへ出掛けて検索結果をかき集めてくる際に、他のエージェントと情報交換して、同じような検索を実行しているエージェントがいたら、検索から戻って来た時に、そのエージェントの使い手とコンタクトするヒントを教えてくれる。」というのを考えていたのですが、そういうものに繋げられたら面白いんじゃないかと思います。

ところで、いまMagicCapについて検索してみたら、こいつを開発していたGeneralMagic社は、2002年に廃業してしまっているのを知りました。一時は、TeleScriptで実現していたエージェント機構の実装をJavaに置き換えるなどして生き残りを図っていたのですが、うまくいかなかったようですね。