#!/usr/local/bin/perl # y2rss.cgi(2005/12/3) # Takao Funami # # 以下のソースから変更しました # yjwebsearch.pl # Serch example perl script Ver.1(2005/11/30) # # Yahoo! JAPAN Web Search. # use strict; use LWP::Simple; use XML::Simple; use CGI; use Jcode; use XML::RSS; use utf8; use Encode qw/from_to/; #recive query my $q = new CGI; my $query = $q->param('query'); my $enc = $q->param('enc'); my $style = $q->param('style'); if ($enc){ from_to($query,$enc,'UTF-8'); }else{ #from_to($query,'UTF-8'); #$query = Jcode->new($query)->utf8; } # Set your unique Yahoo! Application ID my $appID = "xxxxxxxxxxxxx"; #←ここは自分のIDに変更してからお使いください。 # keyword null if (!$query){ print << "end_no_query"; Content-Type: text/html Yahoo!の検索結果をRSSにする

Yahoo!APIを使って、Yahoo!検索結果からRSSを生成します。



スタイルシートをつける。




ソースのダウンロード
ソースは、参考程度にご覧ください。SDKのサンプルを改造しています。
Author T.Funami@iRSSの日記



Web Services by Yahoo! JAPAN - Yahoo!デベロッパーネットワーク end_no_query exit; } #urlエンコード sub urlencode { my($str) = @_; utf8::encode(($str)); $str =~ s/(\W)/'%'.unpack("H2", $1)/ego; $str =~ tr/ /+/; return $str; } # Construct RSS from a Yahoo! JAPAN Web Search #YahooAPIでの検索はここから my $base_url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch"; my $type = "all"; #alternates: any, phrase. my $results = 20; my $language = "ja"; my $results_sort = "rank"; #alternate: date. my $req_url = "$base_url?appid=$appID&query=$query&results=$results"; $req_url .= "&language=$language&sort=$results_sort"; # Make the request my $yahoo_response = get($req_url); # Parse the XML my $xmlsimple = XML::Simple->new(); my $yahoo_xml = $xmlsimple->XMLin($yahoo_response); # Set some variables my $out; my $result_count = 0; # Add the column header my $totalresult = $yahoo_xml->{totalResultsAvailable}; #YahooAPIでの検索はここまで #$yahoo_xmlに取得した検索結果がある。 #XML::RSSでRSS1.0の生成をはじる。 utf8::decode($query); my $title = "Yahoo!API検索 - $query"; my $rss = new XML::RSS (version => '1.0'); $rss->add_module( prefix=>"content", uri=>"http://purl.org/rss/1.0/modules/content/", ); my $myUrl = 'http://rss.rdy.jp/y2rss.cgi?query=' . &urlencode($query) . "&enc=UTF-8"; my $description = "検索結果".$totalresult."件"; #channelの生成 $rss->channel( about => $myUrl."&style=1", title => $title, link => $myUrl, description => $description, dc => { date => '', creator => 'http://rss.rdy.jp/y2rss.cgi', publisher => 'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch', language => 'ja', }, ); #itemの生成 foreach my $result (@{$yahoo_xml->{Result}}) { $result_count++; my $y_title = $result->{Title}; my $y_summary = $result->{Summary}; my $y_url = $result->{ClickUrl}; my $y_modificationdate = $result->{ModificationDate}; (my $sec,my $min,my $hour,my $mday,my $mon,my $year) = localtime($y_modificationdate); $year += 1900; $mon++; my $date = sprintf("%04d-%02d-%02dT%02d:%02d:%02d+9:00",$year,$mon,$mday,$hour,$min,$sec); $rss->add_item( link => $y_url, title => $y_title, description => $y_summary, dc => { date => $date, }, content =>{ }, ); } #RSS出力 my $outStr = $rss->as_string; #ちょっと、どんくさいねえ。置換でスタイルシートを埋め込んでいます。 if ($style){ $outStr =~ s/<\?xml version="1.0" encoding="UTF-8"\?>/<\?xml version="1.0" encoding="UTF-8"\?>\n<\?xml-stylesheet href="yrss.xsl" type="text\/xsl" media="screen"\?>\n/; } print $q->header('application/xml; charset=utf-8'); print $outStr;