Google AJAX Search APIをperlから使う

Googleの検索結果を自作のプログラムで使う事ができるのですが、昔はGoogle APIは直接Perlからたたけるインタフェースが公開されていたのですが色々変わってきて、現在は「Google AJAX Search API」になっています。つまりJavaScriptなのでもうPerlやその他言語から使えないじゃんって事になってたのですが、最近JavaScript以外の環境からGoogle AJAX Search APIを利用するドキュメントが公開されています。しかも最近Googleさんはドキュメントの日本語化にも力を入れて下さっている様で僕の様な英語が読めない人にもやさしい仕様になってますw。

●Developer’s Guide – Google AJAX Search API – Google Code

http://web.archive.org/web/20080701155615/http://code.google.com/intl/ja/apis/ajaxsearch/documentation/

具体的には、ウェブ検索、ローカル検索、動画検索、ブログ検索、ニュース検索、ブック検索、イメージ検索を利用することが出来ます。

●Class Reference – Google AJAX Search API – Google Code

http://web.archive.org/web/20080513013805/http://code.google.com/intl/ja/apis/ajaxsearch/documentation/reference.html

実際にActivePerlを使ってperlから利用する為のサンプルを書いてみる。下のブログが参考になります。下のブログでは「WebService::Simple、WebService::Simple::Parser::JSON」モジュールを利用して実際に検索結果の取得を行うWebアプリのサンプルを書いていらっしゃいます。というか今気付きましたがWebService::Simpleの作者様のなんですねw。

●ゆーすけべー日記: JavaScript 環境以外から Google AJAX Search API を使う

http://yusukebe.com/archives/08/04/25/225831.html

で、現在使っているActivePerlに「WebService::Simple」モジュールが入って無かったのでppmから入れようと思ったのですが、ppmに無かったのでcpanを見に行こうとしたのですがどうもDNSの調子が悪く(あとで気付いた)サーバーに繋がらないのであきらめて別の方法でやることにしました。通常は「WebService::Simple」モジュールでよいと思います。モジュールの在りかとppmから利用できる様にppmにリポジトリを追加するのは下記のページを参考にして下さい。

●Browse and search CPAN : WebService::Simple

http://cpan.uwinnipeg.ca/module/WebService::Simple

●ActivePerlにGDをインストールする – KUMA TYPE

http://blog.kumacchi.com/2007/06/activeperlgd.html

 

それで僕の場合はどうしたかというと「JSON::Syck」モジュールを利用しました。モジュールは下記のページで手に入ります。perl5.8の環境でサンプルを作って動かしてみたのですが、その後perl5.10の環境で動かしてみようと思ったら「JSON::Syck」が見つからなくて(DNSの調子が悪くて見ることが出来ないサイトが一杯あったため)色々困ったのですが、よくはわかりませんが、「JSON::Syck」と「YAML-Syck」は同様の機能らしく「YAML-Syck」を入れれば、普通に「JSON::Syck」として使うことが出来ます。(useも「use JSON::Syck;」でOK)検索するともっぱら「JSON::Syck」と「YAML-Syck」の速度の性能差が比較されているので速度性能以外は基本的に同じ物なのかなーと思ってます。(いいかげんでスマソ)

●Browse and search CPAN : JSON::Syck

http://cpan.uwinnipeg.ca/module/JSON::Syck

そういうわけで書いてみたサンプル、一応コマンドプロンプトで動かすことを想定して結果をShift_JISで表示するように文字コード変換して出力してます。

use strict;
use warnings;
use LWP::Simple;
use Encode qw/from_to/;
use JSON::Syck;
my $response = get(‘http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&hl=ja&q=KUMA%20TYPE’);
my $data = JSON::Syck::Load($response);
foreach (@{$data->{responseData}{results}}){
    from_to($_->{title},’utf8′,’shift-jis’);
    from_to($_->{titleNoFormatting},’utf8′,’shift-jis’);
    from_to($_->{content},’utf8′,’shift-jis’);
    print "—————–","\n";
    print "GsearchResultClass",$_->{GsearchResultClass},"\n";
    print "unescapedUrl:",$_->{unescapedUrl},"\n";
    print "url:",$_->{url},"\n";
    print "visibleUrl:",$_->{visibleUrl},"\n";
    print "cacheUrl:",$_->{cacheUrl},"\n";
    print "title:",$_->{title},"\n";
    print "titleNoFormatting:",$_->{titleNoFormatting},"\n";
    print "content:",$_->{content},"\n";
}

Google AJAX Search APIのサンプル動作結果

コマンドプロンプトから実行するとこんな感じで検索結果のデータを取得できます。

タグ :