xxx.s500

トップ | 最近の更新 | このサイトについて | rss2.0

[php] 外部rssを取得してサイト上に表示する

  1. php側:rssをパースしてjsonで書き出す
  2. html側:phpファイルが書き出したデータをjsonpで取得

という流れにしてみた。
rss取得専用にファイルを分けた理由は、rss発行側のサーバにトラブルがあった場合でもサイトの表示速度に影響がないようにしたかったから。

rss取得部分

外部rssを読み込んでjsonpで読み込めるように書き出す処理。rss2.0専用。
以下のソースを rss_get.php という名前で保存。

<?php
header("content-type: application/javascript; charset=utf-8");

$rss = 'http://(rss2.0のURL)';
$data = simplexml_load_file($rss);
$data = $data->channel->item;

echo "callback([";
foreach($data as $d){
  $pd = date_parse_from_format("D, d F Y H:i:s O", $d->pubDate);
  $pd = sprintf("%s年%s月%s日 %02d:%02d",$pd['year']
    ,$pd['month'],$pd['day'],$pd['hour'],$pd['minute']);
	
  printf('{"date":"%s", "title":"%s", "link":"%s"},'
    , $pd, htmlspecialchars($d->title), $d->link);
}
echo "]);";

サイト上に書き出す処理

ul.rssDataというノードの中にjqueryを使って吐き出してみた。

$(document).ready(function(){
  $.ajax({
  type: 'GET',
  url: '(rss_get.phpのurl)',
  dataType: 'jsonp',
  jsonpCallback: 'callback',
    success: function(json){
      for(var e in json){
        $("ul.rssData").append('<li><a href="'+json[e].link+'">'+json[e].title+'<br /><small>'+json[e].date+'</small></li></a>');
      }
    }
  });	
});