ブログを複数のCMSに分けたので、RSSが複数になりました。それぞれのRSSを結合する方法は以下の通り。これで複数のRSSの中身を日付順に入れ替えて、記事リストを表示することができます。
PHPソース
<?php
// 2つのRSSフィードのURL
$url1 = 'http://example.com/rss1.xml';
$url2 = 'http://example.com/rss2.xml';
// 2つのRSSフィードを取得してSimpleXMLElementオブジェクトに変換
$xml1 = simplexml_load_file($url1);
$xml2 = simplexml_load_file($url2);
// 2つのRSSフィードを結合して、日付で降順にソート
$items = array_merge($xml1->channel->item, $xml2->channel->item);
usort($items, function($a, $b) {
return strtotime($b->pubDate) - strtotime($a->pubDate);
});
// リスト形式で記事のタイトルとURLを表示
echo '<ul>';
foreach ($items as $item) {
$title = $item->title;
$url = $item->link;
$date = date('Y年m月d日', strtotime($item->pubDate));
echo '<li>' . $date . ' <a href="' . $url . '">' . $title . '</a></li>';
}
echo '</ul>';
?>
説明
上記のコードでは、simplexml_load_file
関数を使用してRSSフィードをSimpleXMLElementオブジェクトに変換し、array_merge
関数を使用して2つのRSSフィードを結合しています。その後、usort
関数を使用して記事を日付で降順にソートします。
最後に、foreach
ループを使用して、記事のタイトル、URL、および日付をリスト形式で表示しています。ここで、date
関数を使用して日付を表示しています。
これで2つのブログの最新記事が日付順に表示されるはずです。
表示されない場合
item
要素がchannel
の直下に無いなど、ウェブサイトによってRSSフィードの構造が異なる場合があります。その場合、以下2つのコードのどちらかを追加すると解決できるはずです。
xpathでitemを取得する場合
item
要素がchannel
の直下にない場合は、以下のようにxpath
関数を使用して、item
要素を取得することができます。
$items1 = $xml1->xpath('//item');
$items2 = $xml2->xpath('//item');
$items = array_merge($items1, $items2);
当ブログはこちらを追加して解決できました。
Qwerty.Work
コマンドやスクリプト、エラーやトラブル解決、ベンチマーク,高速化など、主にパソコンのこといろいろ書いています。
children()で取得する場合
item
要素がchannel
の直下にある場合は、item
要素が含まれている配列を取得するために、$xml1->channel->item
という形式ではなく、$xml1->channel->children()
という形式を使用することもできます。
$items1 = $xml1->channel->children();
$items2 = $xml2->channel->children();
$items = array_merge($items1->item, $items2->item);