たつをの ChangeLog : 2006-09-13

どんな検索サービスにも言えることですが、
検索結果のRSSが提供されているということは、
そのまま検索APIとして使えるということを意味しています。

てなわけで、今回の YahooHacks は、
Yahoo!商品検索(http://psearch.yahoo.co.jp/)のRSSを用いた
検索サイトの作り方です。

なお、「use CGI qw/-no_xhtml/;」としているのはバッドノウハウです。
バージョンの違いもあるかもだけど、start_html() で散々嫌な目に
あったので。

今回は、CGI.pm で昔ながらの方法を使って書いてみたのですが、
前述のバッドノウハウも含め、なんか疲れますね。普段はテンプレートを
使っています。そういうサンプルも今後載せていきます。

(一時的にデモを置いておきます。そのうち消えます。ご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_psearch.cgi)

使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。



■■■Yahoo!商品検索のRSSで商品検索サイトを作る

Yahoo!商品検索(http://psearch.yahoo.co.jp/)では、
キーワード検索結果がRSSで提供されています。
RSSのURLの構成は以下のようになっています。
パラメタ p でエンコードしたUTF-8のキーワードを渡します。

http://psearch.yahoo.co.jp/search?p=[キーワード]&ei=UTF-8\
&tbid=02e89d655a5c&rss=1

これを用いて商品検索サイトを作ってみました。

■コード

Yahoo!商品検索のRSSを用い商品検索を行うCGIです。

#!/usr/bin/perl -T
use strict;
use warnings;
use Encode;
use CGI qw/-no_xhtml/;
use LWP::Simple;
use XML::Simple;
use URI::Escape;

my $q = new CGI;
my $key = $q->param('key') || "";
my $ekey = URI::Escape::uri_escape($key);

print $q->header(-charset => 'UTF-8'),
    $q->start_html(-title => 'psearch', -lang => 'JP'),
    $q->h1('psearch (RSS)'),
    $q->start_form(-method => 'GET'),
    $q->textfield(-name => 'key', -size => 20),
    $q->submit(-value => 'search'),
    $q->end_form(),
    $q->h2('Search Results');

my $url =
"http://psearch.yahoo.co.jp/rss?p=$ekey&ei=UTF-8&rss=1";
my $r = get_presults($url);
foreach (@$r) {
    print encode('UTF-8',
                 $q->h3($q->a({href => $_->{link}},
                 $_->{title})).
                 $q->p($_->{description})), "\n";
}

print $q->end_html(), "\n";

sub get_presults {
    my ($url) = @_;
    my $rss = get($url);
    my $xmlsimple = XML::Simple->new(ForceArray => [ 'item' ]);
    my $xml = $xmlsimple->XMLin($rss);
    return $xml->{channel}->{item};
}

■Hack の実行

そのままWebサーバに置けば動作するはずです。
検索実行例を下図に示します。

画像



参考ページ:
- Yahoo!商品検索
  http://psearch.yahoo.co.jp/
- Yahoo!デベロッパーネットワーク - RSS配信
  http://developer.yahoo.co.jp/rss/
- [を] Yahoo!知恵袋の検索結果RSSでQA検索サイトを作る[2006-09-14-1]

関連書籍:
Yahoo! Hacks
まるごとPerl! Vol.1

追記071021: ソース修正。

SICP読書会に行ってきました。前回参加は[2006-09-06-2]
今回は秋葉原拠点。会場提供ありがとうございました。
秋葉原拠点秋葉原拠点

- 素人くさいSICP読書会
  http://www.csus4.net/hiki/SICPReading/
  http://www.csus4.net/hiki/SICPReading/?SICPReading029

計算機プログラムの構造と解釈

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

たつをの ChangeLog
Powered by chalow