• ベストアンサー

RSSブロガーに新着マーク

レッツPHPさんのRSSブロガーを利用しております。http://loglog.jp/~php/net/ これに新着情報を書き込んだ際、にNEWマークを3日間ぐらい表示させていのですが、どのようにすれば良いでしょうか?具体的にこのようにすれば出来るなど教えていただければと思います。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.1

こんにちは。 取得したRSSから記事の投稿日が取れるので、それを現在の時間と比較してやれば、簡単に実現できます。 レッツPHPさんのスクリプトでは、$dateという変数に日時の文字列を格納しています。 この文字列は、RFC822で定められた(人間に分かりやすい)日時形式ですが、プログラム上で比較するにはちょっと面倒な形式なので、strtotime関数でUNIXタイムスタンプ(1970/1/1からの積算秒数)に直してあげます。 現在時刻のUNIXタイムスタンプはtime関数から取得できるので、 「現在時刻が、記事投稿日から3日を経過していない時」Newマークを出してあげればよい、プログラム上では、 「time() < strtotime($date) + 60*60*24*3」の条件を満たす時、<img>タグか何かを出力すれば良いことになります。 一例ですが、レッツPHPさんのスクリプトの35行目付近から始まるBのヒアドキュメント部分を以下のように書き換えれば目的の機能になるかと思います。 // 内容 echo <<<B1 <tr bgcolor="#ffffff"><td><small> B1; if( time() < strtotime($date) + 24*60*60*3 ) { echo "<img src=\"new.gif\">"; } echo <<<B2 <a href="$link" target=_new>$title</a><br> $desc </small></td></tr> B2; あと、蛇足ですが、RSSにはいくつかよく使われるバージョンがありまして、現在レッツPHPさんで公開されているスクリプトの日付部分はRSS2.0には対応していないようです。 応急処置のような感じですが、33行目(かな?$dateへ代入する部分)を下記のように変更すれば、とりあえずRSS2.0でも動作するようになります。 $date = $val[$i]['pubdate']; if($date == "") { $date = $val[$i]['dc:date']; } 最後に、現在のスクリプトはrssv.php?u=http:example.com/xxx.rssとパラメータuを取得するようになっていますが、もし、対象RSSのURLが固定なら、セキュリティの観点から、10行目を $rdf = $_GET['u']; から $rdf = 'http:example.com/xxx.rss'; と固定するべきかと思います。 何か、疑問点がありましたら、補足をください。 (参考URLはRSS2.0仕様の解説です)

参考URL:
http://hail2u.net/documents/rss20notes.html
active123
質問者

補足

詳細な情報を頂きありがとうございます。非常に助かりました。 今、色々と作業をしています。ところで、またお聞きしたいのですが、この機能に日時を表示させたく以下のソースを記入しました 27行目付近より for ($i=0; $i<$num; $i++) { $val = $r->getItems(); $title = mb_convert_encoding(strip_tags($val[$i]['title']), $code, "UTF-8,EUC-JP,SJIS"); $desc = mb_convert_encoding(strip_tags($val[$i]['description']), $code, "UTF-8,EUC-JP,SJIS"); $link = htmlspecialchars($val[$i]['link']); $date = $val[$i]['dc:date']; $time = (isset($val[$i]['pubdate'])) ? strtotime($val[$i]['pubdate']) : strtotime(str_replace("T", " ", substr($val[$i]['dc:date'], 0, 19))); $koushin = date("Y/m/d", $time); // 内容 echo <<<B <tr bgcolor="#ffffff"><td><small> $koushin <a href="$link" target=_new>$title</a><br> $desc </small></td></tr> B; } これで日時も表示が出来たのですが、RSSブロガーの最大表示件数を5件にします。 例えば1件ブログなどで書き込みをこのRSSブロガーの部分で表示をすると1件は日時とタイトルが表示されるのですが、残りの4件の日付が1970/01/01 と表示されタイトル無しの表示が4つ並びます。 ↓このような感じ 2008/02/14 テスト 1970/01/01  (空白) 1970/01/01  (空白) 1970/01/01  (空白) 1970/01/01  (空白) これだと見た目が悪いので空白部分の日時と空白部分は表示させたくないのですが、何か良い方法はございますか宜しくお願い致します。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.2

日時の問題は、無事解決したようで何よりです。 余計な空白行の問題ですが、記事タイトルが取れなかったらループを抜けるようにしてみては? >27行目付近より > >for ($i=0; $i<$num; $i++) { >$val = $r->getItems(); >$title = mb_convert_encoding(strip_tags($val[$i]['title']), $code, "UTF-8,EUC-JP,SJIS"); if($title == "") {  break; }

すると、全ての回答が全文表示されます。

関連するQ&A