2016/10/15(土)Google Feed APIの代替その2

Google Feed APIの代替からの続きです。

 開発の終わったMagpieRSSを使い続けるのも少し心配なので、今もメンテナンスされているSimplePieを使ってみた。公式サイトからダウンロードしたファイルのうち、libraryフォルダとautoloader.phpをサーバーにアップして、RSSの指定と表示の加工をするスクリプトを同じ階層に置けばいい。サンプルは以下。

 simplepieget.php

 いろんなサイトを参考にして書いたスクリプトは以下。

 simplepieget.txt

 これをMODXで使おうと思ったが、Feed.phpやMagpieRSSとは違ってスニペットからは動かない。どうもキャッシュの仕様がバッティングしているようだ。以前はSimplePieのMODXプラグインがあったが、もはやない。仕方がないので、JSONファイルを出力してGoogle Feed APIのようにJavaScriptで読み込んで表示することにした。参考サイトはPHP用 Google Feed API が完全に廃止されてしまった時の対応方法。ここはRSS-PHP(Feed.php)を使っているが、JSONさえ出力すれば、あとは同じだ。この方法ならMODXだけでなく、他のCMSでも使えるので汎用性がある。

サンプル Simplepie Test

スクリプト simplepieget.txt

JSファイル simplepieget.js

 表示したいページに
<dl id="simplepieget"></dl>

と書けばOK。ただし、JSONファイルを更新するにはスクリプトにアクセスするか、定期的にCRONで動かす必要がある。

 久しぶりにCRONを使ったら、うまく動かない。コマンドラインからスクリプトを実行してみると、「Could not open input file」とエラーが出る。スクリプトのパスは絶対パスで書かなくてはいけないのだった。スクリプトの中のautoloader.phpとJSONファイルの出力先も絶対パスに書き換える必要がある。これで動いた。うまく動けば、「JSONファイル出力OK。」と表示されます。

 しばらく使っていたのだが、時々、表示されないことがある。戻るボタンを使った時などブラウザがキャッシュを読むので、JavaScriptのページ読み込みのイベントが発生しないからだろう。考えてみると、読み込みだけなら、PHPを使った方が簡単だ。JSONファイルのままだとまた加工しなければいけないので、整形したテキストファイルを出力してそれをPHPで読めばいい。simplepieget.txtの最後の行を削除して以下のようなテキストファイルの出力を書く。

$filename = 'simplefeed.txt'; //←出力するテキストファイル。絶対パスで書く
try{
file_put_contents($filename, $html);
        echo "テキストファイル出力OK。"
        }catch(Exception $e){
        echo "テキストファイルの出力に失敗しました。"
        }

 読む込みは以下のような感じでページに書くか、feedget.phpなどのファイル名で実行する。

<?php
$filename = 'simplefeed.txt';
$file = file_get_contents($filename);
echo $file;
?>

 echoをreturnに変えると、MODXのスニペットにも登録できる。