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を取得することはできません。
ソート前は、24時間以内に更新された記事を表示することにした。
— おまんじゅう皿 (@omanjusara) 2018年12月28日
このために、日時を指定してUNIX TIMESTAMPを取得する関数strtotime()で、UNIX TIMESTAMPを指定したり、UNIX STAMPと絶対日時を引き算しようとする悲しい間違いを、ググる時間込みで手を替え品を替え2時間くらいやってた。