2016/10/01(土)Google Feed APIの代替

 先日、GoogleからFeed APIを終了すると最後通告のメールが来た。以前から非推奨となっていたが、いよいよ2016年12月15日で終了するそうだ。Feed APIはトップページに使っているので代替策を考えなくてはいけない。検索してみると、代替のPHPスクリプトがいろいろ公開されている。セキュリティーを考えれば、PHPの設定でallow_url_fopen=offで動くものが望ましい。

 simplexml_load_fileやfile_get_contentsなどを使っているスクリプトはこの時点でアウト(cURLなどでRSSを取得してsimplexmlを解析に使うのなら良い。複数のRSSに並列リクエスト後マージして返す関数 - Qiitaなど参照)。Feed.php(rss-php)はSimpleXMLとcURLを使い、allow_url_fopen=offの環境でも大丈夫のようだ。

 PHPでRSSやAtomのフィードを取得する方法「Google Feed API」の代替として「rss-php」でRSSやAtomフィードを取得・表示するなどでスクリプトが公開されている。ただしRSSかATOMのどちらかにしか対応しない。両方対応するように少し手を加えた。映画ニュースサイトのRSSを取得したサンプルは以下。

【サンプル】movienews.php

【スクリプト】movienews.txt(拡張子は.phpに変え、UTF-8で保存する。ファイル名は何でも良いです)

 MODXで使う場合はスニペットに登録する。最後から2番目の行の

echo "<dl>" . $html . "</dl>";

を「return $html」に書き換えて、assets/snippetsにアップロード。スニペットを新規作成し、

return @require MODX_BASE_PATH.'assets/snippets/movienews.php';

とスニペットコードに書き、movienewsの名前で保存する。呼び出すページに

[[movienews]]

と書けばOK。

 ただし、Feed.phpでRSS1.0の解析の仕方がよく分からない。というか、パースできない。しょうがないので2005年から更新されていないのであまり気が進まなかったが、Magpie RSSを使ってみた。これは難なく、RSS1.0のフィードを解析できた。古いといっても、RSSの技術自体が2005年当時から変わったわけではない。車輪の再発明をしたい人は別にして、手っ取り早くGoogleから乗り換える代替スクリプトとしては良いと思う。以下はMagpie RSSを利用したサンプル。参考にしたのは複数RSSの統合して更新日時でソートする方法について(MagpieRSS使用) - PHPプロ!Q&A掲示板

【サンプル】feedall.php

【スクリプト】feedall.txt

 Google Feed APIのように表示すると以下の通り。

【サンプル】magpieget.php

【スクリプト】magpieget.txt

 Feed.php、Magpie RSSともキャッシュを作成して、設定時間ごとにRSSファイルを取得する。毎回、取りに行かないのでサーバーへの負荷は抑えることができるだろう。言うまでもなく、cURLが使えない環境では動きません。

 この記事をアップした途端にスクリプトにエラーが出た。調べてみると、リアルサウンドのフィードにエラーがあった。おかしな文字が混ざっているために、フィードの読み込みができない。というわけでmovienews.phpの方にはエラーの内容表示処理を追加した。

このエントリーの続き→Google Feed APIの代替その2