たつをの ChangeLog : 2006-10-04

昨日の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]
のコードを参考にしています。

#!/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

手軽にだいたい三等分。

- ITmedia Biz.ID:A4用紙を手軽に三つ折りする方法
http://www.itmedia.co.jp/bizid/articles/0610/04/news013.html

(1)A4の紙を二枚用意し、
┌─┐┌──┐
│ ││  │
│ │└──┘
└─┘

(2)一方の長い側ともう一方の短い側を重ね、
┌──┐
│  │←
├─┬┘
└─┘

(3)長い側を短い側の幅にあわせて折り、
┌──┐
├─┐│
└─┴┘
 ↑

(4)重ねた紙を抜いて、
┌─┐ ┌──┐
├─┤→│  │
└─┘ └──┘

(5)残りの部分はさっきの折り目にあわせて折る。
 ↓ 
┌─┐
└─┘

正確な三等分ではなく、最初折った部分だけちょっと短めになる。

これはA4の縦横比が1対√2(1.4142...)だからで、0.5 : 0.5 : 0.414 の比率での三つ折りになる(0.5+0.5+0.414=1.414)。

追記: この記事は用語に誤りがあったため全面的に修正しています。)

あの DUMMIES シリーズから「HATENA BOOKMARK FOR DUMMIES」という本が出るらしい。はてなアメリカ進出効果か。さすがだ。

画像

情報源:http://www.signgenerator.org/books/dummies/

Yasazon とか Asamasearch とかやってる asamasi.net がのっとられた。
更新案内メールがスパムメール判定されてたぽい。
今後のことはまた考えます。

■対応メモ

- ドメイン管理サイトに行ってみると、Auto-Renew という機能ができていたので、とりあえず他の主要なドメインに対して設定を有効にしておいた。(10/4)
- MECAPI : URL を変更。→[2006-10-04-5]
- ズームイン郵便番号検索 : サービス終了。(10/4)
- Hamakumo : サービス終了。(10/4)
- AsamasiBookSearch : サービス終了。(10/4)
- Yasazon : 移転予定。→移転完了[2006-10-14-1]
- Asamasearch : 移転予定。→移転完了[2006-10-19-1]

MECAPI の URL 変更

2006-10-04-5 [MECAPI]
MECAPI 公開 URL のドメインがのっとられたため[2006-10-04-4]、MECAPI の URL を変更しました。
関係者各位、ご迷惑おかけしてすいません。

- 旧:ttp://asamasi.net/api/mecab.cgi
- 新:ttp://mimitako.net/api/mecapi.cgi
追記110729: ttp://yapi.ta2o.net/apis/mecapi.cgi
追記191208: 最新: https://maapi.net/

サンプル:MECAPIのJSON出力で形態素解析
http://chalow.net/misc/mecapi.html
この記事に言及しているこのブログ内の記事

SICP読書会に行きました。前回は[2006-09-27-1]
今回は赤坂のサイボウズラボにて。いつもありがとうございます。
久しぶりに多人数でした。

lablab

SICP Reading's Wiki
- http://www.csus4.net/hiki/SICPReading/
- http://www.csus4.net/hiki/SICPReading/?YamashitaTatsuo

今回は図形言語です。こんなの書いたりしました。楽しいです。
wave

終了後はビール1杯105円のいつもの居酒屋に。
いつもの、とはいってもかなり久しぶり。
居酒屋居酒屋

おまけ:某ラボにあるジェットコースターみたいなのの動画。

この記事に言及しているこのブログ内の記事

新規開拓隊として、カリスマブロガーのみらのさんと、六本木の交差点に近い「トラットリア ジリオーラ」へ。

ジリオーラジリオーラ

トラットリア ジリオーラ
http://www.ehills.co.jp/rp/dfw/EHILLS/townguide/lunch/giliola.php
http://gourmet.yahoo.co.jp/0000680462/P000004/
場所:港区六本木3-10-9 カジカワ誠志堂ビル1F

私はワンプレートランチ(950円)を頂きました。
結構なボリュームです。ソーセージが満足感を促進。
ワンプレートランチ

普通のランチは、サラダ、パスタとかドリア、飲み物、デザートで1200円。

ランチランチ
ランチランチ

あ、どちらもフランスパンと細い棒みたいなやつ(プリッツ)が付きます。
パン

あと、同じ値段で大盛りにできるんだけど、初回とあって遠慮。
次回はどかっと行くかな。

↓この犬がかわいかった。背中に重いもの載せられて、けなげ。
犬犬

たつをの ChangeLog
Powered by chalow