Yahoo!ブログ検索のRSSをブログ検索APIとして使う
2006-10-04-1
[YahooHacks]
昨日のYahoo!ブログ検索の話[2006-10-03-3]の続き。
﹁Yahoo!商品検索のRSSで商品検索サイトを作る﹂[2006-09-13-1]で私は、
どんな検索サービスにも言えることですが、
検索結果のRSSが提供されているということは、
そのまま検索APIとして使えるということを意味しています。
と書きました。
ということで、
Yahoo!ブログ検索のRSSはブログ検索APIとして使えます。
やったね!
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
■■■Yahoo!ブログ検索のRSSをブログ検索APIとして使う Yahoo!ブログ検索のRSSはブログ検索APIとして使えます。 例‥http://blog-search.yahoo.co.jp/rss?p=%B8%A1%BA%F7%B2%F1%B5%C4 しかし、﹁検索結果の最初の10件しか見れないじゃん!﹂との 意見もあるかもしれません。 そういう人は、 まず Yahoo!ブログ検索で5分ほどいろいろ検索したりしてみてください。 → http://blog-search.yahoo.co.jp/ 気づきましたか? ﹁次﹂の検索結果を見たときに、 URLの後ろにつく﹁&n=10&so=&yuragi=off&b=2﹂などのパラメタ。 つまり、パラメタnは﹁一回に表示する件数﹂、 bは﹁検索結果ページ番号﹂ということ推定できます。 ここで、﹁これって rss を出力するときにも指定できるかも﹂ と試してみると、ちゃんと使えることが分かります。 例‥ http://blog-search.yahoo.co.jp/rss?p=%B8%A1%BA%F7%B2%F1%B5%C4&n=10&b=3 http://blog-search.yahoo.co.jp/rss?p=%B8%A1%BA%F7%B2%F1%B5%C4&n=100 ︵私もたまたま見つけただけで、オフィシャルな仕様ではないようなので、 激しいアクセスは避けて下さるようお願いします。︶ ■コード というわけで簡単なサンプルです。 一回に表示する件数(num)と検索結果ページ番号(page)を指定して、 ブログ検索を行う CGI です。 検索キーの文字コードが EUC-JP なこともあって、 ﹁Yahoo!知恵袋の検索結果RSSでQA検索サイトを作る﹂[2006-09-14-1] のコードを参考にしています。
■■■Yahoo!ブログ検索のRSSをブログ検索APIとして使う Yahoo!ブログ検索のRSSはブログ検索APIとして使えます。 例‥http://blog-search.yahoo.co.jp/rss?p=%B8%A1%BA%F7%B2%F1%B5%C4 しかし、﹁検索結果の最初の10件しか見れないじゃん!﹂との 意見もあるかもしれません。 そういう人は、 まず Yahoo!ブログ検索で5分ほどいろいろ検索したりしてみてください。 → http://blog-search.yahoo.co.jp/ 気づきましたか? ﹁次﹂の検索結果を見たときに、 URLの後ろにつく﹁&n=10&so=&yuragi=off&b=2﹂などのパラメタ。 つまり、パラメタnは﹁一回に表示する件数﹂、 bは﹁検索結果ページ番号﹂ということ推定できます。 ここで、﹁これって rss を出力するときにも指定できるかも﹂ と試してみると、ちゃんと使えることが分かります。 例‥ http://blog-search.yahoo.co.jp/rss?p=%B8%A1%BA%F7%B2%F1%B5%C4&n=10&b=3 http://blog-search.yahoo.co.jp/rss?p=%B8%A1%BA%F7%B2%F1%B5%C4&n=100 ︵私もたまたま見つけただけで、オフィシャルな仕様ではないようなので、 激しいアクセスは避けて下さるようお願いします。︶ ■コード というわけで簡単なサンプルです。 一回に表示する件数(num)と検索結果ページ番号(page)を指定して、 ブログ検索を行う CGI です。 検索キーの文字コードが EUC-JP なこともあって、 ﹁Yahoo!知恵袋の検索結果RSSでQA検索サイトを作る﹂[2006-09-14-1] のコードを参考にしています。
#!/usr/bin/perl -T use strict; use warnings; use Encode; use CGI; use LWP::Simple; use XML::Simple; use HTML::Template; binmode STDOUT, "utf8"; my $q = new CGI; my $key = $q->param('key') || ""; my $num = $q->param('num') || ""; my $page = $q->param('page') || ""; Encode::from_to($key, "utf8", "euc-jp"); $key =~ s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge; $key =~ s/ /+/g; my $url = "http://blog-search.yahoo.co.jp/rss?p=$key&n=$num&b=$page"; my $r = get_bresults($url); my $template = join("", <DATA>); my $t = HTML::Template->new(scalarref => \$template, associate => $q, die_on_bad_params => 0); $t->param(results => $r); $t->param(key => decode('UTF-8', $q->param('key'))); print $q->header(-charset => 'UTF-8'), $t->output(); sub get_bresults { my ($url) = @_; my $rss = get($url); my $xmlsimple = XML::Simple->new(); my $xml = $xmlsimple->XMLin($rss); if (ref($xml->{channel}->{item}) eq "ARRAY") { return $xml->{channel}->{item}; } else { return [$xml->{channel}->{item}]; } return []; } __DATA__ <html lang="ja"><head><title>Yahoo! Blog Search (RSS)</title></head><body> <h1>Yahoo! Blog Search (RSS)</h1> <form method="get"> <input type="text" name="key" value="<TMPL_VAR name=key>" size="20"> num:<input type="text" name="num" value="<TMPL_VAR name=num>" size="3"> page:<input type="text" name="page" value="<TMPL_VAR name=page>" size="2"> <input type="submit" value="search"> </form> <h2>Search Results</h2> <TMPL_LOOP name=results> <h3><a href="<TMPL_VAR name=link>"><TMPL_VAR name=title></a></h3> <p><TMPL_VAR name=description></p> </TMPL_LOOP> </body></html>■Hack の実行 そのままWebサーバに置けば動作するはずです。 (一時的にデモを置いておきます。そのうち消えます。ご了承ください。 http://chalow.net/misc/yahoohacks-samp/hack_blogsearch.cgi) ■Hack をさらに Hack する 検索キーに﹁ site:http...﹂を追加すると、 (﹁Yahoo!ブログ検索で、はてなダイアリー検索&更新順表示﹂ [2006-10-03-3]での説明のように) サイト指定でのブログ検索ができます。 例えば、今回のCGIで、はてなダイアリーのみを検索対象にする場合は、
my $url = "http://blog-search.yahoo.co.jp/rss?p=$key&n=$num&b=$page";を以下のように変更します。
my $url = "http://blog-search.yahoo.co.jp/rss?" ."p=$key+site:http://d.hatena.ne.jp/&n=$num&b=$page";
参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
関連書籍:
- Yahoo! Hacks