Yahoo! APIでサイトに含まれるページ数を知る
2006-09-11-1
[YahooHacks]
今回の YahooHacks は、あるサイトに含まれるページ数を知る方法です。
「http://d.hatena.ne.jp に含まれるページ数」ではなく、
「http://d.hatena.ne.jp/yto に含まれるページ数」が知りたいというの
が動機です。ホスト指定でなく、URL指定。
とはいえ、当然のことながらインデックスされているページ数しかわかりませんよ。
あと、いまいち inurl の使い方が分かっていないところがあるので、内容は不正確です。何か情報ありましたら、お願いします。
それではどうぞ:
■■■あるサイトに含まれるページ数を知る
あるサイトに含まれるページ数を知るにはどうしたらよいでしょう。
そのサイトに含まれるページ数=ヤフーにインデックスされている URL 数、
とみなして検索 API を用いて解決する方法を紹介します。
もちろん正確な数字は出ませんが、参考数値として有意義かと思います。
■パラメータ site とクエリー構文 inurl
リクエストパラメータ site で検索するドメイン(例えば
www.yahoo.co.jp)を指定できます。
しかし何かしら query を指定しないと検索結果がエラーになります。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&site=yahoo.co.jp
ダミーとして指定する文字列(例えば「0」や「Copyright」など)を
考える必要があり、またそれがきちんと機能するかはサイト依存なので、
いろいろと面倒です。
そこで、inurl というクエリー構文を使用します。inurl により、指定し
た文字列を URL に含むサイトのみを対象とした検索ができます。
例えば URL に yahoo.co.jp を含むサイトのうち「YDN」を含むWebページ
検索する場合は、query として「YDN inurl:yahoo.co.jp」という文字列
を指定します。また「inurl:yahoo.co.jp」のみで検索すると、
yahoo.co.jp を URL に含むサイトが検索結果として出てきます。
そこから検索結果数を取り出せば「あるサイトに含まれるページ数を知る」
ことができます。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=inurl:yahoo.co.jp
しかし、inurl のみでは、プロキシやソーシャルブックマークサービスな
どの URL にもマッチしてしまいます(例えば下記のような URL にも)。
http://b.hatena.ne.jp/entry/http://streaming.yahoo.co.jp/
というわけで、きちんと「あるサイトに含まれるページ数を知る」には、
下記のように inurl と site を両方指定するのがよいでしょう。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=inurl:yahoo.co.jp&site=yahoo.co.jp
■コード
前述のやり方で、URL を指定するとそのサイトに含まれるページ数を教え
てくれるスクリプトを書いてみました。
内部で inurl と site を指定して Yahoo! API を呼び出しています。
ただし URL に &, ?, %, # の文字が入っていると処理を行いません。
■Hack の実行
■注意点
現在の仕様では、inurl で指定した文字列中のストップワードは無視され
るようなので注意が必要です。例えば「inurl:nais.to/~yto/」の場合、
「to」は英語のストップワードとして無視されるようです。
参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
関連書籍:
- Yahoo! Hacks
「http://d.hatena.ne.jp に含まれるページ数」ではなく、
「http://d.hatena.ne.jp/yto に含まれるページ数」が知りたいというの
が動機です。ホスト指定でなく、URL指定。
とはいえ、当然のことながらインデックスされているページ数しかわかりませんよ。
あと、いまいち inurl の使い方が分かっていないところがあるので、内容は不正確です。何か情報ありましたら、お願いします。
それではどうぞ:
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
■■■あるサイトに含まれるページ数を知る
あるサイトに含まれるページ数を知るにはどうしたらよいでしょう。
そのサイトに含まれるページ数=ヤフーにインデックスされている URL 数、
とみなして検索 API を用いて解決する方法を紹介します。
もちろん正確な数字は出ませんが、参考数値として有意義かと思います。
■パラメータ site とクエリー構文 inurl
リクエストパラメータ site で検索するドメイン(例えば
www.yahoo.co.jp)を指定できます。
しかし何かしら query を指定しないと検索結果がエラーになります。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&site=yahoo.co.jp
ダミーとして指定する文字列(例えば「0」や「Copyright」など)を
考える必要があり、またそれがきちんと機能するかはサイト依存なので、
いろいろと面倒です。
そこで、inurl というクエリー構文を使用します。inurl により、指定し
た文字列を URL に含むサイトのみを対象とした検索ができます。
例えば URL に yahoo.co.jp を含むサイトのうち「YDN」を含むWebページ
検索する場合は、query として「YDN inurl:yahoo.co.jp」という文字列
を指定します。また「inurl:yahoo.co.jp」のみで検索すると、
yahoo.co.jp を URL に含むサイトが検索結果として出てきます。
そこから検索結果数を取り出せば「あるサイトに含まれるページ数を知る」
ことができます。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=inurl:yahoo.co.jp
しかし、inurl のみでは、プロキシやソーシャルブックマークサービスな
どの URL にもマッチしてしまいます(例えば下記のような URL にも)。
http://b.hatena.ne.jp/entry/http://streaming.yahoo.co.jp/
というわけで、きちんと「あるサイトに含まれるページ数を知る」には、
下記のように inurl と site を両方指定するのがよいでしょう。
http://search.yahooapis.jp/WebSearchService/V1/webSearch?
appid=YahooDemo&query=inurl:yahoo.co.jp&site=yahoo.co.jp
■コード
前述のやり方で、URL を指定するとそのサイトに含まれるページ数を教え
てくれるスクリプトを書いてみました。
内部で inurl と site を指定して Yahoo! API を呼び出しています。
ただし URL に &, ?, %, # の文字が入っていると処理を行いません。
#!/usr/bin/perl use strict; use warnings; use LWP::Simple; use URI; my $target = shift @ARGV; exit if ($target =~ /[&?%\#]/); my $uri = URI->new($target); my $h = $uri->host; my $p = $uri->path; my $url = "http://search.yahooapis.jp/WebSearchService/V1/". "webSearch?appid=YahooDemo&query=inurl:$h$p&site=$h"; my $num = get_num($url) || 0; print "$num\n"; sub get_num { my ($url) = @_; my $yahoo_response = get($url); my ($num) = ($yahoo_response =~ /totalResultsAvailable="(\d+)"/); return $num; }
■Hack の実行
% ./hack_num.pl http://nais.to/~yto/ukulele 8 % ./hack_num.pl http://d.hatena.ne.jp/yto 4560
■注意点
現在の仕様では、inurl で指定した文字列中のストップワードは無視され
るようなので注意が必要です。例えば「inurl:nais.to/~yto/」の場合、
「to」は英語のストップワードとして無視されるようです。
参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
関連書籍:
- Yahoo! Hacks
