外部ブログのrssだとかfeedだとかをホームページに表示させたら、
最新が表示されてなくて無理やり直した話です。
おつかれさま。こんにちは。皆様お元気でしょうか。
「プレミアムフライデー」、覚えてますか?
なんでしたっけ。
さて、ここ数日、いくつかのホームページに表示させている外部ブログサービスのfeedやrssが最新にならず、 解決法を探したけど無かったので号泣しながら無理やり解決した状況を記しておきます。

状況
その1.ワードプレスを利用している。
その2.いくつかは、RSSを呼び出すのに便利で手間のかからないワードプレスのプラグイン
「RSS Antenna」 を利用している。
その3.いくつかは、手書きのPHPで直接読み込んでいる。
症状
その1.FC2のRSSをホームページに表示させたけど、内容が3日前の記事。
(最新記事は別にあり)
その2.アメーバブログからホームページにRSSを表示させたけど内容が30日前の記事。
(最新記事は別にあり)
その3.ライブドアブログからホームページにRSSを表示させたけど内容が3か月前の記事。
(最新記事は別にあり)
原因の追究
それぞれのブログはそれなりに更新されているが、前の情報が表示される。 それぞれのRSSやFEEDをチェックしたら、ちゃんと最新。
・・・原因はキャッシュが残っているから?

解決への道
新しい情報が表示されない症状が出ているときに試してみた。
スーパーリロード(Ctrl+F5)を連打。>無駄。 rssの画面でスーパーリロード(Ctrl+F5)を連打。>無駄。
>>解決したとしても、閲覧されるユーザーにしてもらわないといけないので無意味。
>>プラグイン上、またはPHP上で解決を図る必要がある。
そこで、ふと思い立って「RSS Antenna」の設定を変えてみた。
RSSフィードのところに書かれている~~index.rdfの後ろに、アレを足します。
これで、HP上を確認してみると、なるほど。最新のRSSに更新されました。
「よし、書いた後にクライアントにこの?の後ろの数字を変えてもら」うなんて、
とんでもないので、自動化します。
「RSS Antenna」を無理やり改造。
いろいろ考えた結果、「RSS Antenna」に無理やり1行足すことにしました。
以下、自己責任ゾーン。
プラグイン名 RSS Antenna version2.1.0
rss-antenna.php 233行目付近。
private function createItems(){ $feed_count = $this-->setting['feed_count']; $feed_urls = $this->getFeedArray($this->setting['feeds']);
↓
private function createItems(){ $feed_count = $this-->setting['feed_count']; $feed_urls = $this-->getFeedArray($this->setting['feeds']); //キャッシュ対策で日付を追加してみる $feed_urls[0] .="?".date("ymdH");
date(“ymdH”);は日付と時間が挿入されるので、これで1時間おきにRSSを読み込みなおすはず。
ちなみに「RSS Antenna」内にもキャッシュをクリアする一文があるような雰囲気だったんですが、なぜ効かなかったんだろう。不思議ですね。
rss-antenna.php 222行目付近。すでに30分おきになってました。
const CATCH_TIME = 3600;//3600秒 = 1時間↓
const CATCH_TIME = 1800;//1800秒 = 30分
PHPでRSSを取得するところに1行追加。
PHPでRSSを取得する方法については、どこからか拝借して利用したのですが、忘れてしまいましたので、 RSSのURLを指定するところの一文を加えましたよってところだけ紹介しておきます。
$rssurl = '取得するブログのURL.blog.fc2.com/?xml';↓
$rssurl = '取得するブログのURL.blog.fc2.com/?xml'; $rssurl .= '&'.date("ymdH");
これでOK。最新情報が表示されるようになりました。

さてこれで、晴れて最新の情報が表示されるように改良したわけです。 キャッシュの問題は根強いですね。