[Perl] Google Web Search API検索処理サンプル

Google Web Search API のサンプルコードもメモしておく。
Perlの場合は、SOAP::Liteモジュールを使うのがカンタン。
『link:www.kawa.net』 のリンク元検索をはじめ、特殊な検索も可能。

#!/usr/bin/perl

    use strict;
    use encoding "utf8";
    use SOAP::Lite;

    &search_googleapi();

sub search_googleapi {
    my $WSDL = 'file:GoogleSearch.wsdl';
    my $APIKEY = '0123456789abcdef0123456789abcdef';
    my $KEYWORD = '検索フレーズ';

    my $query = [
        $APIKEY,        # key
        $KEYWORD,     # q
        0,             # start
        10,             # maxResults
        'false',        # filter
        'countryJP',    # restrict
        'false',        # safeSearch
        'lang_ja',     # lr
        'utf8',         # ie (ignored)
        'utf8'         # oe (ignored)
    ];

    my $service = SOAP::Lite->service( $WSDL );
    my $result = $service->doGoogleSearch( @$query );

    return unless ref $result;
    return unless ref $result->{resultElements};

    foreach my $item ( @{$result->{resultElements}} ) {
        print "URL=", $item->{URL}, "\n";
        print "title=", $item->{title}, "\n";
        print "cachedSize=", $item->{cachedSize}, "\n";
    }
}


検索サービスの利用には、ライセンスキーの発行が必要。
また、ディベロッパーキットをダウンロードして、GoogleSearch.wsdlを取り出す。
ただし、ZIPファイルを展開したルート直下のGoogleSearch.wsdlを使うこと。
googleapi/dotnet/Visual Basic/Web References/Google/GoogleSearch.wsdl は違う。

取得したライセンスキーを $APIKEY に設定して、
検索フレーズを $QUERY に入れて検索実行すると、
URL=http://www.kawa.net/
title=Kawa.net xp - ajax/JavaScript/Perl/CGI(川崎有亮)
cachedSize=24k
の形式で検索結果を表示します。
日本語キーワードも、UTF-8 でそのまま検索できます。
UTF-8フラグが立つので、今回は encoding "utf8" しています。

1ライセンスキーにつき、1日1,000回までしか検索できないとのこと。

詳しい仕様は http://www.google.com/apis/reference.html (英語)
 
<関連記事>
Google Web Search API(本記事)
Yahoo! JAPANウェブ検索API
テクノラティのブログ検索API
Spurl.netの被ブックマーク件数
del.icio.us のブックマーク登録件数
はてなブックマーク件数取得API
 

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

ナイス

この記事へのコメント

勉強中の人
2006年08月19日 17:24
うーん…
やってみたんですけど、よくわからないです…
このPERLはコマンドプロンプトで実行ですか?

PERLは実行可能ですので、問題は多分SOAP::Liteモジュールかと。
適当なディレクトリに保存しているのが問題なのかなぁ。

私の目的である、GOOGLE検索結果の上位100件の文章をそれぞれ100文字ぐらい収集するということに近づけると思ったんですが…
2006年08月19日 18:22
上記のスクリプトはMacで作成しましたが、Windowsでも動きました。
上位100件の先頭100文字ずつも取得できるでしょう。

インストールしてあるSOAP::Liteモジュール関係で
エラーとなった場合は、何かメッセージが出そう。
SOAP::Liteのバージョン番号は↓で確認できます。(Windowsの場合)
perl -MSOAP::Lite -e "print($SOAP::Lite::VERSION)"
Windows版(ActivePerl 5.8.8)では、0.55が入っていました。

http://search.cpan.org/perldoc?SOAP::Lite
から最新版をダウンロード・展開して試す価値もあるかも。

ちなみに、僕の場合は、GoogleSearch.wsdl で躓きました。
.zip ファイルのルートにあるコメントが書いてあるファイルを
使わなければいけなかった。間違えてました。

※SOAP::Liteで取得したXML全文を表示する方法が知りたい。。。
勉強中の人
2006年08月19日 21:34
ご返答ありがとうございます。

SOAP::Liteモジュール、最新のものをダウンロードしました。デスクトップに解凍したんですが…
どこに保存しておけばいいんですか?
このスクリプトを見ると、
use strict;
use encoding "utf8";
use SOAP::Lite;
ってなってるので、SOAPのほうも何か取り出す必要でもあるのかな?

まだ私はPERL初心者なのに、上位100件の先頭100文字ずつ取得してテキストデータとするプログラムを求められていまして、期限も迫っているので非常に困っています。

PERLだけならまだしも、Google Web Search API なんてさっぱりわからないです;

どうか助けてくださいorz
(TT▽TT)
勉強中の人
2006年08月21日 09:55
SOAP::Liteモジュールの保存場所など設定の詳細がさっぱりわからないです。どうしても、このサンプルを実行できないです…
何か、保存場所が決まっていたりしていますか?

ゆうすけさんがここにお示しになっているサンプルを改良すればどうにかなると思ったのですが、なにぶんGoogle Web Search API の詳細がわからない&期限が迫っているという状況で、もう困り果てています。よりによって、ゆうすけさんがお示しになっているサンプルすら実行できないですから…

よろしければ、以下のメールアドレスにGoogle Web Search API によって取得した検索結果の「上位100件取得」「それぞれ100文字取得」をテキストデータとして取得するということを達成するプログラムのサンプルを示してくださるとありがたいですが…もう切羽詰ってます…

dinamo_moskvaあっとhotmail.com
あっとは勿論@に直してください。

よろしくお願い申し上げます。頼りにしてます…
2006年08月21日 12:42
サンプルスクリプトのソースコード中の『->』は『->』です。
たぶん、このブログのシステムの関係で化けてしまってますね。

コマンドラインから
『perl -MSOAP::Lite -e "print($SOAP::Lite::VERSION)"』
を実行してみた結果はいかがでしょうか?

また、SOAP-Lite-0.69.tar.gzをダウンロードした場合は、
libディレクトリ内のすべてのサブディレクトリ(SOAPなど)を
上記Perlスクリプトと同じディレクトリ(カレント)に置けば、
バージョン0.69を利用することができます。

どのようなエラーが表示されるのでしょうか。
それとも、何も表示されない?
サマリ(おおむね先頭100文字相当)は $item->{snippet} で取り出せるので
そんなに難しくないと思います。がんばってください。
勉強中の人
2006年08月21日 15:24
おおおおお
ゆうすけさんの仰るとおりSOAP::Liteモジュールを設定してみましたら、このサンプル実行できました!サマリーも取得できました。

ありがとうございます^^

しかし。。。
検索フレーズに日本語を使うと、
Malformed UTF-8 character (fatal) at c:/Perl/lib/Carp/Heavy.pm line 55.
と表示されて、実行できません。

検索フレーズに英語を使うと、ばっちり実行できるのですが、文字化けをして出力されます。

どうすれば解決できますか?
2006年08月21日 16:38
Perlのスクリプトファイル自身(内に書いてある検索フレーズ)は、
UTF-8で記述する必要があります。
UTF-8 で保存しているでしょうか?
秀丸エディタなどを使えば、UTF-8 で保存することができます。
勉強中の人
2006年08月21日 23:15
むむむ…
シェアウェアが嫌なので、秀丸を避けて他のエディタを使ってUTF-8で保存しました。しかし、まだ文字が化けてる…日本語検索できないし…
結局、解決しませんでした><

私は今までずーっとAzEditを使用してましたが、そこから起因する問題なのでしょうか…
2006年08月22日 00:11
出力結果もUTF-8で表示されますので、コマンドプロンプトでは化けます。
『use encoding "utf8";』の行を
『use encoding "utf8", Filter => 1, STDOUT => "CP932";』
に変更すると、化けずに結果が表示されるようですよ。
スクリプトファイルの文字コードは、UTF-8にします。
勉強中の人
2006年08月22日 20:16
文字化け、修正できました。ありがとうございます。

うーん、後は100件取得したいんですが…

10, # maxResults

の部分を100にするだけでは上手くいかないんですが…

というか、10件以上取得できないorz
勉強中の人
2006年08月23日 09:53
ふむ、そうなのですか…

でも、このスクリプトを分けて実行すると、同じ検索ワードの場合、同じ検索結果が返されるだけですので上位100件を取得できないのですが…
どうしましょうか…

このままでは上位10件だけになってしまうんです><
2006年08月23日 10:39
0, # start
の値を0→10→20→・・・→90と変えていますか?
勉強中の人
2006年08月23日 12:34
あ、忘れてましたorz

0, # start
の値を0→10→20→・・・→90と、実行するたびに手動で変更しないと、上位100件の取得は実現できないのでしょうか?

やはり、一度に10件しか取得できないので仕方ないかな…

あと、サマリーだけじゃなく全文取得は実現不可能なのでしょうか?
ryu
2006年10月24日 01:12
コード使わせてていただきます。
当方の環境では問題なく動作してます。
ありがとうございました。

この記事へのトラックバック

  • Google Web Search API検索処理サンプル

    Excerpt: [Perl] Google Web Search API検索処理サンプル  Ka... Weblog: SITE159 racked: 2006-08-16 11:18
  • [アサマシ] 転職・中途採用ネタを書いてみようかな

    Excerpt: GIGAZINE を参考にして、ITアーキテクト・システムエンジニア・プログラマの エージェント契約・中途採用・転職といったネタの記事を書いてみようかと思ったけど、 とりあえず、試しに リンク集の.. Weblog:  Kawa.net Blog  racked: 2006-09-19 12:33
  • ブログ検索APIなど

    Excerpt: technorati APIを使おうと検討中だったのですが、なんと一日500クエリーリクエストしか受け付けていないらしいです。alasukaは現在一日6000回ほど検索されていますので、これは少ない。.. Weblog: ALASUKA | 開発者ブログ racked: 2007-03-12 23:19
  • PC/NETのetcetra/2007-04-09

    Excerpt: さらに雑多メモを転記。 けっこう大量。分別なし。 SMTP HELO tach.arege.net - SMTP HELO の理解 阻止率99%のスパム対策方式の研究報告 ↑デジタルIDと.. Weblog: chimdon.com (PukiWiki/TrackBack 0.3) racked: 2007-04-09 21:33