外部サイトのRSSを取得する
新規のホームページ制作をWordPressでというケースなら、ブログもそこで書けますが、既にアメブロなんかでブログを書いていらっしゃるケースで、その一覧を独自ドメインのホームページへ表示したいといった要望は割と多いです。
ブログはRSSフィードが公開されてますので取得は簡単ですし、そういったライブラリーもたくさんあるので、それを使うって手もあるのですが、私的にあまりごちゃごちゃとファイルを読み込みたくないので、自前で取得しているのですが、その方法をご紹介。
外部ブログという事で、アメブロのスタッフさんのを取得してみます。
RSSフィードの情報を取得する
url_proxy.php
https://studio-key.com/Sample/jquery/rss/url_proxy.php
<?php $url = 'http://rssblog.ameba.jp/staff/rss20.xml'; $string = file_get_contents($url); //ファイルを得る $obj = simplexml_load_string($string); //オブジェクトに変換 $obj = xml_row($obj); //配列にする header("Content-type: application/xml"); echo '<?xml version="1.0" encoding="UTF-8" ?> ' . "\n"; echo '<xml>'."\n"; foreach($obj["channel"]["item"] AS $row){ $date = date('Y/m/d H:i:s',strtotime($row['pubDate'])); echo ' <item>'."\n"; echo " <title>{$row['title']}</title>\n"; echo " <link>{$row['link']}</link>\n"; echo " <pubDate>{$date}</pubDate>\n"; echo ' </item>'."\n"; } echo '</xml>'."\n"; /* * RSS解析 */ function xml_row($obj) { $arr = array(); if (is_object($obj)) { $obj = get_object_vars($obj); } else { $obj = $obj; } foreach ($obj as $key => $val) { if (is_object($obj[$key])) { $arr[$key] = xml_row($val); } else if (is_array($val)) { foreach($val as $k => $v) { if (is_object($v) || is_array($v)) { $arr[$key][$k] = xml_row($v); } else { $arr[$key][$k] = $v; } } } else { $arr[$key] = $val; } } return $arr; }
あとはまぁ、jQueryなんかでこのファイルからデータを取り出してリストにします。
$(function(){ $('#rss ul li').remove(); //LIを空に $.ajax({ type: "xml", url: "url_proxy.php", }).done(function(xml){ $(xml).find("item").each(function(){ var html = $(this).find("date").text()+'<a href="'+$(this).find("link").text()+'" target="_blank">'+$(this).find("title").text()+'</a>'; $("<li></li>").html(html).appendTo("#rss ul"); }); }).fail(function(xml){ //error }); });
オブジェクトはそのままでも良いのですが、いったん変数に落とし込んだ方が楽だと思います。特に名前空間があったりすると面倒なので。
PHPで直接表示しても良いのですが、それだと外部サイトにエラーが発生している場合など、こっちのサイトもロード状態になってしまったりするので、非同期通信がベストと思います。