Magpie RSSを使ってRSS・AtomをPHPで取得&表示
RSSやAtomはXML文書の一種です。 PHPでXML文書を解析(パース)して、欲しいデータを取り出して使う手順です。
本当にちょっとした解析(パース)なら、正規表現を使ったりしてもいいのかもしれませんが、 普通は面倒でそんなことをやっていられません! PHPのXMLパーサ関数を使ったり、各所で公開されているRSS用のライブラリーを使った方が楽ちんです。
RSS(XML)パーサ用のPHPライブラリを使う
PHPのRSSパース用のライブラリーには、 Magpie RSS - PHP RSS Parserや、 PEAR :: Package :: XML_RSS(要XML_Parser)があります。
MagpieRSSには、Cache(キャッシュ)機能も付いているし、データの取得もURLを指定するだけでOKなのでオススメです。 以下、MagpieRSSの使い方です。(PEARのXML_RSSの使い方はそのうちに…)
PHP Magpie RSSの使い方
まず、SourceForge.net: Filesで、 magpierssをダウンロードし、解凍。 解凍したフィルダの中にある4つのファイル 「rss_cache.inc」、 「rss_fetch.inc」、 「rss_parse.inc」、 「rss_utils.inc」 とSnoopy.class.incが入っている「extlibフォルダ」を適当なフォルダ(以下、名前をrssとします)にコピーします。 次に、このrssフォルダをまるごと適当なディレクトリーにアップロードします。
後は、rssディレクトリーがあるのと同じディレクトリーに、 Cache(キャッシュ)用のディレクトリと、Magpie RSSを使うためのPHPファイルを次のように用意すれば使えるはずです。
1.Cache(キャッシュ)用のディレクトリを作成
名称cache(define?で設定することもできます)でディレクトリーを作成。 パーミッションを「777」等にして、書き込みの権限を与えておきます。
2.PHP スクリプト例
ブラウザからアクセスして、RSS情報の表示をするためのPHPファイルを次のように用意します。 (以下、名前をmag.phpとします)
PHP RSS表示用のスクリプト(ソース)
<?php
$q_encode=urlencode("グーグル");//検索キーワード
$output="rss";//rss or atom
$num=10;//表示件数
define('MAGPIE_CACHE_AGE','7200');//cacheを残す時間
define('MAGPIE_CACHE_DIR', './cache');//Cache(キャッシュ)用のディレクトリ
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');//アウトプットの文字コード
require_once './rss/rss_fetch.inc';//アップロードしたrss_fetch.incがあるところ
$rss = fetch_rss("http://news.google.com/news?hl=ja&ned=us&q=$q_encode&ie=UTF-8&output=$output&num=$num");
//print_r($rss);//取得結果
foreach($rss->items as $key => $value){
print "<p>".$value['title']."</p>\n";
print "<div>".$value['description']."</div>\n";
/*
配列のキーは、title、description以外にも
link,guid,pubdate,summary,date_timestamp
などが指定できます
*/
}
?>
全体の構成は
rss
- rss_cache.inc
- rss_fetch.inc
- rss_parse.inc
- rss_utils.inc
extlib
-Snoopy.class.inc
mag.php
cache
ブラウザでmag.phpを表示すれば、$q_encodeで指定したキーワード関連のニュースが表示できると思います。
PHPのXMLパーサ関数を使う
ライブラリーを使わないで、用意されているXMLパーサ関数を使っても同じことができます。 RSS・Atom専用ではないので、アマゾンのWebサービスを始めとする一般的なXMLデータの解析にも使えます。
PHPのXMLパーサ関数としては、 「xml_parser_create」 「xml_ parser_ set_ option」 「xml_parse_into_struct」 「xml_parser_free」 あたりを使えばいいかもしれない。
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$xmldata,$values_array,$index_array);
xml_parser_free($parser);
print_r($values_array);
print_r($index_array);
$xmldataに解析(パース)したいXMLデータを入れて、上のスクリプトを実行すれば、 $values_array,$index_arrayにXMLの構造が配列として代入されます。
XMLデータは、file、 fopenとか、 Net_Socketで取得することになると思います。
PHP5からは、 SimpleXML関数が追加されたので、 こちらを使うともっと簡単にできます。(参考:Do You PHP? - PHP5を試してみる - SimpleXML関数でRSSしてみる)