ちょっとご飯奢ってやる感覚でご支援お願いしまーす!

PHPで複数のRSSをまとめて、更新時間順で並べて表示したい

いくつかのブランドサイトがあって、それぞれのキャンペーン情報や投稿をまとめて企業サイトにも表示したい。みたいな時に使える方法。

今回は複数のWordpressサイトのRSSを探してきてまとめてみます。

RSSアイコンを表示してるサイト、してないサイトもありますが、基本投稿があれば自動で生成されてるはずなのでサイトURLのあとに「/feed」をつけてあげればOKなはず。

https://pink-panda.me/feed

みたいな感じ。

RSSが見つからなかったら

このサイトとかで無料で、RSSを取得したいサイトのURLを入れて存在してれば教えてくれます。

こんな感じ!

まずはRSSを取得して表示してみる

// RSSフィードからRSS取得
$feed1 = file_get_contents('https://pink-panda.me/feed');

// XML解析するための不正文字削除
$characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/';
$feed1 = preg_replace($characters, '', $feed1);

// 文字列をXMLとして解析して、SimpleXMLElementクラスのインスタンスに変換
$rss1 = simplexml_load_string($feed1);

foreach($rss1->channel->item as $item){
 print "<a href='".$item->link."' target='_blank'>"$item->title."</a> | ".date("Y年 n月 j日", strtotime($item->pubDate))."<BR>".strip_tags($item->description)."<hr>";
}

こんな感じで表示できる↓

PHPで複数のRSSをまとめて、更新時間順で並べて表示したい | 2020年12月17日
いくつかのブランドサイトがあって、それぞれのキャンペーン情報や投稿をまとめて企業サイトにも表示したい。みたいな時に使える方法。 今回は複数のWordpressサイトのRSSを探してきてまとめてみます。 RSSアイコンを表示してるサイト、してないサイトもありますが、基本投稿があれば自動で生成されてるはずなのでサイトURLのあとに「/feed」をつけてあげればOKなはず。 https://pink-p

複数のfeedを読み込む

あとは上記の処理を複数化してあげれば良いだけ。

無駄にわかりやすく書きます。

$feed1 = file_get_contents('https://pink-panda.me/feed');
$feed2 = file_get_contents('https://blue-panda.me/feed');
$feed3 = file_get_contents('https://yellow-panda.me/feed');
$feed4 = file_get_contents('https://black-panda.me/feed');

$characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/';
$feed1 = preg_replace($characters, '', $feed1);
$feed2 = preg_replace($characters, '', $feed2);
$feed3 = preg_replace($characters, '', $feed3);
$feed4 = preg_replace($characters, '', $feed4);

$rss1 = simplexml_load_string($feed1);
$rss2 = simplexml_load_string($feed2);
$rss3 = simplexml_load_string($feed3);
$rss4 = simplexml_load_string($feed4);

$R1site = "ピンクパンダ";
$R2site = "ブルーパンダ";
$R3site = "イエローパンダ";
$R4site = "ブラックパンダ";

$title = array();
$date = array();
$link = array();
$site = array();

foreach($rss1->channel->item as $item){
  $title[] = $item->title;
  $date[] = date("Y年 n月 j日", strtotime($item->pubDate));
  $link[] = $item->link;
  $site[] = $R1site;
}
foreach($rss2->channel->item as $item){
  $title[] = $item->title;
  $date[] = date("Y年 n月 j日", strtotime($item->pubDate));
  $link[] = $item->link;
  $site[] = $R2site;
}
foreach($rss3->channel->item as $item){
  $title[] = $item->title;
  $date[] = date("Y年 n月 j日", strtotime($item->pubDate));
  $link[] = $item->link;
  $site[] = $R3site;
}
foreach($rss4->channel->item as $item){
  $title[] = $item->title;
  $date[] = date("Y年 n月 j日", strtotime($item->pubDate));
  $link[] = $item->link;
  $site[] = $R4site;
}

// 多次元配列化
$ALL = array($title,$date,$link,$site);
// ここで更新時間ソート
array_multisort(array_map("strtotime", array_column( $ALL, "1" )), SORT_ASC, $ALL);
// RSSの記事数カウント
$count = count($title);

for($i=0;$i<$count;$i++){
  print "【".$ALL[3][$i]."】<a href='".$ALL[2][$i]."' target='_blank'><B>".$ALL[1][$i]."</B></a> | ".$ALL[0][$i]."<HR>";
}

こうすることで↓こんな感じで出せるようになる。

【ピンクパンダ】 パンダが動物園から脱走 | 2020年 12月 9日
【ブルーパンダ】 ついにブルーパンダ登場 | 2020年 11月 30日
【ブラックパンダ】 やさぐれが止まらない | 2020年 10月 13日
【イエローパンダ】 みかんの食べ過ぎ注意 | 2020年 8月 17日

ピンパンをシェアしよう!

ABOUT US

PinkPanda
いろんな情報をまとめるポータルサイト♪ 不具合やご要望はTwitterとかで!中の人はプログラマーとかじゃないから限界は浅い。
nuts、小悪魔ageha、LARME、ラブベリーといった女性誌元編集者。現在はブランディングやプロモーションなどを行うディレクター業。そんな中時間を見つけてコツコツまとめます。
応援&ご支援はウィッシュリスト