RSSデータ表示に関しまして【ギブアップです】
先週からRSSデータの表示について作業が止まっております。
ご存知でしたら、皆様のお知恵をお借りしたいと思い質問させて頂きました。
複数のブログの記事を更新時間順に表示したいと思っています。
こんな感じです。 ⇒ http://blogs.yahoo.co.jp/FRONT/update.html
例えば、同じBLOGから数分後に2度更新されたら、その記事タイトルも表示します。
※1BLOG 1エントリーの表示ではなく、1BLOG 複数エントリーの表示が可能であり、
あくまで更新時間順に表示します。
また、表示件数も指定したいと思っています。
このようなPHPのサンプルがあるサイトなどご存知でしたら教えてください。
お願い申し上げます。
ちなみに現在作成できているPHPのソースは以下通りで、更新時間順に記事を表示できますが、
記事の表示件数が指定できないので全ての記事を表示してしまいます。
1BLOG5つの記事を読み込んでいき、ソートし表示しています。
表示件数の指定方法がわからず、またプログラムも初めてなので無茶苦茶な作りになっています。
上述のPHPサンプルか以下ソースで表示件数の指定および配列の操作についてご教示お願いします。
<?php
require "xxx/yyy/RSS.php";
// 表示データ用配列の初期化
$showArray = array();
// RSSサイトURL(複数可)
$rdf[] = "http://xxxxxxxxx/xxxxx/";
$rdf[] = "http://yyyyyyyyy/yyyyy/";
// 変数初期値
$num = 0;
$datacnt = 0;
// サイト文字コード(SJIS、EUC-JPなど)
$code = "SJIS";
// 日付ソート関数
function cmp ($a, $b) {
$a = (isset($a['items'][0]['pubdate'])) ? strtotime($a['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($a['items'][0]['dc:date'], 0, 19)));
$b = (isset($b['items'][0]['pubdate'])) ? strtotime($b['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($b['items'][0]['dc:date'], 0, 19)));
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
// RSS取得・解析
foreach ($rdf as $k=>$rssurl) {
$r =& new XML_RSS($rssurl);
if (PEAR::isError($r)) continue;
$r->parse();
if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo();
$ch[$num]['items'] = $r->getItems();
$num = $num + 1;
}
usort($ch, "cmp");
for ($i=0; $i<$num; $i++) {
// サイト名
$site_title = htmlspecialchars(mb_convert_encoding($ch[$i]['title'], $code, "UTF-8,EUC-JP,SJIS"));
// サイトURL
$site_link = $ch[$i]['link'];
for ($n=0; $n<5; $n++) {
// 記事タイトル
$title = mb_convert_encoding(strip_tags($ch[$i]['items'][$n]['title']), $code, "UTF-8,EUC-JP,SJIS");
// 記事内容
$desc = mb_convert_encoding(strip_tags($ch[$i]['items'][$n]['description']), $code, "UTF-8,EUC-JP,SJIS");
// 記事URL
$link = htmlspecialchars($ch[$i]['items'][$n]['link']);
// 記事更新時間(UNIXタイム
$time = (isset($ch[$i]['items'][$n]['pubdate'])) ? strtotime($ch[$i]['items'][$n]['pubdate']) : strtotime(str_replace("T", " ", substr($ch[$i]['items'][$n]['dc:date'], 0, 19)));
// 記事更新日 http://php.net/date
$date = date("m/d H:i", $time);
$dummy = date("m", $time) . date("d", $time) . date("H", $time) . date("i", $time);
$showArray[$dummy] = "<FONT SIZE=2><a href=\"" . $link . "\" target=\"_new\" title=\"" . $desc . "\">" . $title . "</a> 【<a href=\"" . $site_link . "\" target=\"_new\">" . $site_title . "</a>】(" . $date . ")</FONT><br>";
$datacnt = $datacnt + 1;
}
}
// 時間順でソート(必要なのかは良くわからないが上手くいかなかったりする...)
krsort($showArray);
// HTML表示させる
echo(join('',$showArray));
?>
お礼
ご指摘の通り、名前空間を指定したら動くようになりました。 SyndicationFeedも2.0でいけました。 ありがとうございます。 大変助かりました。