Yahoo! ウェブ検索 API で検索ヒット数を取り出す簡単な方法
2009-02-26-1
[Programming][YahooHacks]
Yahoo!デベロッパーネットワーク (YDN) のウェブ検索 API を用いて、入力キーのウェブ検索ヒット件数だけを取り出す簡単な方法について。
ウェブサービスを用いて自然言語処理っぽいことをやろうというときの基本中の基本。
- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- Yahoo!デベロッパーネットワーク - 検索 - ウェブ検索
http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
appid は自分で取得したものを使うこと。
(http://e.developer.yahoo.co.jp/webservices/register_application)
result は 1 にする。
これを 0 にすると 10 件返ってきてしまう。
なるべく検索結果 XML を小さくするのが効率的なのでミニマムである 1 にする。
XML をパーズするまでもない。正規表現で取り出すのが速い。
検索結果 XML の冒頭はこんな感じ。
正規表現「/totalResultsAvailable="(\d+)"/」を使えば OK。
以上を踏まえたサンプルプログラム (perl)。
実行例:
サンプルプログラムは Perl で書いたが、
他のスクリプト言語でも簡単に書けるよ。
ウェブサービスを用いて自然言語処理っぽいことをやろうというときの基本中の基本。
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- Yahoo!デベロッパーネットワーク - 検索 - ウェブ検索
http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
Y!API に投げるURL
http://search.yahooapis.jp/WebSearchService/V1/ webSearch?appid=YahooDemo&query=[URI ESCAPE したキー]&result=1
appid は自分で取得したものを使うこと。
(http://e.developer.yahoo.co.jp/webservices/register_application)
result は 1 にする。
これを 0 にすると 10 件返ってきてしまう。
なるべく検索結果 XML を小さくするのが効率的なのでミニマムである 1 にする。
検索結果 XML からヒット数を取り出す
XML をパーズするまでもない。正規表現で取り出すのが速い。
検索結果 XML の冒頭はこんな感じ。
totalResultsAvailable が検索ヒット数なので、<ResultSet xsi:schemaLocation="urn:yahoo:srch http://search.yahooapis.jp/WebSearchService/V1/WebSearchResponse.xsd" type="web" totalResultsAvailable="19700" totalResultsReturned="1" firstResultPosition="1" ...
正規表現「/totalResultsAvailable="(\d+)"/」を使えば OK。
Perl によるサンプルプログラム
以上を踏まえたサンプルプログラム (perl)。
#!/usr/bin/perl use strict; use warnings; use LWP::Simple; use URI::Escape; while (<>) { my $num = get_num($_); print "$num\n"; } sub get_num { my ($key) = @_; my $ek = URI::Escape::uri_escape($key); my $url = "http://search.yahooapis.jp/WebSearchService/V1/". "webSearch?appid=YahooDemo&query=$ek&result=1"; my $res = get($url); my ($num) = ($res =~ /totalResultsAvailable="(\d+)"/); return $num || 0; }
実行例:
% cat a.txt ufj 学校 六本木ヒルズ % sample.pl a.txt 105000000 1340000000 17400000
サンプルプログラムは Perl で書いたが、
他のスクリプト言語でも簡単に書けるよ。
この記事に言及しているこのブログ内の記事