2008-11-29 00:06:56
一昨日だったか、Google Gadgetを作ろうとして失敗したときに、これならRSSフィードを作った方が簡単じゃないかなどと書いたのだった。ということで、PHPにRSSフィードを作らせることにした。
<?php $keyword = $_GET["q"]; $url = "http://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=".urlencode($keyword)."&hl=ja&scoring=d&rsz=large"; $toptitle = "Google News ".$keyword; $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <rss version=\"2.0\"> <channel>\n"; $xml .= "<title>".$toptitle."</title>\n"; $xml .= "<link>http://news.google.com/news?tab=wn&l=ja&ned=&q=".$keyword."&ie=UTF-8&scoring=n</link>\n"; $xml .= "<description>Google News: ".$keyword."に関する検索結果</description> <language>ja</language>\n "; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_REFERER, "http://nakano.no-ip.org/lege/news/gglnewsRSS.php"); $body = curl_exec($ch); curl_close($ch); $json = json_decode($body); foreach($json->responseData->results as $item){ $url = $item->url; $title = $item->title; $pubdate = $item->publishedDate; $publisher = $item->publisher; $content = strip_tags($item->content); $xml .= "<item>\n"; $xml .= "<title>".$title."【".$publisher."】</title>\n"; $xml .= "<link>".$url."</link>\n"; $xml .= "<description>".$content."</description>\n"; $xml .= "<pubDate>".$pubdate."</pubDate>\n"; $xml .= "</item>\n"; } $xml .= "</channel>\n"; $xml .= "</rss>\n"; echo $xml; ?>Google AJAX Search APIを利用して、curlで受け取ってjson_decodeで処理。google ajax APIの使い方においては、refererの明記が厳しく指示されているので、気をつけなければならない。8件ずつ日付順の検索結果を得て、RSS2.0の書式で出力する。URLは「http://xxxxx?書籍」(ここではRSSフィーダのURLそのもののhttp://nakano.no-ip.org/lege/news/books/gglnewsRSS.phpを記している)というような感じで作ればどんなキーワードもこのファイル一つで対処できる(ような気がする)。これで、どんなRSSリーダでも読み込めるかどうかは解らない。少なくとも私が使ったLiferea(Linux)とNewswire(Mac)では読めた。
いま、このページをご覧になってゐる方は、本RSSフィーダを自由に使ってみていただいて構はない。上記のURLの末尾に?XXXXXといふやうに?に続けて自分の検索したい語や句を付加して、http://nakano.no-ip.org/lege/news/books/gglnewsRSS.php?q=%E6%96%87%E5%AD%A6 といふやうにして、RSSリーダに登録すればいい。もしも、アクセス数が多すぎたら考へ直さざるを得ないが、多分、そんなに人気が出ることもないと思ふ。