外部サイトの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で直接表示しても良いのですが、それだと外部サイトにエラーが発生している場合など、こっちのサイトもロード状態になってしまったりするので、非同期通信がベストと思います。




