皿ノート

ひとりごと

PHPでRSSフィードの24時間以内の投稿記事だけ取得する方法

やりたいこと

PHPで、24時間以内に更新された記事だけのブログRSSを取得して、トップページに表示させる方法。
厳密には実現できていませんが、それに近いところには達しました。

実際に書いたコード

<?php
echo "<h2>24時間以内に更新された記事</h2>";
for($n=0; $new <= 86400 ; $n++){
$new = $_SERVER['REQUEST_TIME'] - $outdata[$timestamp[$n]]['GNU'];
echo "<pre>";
echo $outdata[$timestamp[$n]]['date']." ";
echo $outdata[$timestamp[$n]]['category']." ";
echo "<a href=";
echo $outdata[$timestamp[$n]]['url'];
echo ">";
echo $outdata[$timestamp[$n]]['title'];
echo "</a>";
echo "</pre>";
}
?>

メモ

$outdataにarrayで入れているブログ記事データは、更新時間で降順(新→古)に並べかえています。
24時間以内の記事を取得したいので、現在の時刻から24時間前まではループを続けることにします。

現在時刻のUNIX TIMESTAMPから、更新時間のUNIX TIMESTAMPをマイナスし、その解が86400(60秒*60分*24時間)以下または同じならば、24時間以内ということです。

86400以下の記事だけをループで表示させ、86400以上になったらループを抜けるようにします。

結果

おおよそ24時間以内の記事が表示されるようになりましたが、厳密にはもう数時間前の記事も表示されてしまっています。

strtotime()関数とUNIX TIMESTAMPで間違ったこと

strtotime()関数でUNIX TIMESTAMPを指定して、UNIX TIMESTAMPを取得しようとしていました。

$new = $strtotime($_SERVER['REQUEST_TIME']) - $outdata[$timestamp[$n]]['GNU'];

strtotime()関数は、UNIX TIMESTAMPを取得する際に使う関数です。UNIX TIMESTAMPを指定してUNIX TIMESTAMPを取得することはできません。

参考にした記事

syncer.jp