Kawa.netブログ(川崎有亮)

アクセスカウンタ

help リーダーに追加 RSS [Perl] Google Web Search API検索処理サンプル

<<   作成日時 : 2006/08/16 05:25   >>

トラックバック 4 / コメント 15

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
 

設定テーマ

関連テーマ 一覧

月別リンク

トラックバック(4件)

タイトル (本文) ブログ名/日時
Google Web Search API検索処理サンプル
[Perl] Google Web Search API検索処理サンプル  Ka... ...続きを見る
SITE159
2006/08/16 11:18
[アサマシ] 転職・中途採用ネタを書いてみようかな
GIGAZINE を参考にして、ITアーキテクト・システムエンジニア・プログラマの エージェント契約・中途採用・転職といったネタの記事を書いてみようかと思ったけど、 とりあえず、試しに リンク集のページを作ってみた。 ...続きを見る
 Kawa.net Blog 
2006/09/19 12:33
ブログ検索APIなど
technorati APIを使おうと検討中だったのですが、なんと一日500クエリーリクエストしか受け付けていないらしいです。alasukaは現在一日6000回ほど検索されていますので、これは少ない。API自体は大変シンプルなので余計に残念で成らない。それにしても500件は少ない。じゃあと言う事で「Google API」を使おうかと思ったですが、SOAPなので個人的になじみが無かったわけですが<a href= ...続きを見る
ALASUKA | 開発者ブログ
2007/03/12 23:19
PC/NETのetcetra/2007-04-09
さらに雑多メモを転記。 けっこう大量。分別なし。 SMTP HELO tach.arege.net - SMTP HELO の理解 阻止率99%のスパム対策方式の研究報告 &uarr;デジタルIDとメールの暗号化 ITpro 暗号メールの仕組み &uarr;MySQLのこと in OCS2007 spring ありがたいことに、講演内容を... ...続きを見る
chimdon.com (PukiWik...
2007/04/09 21:33

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(15件)

内 容 ニックネーム/日時
うーん…
やってみたんですけど、よくわからないです…
このPERLはコマンドプロンプトで実行ですか?

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

私の目的である、GOOGLE検索結果の上位100件の文章をそれぞれ100文字ぐらい収集するということに近づけると思ったんですが…
勉強中の人
2006/08/19 17:24
上記のスクリプトは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 18:22
ご返答ありがとうございます。

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

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

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

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

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

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

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

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

コマンドラインから
『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 12:42
おおおおお
ゆうすけさんの仰るとおりSOAP::Liteモジュールを設定してみましたら、このサンプル実行できました!サマリーも取得できました。

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

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

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

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

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

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

10, # maxResults

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

というか、10件以上取得できないorz
勉強中の人
2006/08/22 20:16
http://www.google.com/apis/reference.html#searchrequest によると、
『The maximum value per query is 10』とのことですので、10個以上は
一度では取得できませんね。10回に分ける必要がありますね。
ゆうすけ
2006/08/22 23:07
ふむ、そうなのですか…

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

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

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

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

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

コメントする help

ニックネーム
本 文

EDGE Now!