Yahoo!ブログ検索のRSSをブログ検索APIとして使う
2006-10-04-1
[YahooHacks]
昨日のYahoo!ブログ検索の話[2006-10-03-3]の続き。
「Yahoo!商品検索のRSSで商品検索サイトを作る」[2006-09-13-1]で私は、
ということで、
Yahoo!ブログ検索のRSSはブログ検索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]
のコードを参考にしています。
■Hack の実行
そのままWebサーバに置けば動作するはずです。
(一時的にデモを置いておきます。そのうち消えます。ご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_blogsearch.cgi)
■Hack をさらに Hack する
検索キーに「 site:http...」を追加すると、
(「Yahoo!ブログ検索で、はてなダイアリー検索&更新順表示」
[2006-10-03-3]での説明のように)
サイト指定でのブログ検索ができます。
例えば、今回のCGIで、はてなダイアリーのみを検索対象にする場合は、
参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
関連書籍:
- Yahoo! Hacks
「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]
のコードを参考にしています。
#!/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
