[Perl] Google Web Search API検索処理サンプル
Google Web Search API のサンプルコードもメモしておく。
Perlの場合は、SOAP::Liteモジュールを使うのがカンタン。
『link:www.kawa.net』 のリンク元検索をはじめ、特殊な検索も可能。
検索サービスの利用には、ライセンスキーの発行が必要。
また、ディベロッパーキットをダウンロードして、GoogleSearch.wsdlを取り出す。
ただし、ZIPファイルを展開したルート直下のGoogleSearch.wsdlを使うこと。
googleapi/dotnet/Visual Basic/Web References/Google/GoogleSearch.wsdl は違う。
取得したライセンスキーを $APIKEY に設定して、
検索フレーズを $QUERY に入れて検索実行すると、
日本語キーワードも、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
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
この記事へのコメント
やってみたんですけど、よくわからないです…
このPERLはコマンドプロンプトで実行ですか?
PERLは実行可能ですので、問題は多分SOAP::Liteモジュールかと。
適当なディレクトリに保存しているのが問題なのかなぁ。
私の目的である、GOOGLE検索結果の上位100件の文章をそれぞれ100文字ぐらい収集するということに近づけると思ったんですが…
上位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全文を表示する方法が知りたい。。。
SOAP::Liteモジュール、最新のものをダウンロードしました。デスクトップに解凍したんですが…
どこに保存しておけばいいんですか?
このスクリプトを見ると、
use strict;
use encoding "utf8";
use SOAP::Lite;
ってなってるので、SOAPのほうも何か取り出す必要でもあるのかな?
まだ私はPERL初心者なのに、上位100件の先頭100文字ずつ取得してテキストデータとするプログラムを求められていまして、期限も迫っているので非常に困っています。
PERLだけならまだしも、Google Web Search API なんてさっぱりわからないです;
どうか助けてくださいorz
(TT▽TT)
何か、保存場所が決まっていたりしていますか?
ゆうすけさんがここにお示しになっているサンプルを改良すればどうにかなると思ったのですが、なにぶんGoogle Web Search API の詳細がわからない&期限が迫っているという状況で、もう困り果てています。よりによって、ゆうすけさんがお示しになっているサンプルすら実行できないですから…
よろしければ、以下のメールアドレスにGoogle Web Search API によって取得した検索結果の「上位100件取得」「それぞれ100文字取得」をテキストデータとして取得するということを達成するプログラムのサンプルを示してくださるとありがたいですが…もう切羽詰ってます…
dinamo_moskvaあっとhotmail.com
あっとは勿論@に直してください。
よろしくお願い申し上げます。頼りにしてます…
たぶん、このブログのシステムの関係で化けてしまってますね。
コマンドラインから
『perl -MSOAP::Lite -e "print($SOAP::Lite::VERSION)"』
を実行してみた結果はいかがでしょうか?
また、SOAP-Lite-0.69.tar.gzをダウンロードした場合は、
libディレクトリ内のすべてのサブディレクトリ(SOAPなど)を
上記Perlスクリプトと同じディレクトリ(カレント)に置けば、
バージョン0.69を利用することができます。
どのようなエラーが表示されるのでしょうか。
それとも、何も表示されない?
サマリ(おおむね先頭100文字相当)は $item->{snippet} で取り出せるので
そんなに難しくないと思います。がんばってください。
ゆうすけさんの仰るとおりSOAP::Liteモジュールを設定してみましたら、このサンプル実行できました!サマリーも取得できました。
ありがとうございます^^
しかし。。。
検索フレーズに日本語を使うと、
Malformed UTF-8 character (fatal) at c:/Perl/lib/Carp/Heavy.pm line 55.
と表示されて、実行できません。
検索フレーズに英語を使うと、ばっちり実行できるのですが、文字化けをして出力されます。
どうすれば解決できますか?
UTF-8で記述する必要があります。
UTF-8 で保存しているでしょうか?
秀丸エディタなどを使えば、UTF-8 で保存することができます。
シェアウェアが嫌なので、秀丸を避けて他のエディタを使ってUTF-8で保存しました。しかし、まだ文字が化けてる…日本語検索できないし…
結局、解決しませんでした><
私は今までずーっとAzEditを使用してましたが、そこから起因する問題なのでしょうか…
『use encoding "utf8";』の行を
『use encoding "utf8", Filter => 1, STDOUT => "CP932";』
に変更すると、化けずに結果が表示されるようですよ。
スクリプトファイルの文字コードは、UTF-8にします。
うーん、後は100件取得したいんですが…
10, # maxResults
の部分を100にするだけでは上手くいかないんですが…
というか、10件以上取得できないorz
『The maximum value per query is 10』とのことですので、10個以上は
一度では取得できませんね。10回に分ける必要がありますね。
でも、このスクリプトを分けて実行すると、同じ検索ワードの場合、同じ検索結果が返されるだけですので上位100件を取得できないのですが…
どうしましょうか…
このままでは上位10件だけになってしまうんです><
の値を0→10→20→・・・→90と変えていますか?
0, # start
の値を0→10→20→・・・→90と、実行するたびに手動で変更しないと、上位100件の取得は実現できないのでしょうか?
やはり、一度に10件しか取得できないので仕方ないかな…
あと、サマリーだけじゃなく全文取得は実現不可能なのでしょうか?
当方の環境では問題なく動作してます。
ありがとうございました。