RSSデータを取得して出力する方法をご紹介したいと思います。
なんとなく今更感たっぷりですが、まあ、使える用途はあると思います。
個人的に使うのならリーダーで見たら良いのですけど不特定多数に紹介するという方法なら利用価値有るのではないでしょうか?
個人的にsimplexml_load_stringの関数を使ってみたかっただけなんです。
でも汎用性が有るように作ってみました。結構便利な関数です。今回cURLという関数も初めて知りました。
参考サイトたくさんあったのですが、いくつかわからなくなりました(汗)
スポンサーリンク
RSS/ATOM取得コード
まず2つの関数を作ります。ファイルの一番上とかに記述しておいたら良いでしょう。
xmlデータを読み込んで出力する関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <?php function rss_get_contents($url){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url ); curl_setopt($curl, CURLOPT_HEADER, false ); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true ); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_MAXREDIRS, 1); $result = curl_exec($curl); curl_close($curl); return $result; } function outPutRss($rss, $maxsize = 5) { if (isset($rss->channel->title)) { $site_name = $rss->channel->title; $site_url = $rss->channel->link; } else { $site_name = $rss->title; $site_url = $rss->link['href']; } printf('<h2><a href="%s" target="_blank">%s</a></h2>', $site_url, $site_name); if (isset($rss->item)) { $items = $rss->item; } elseif (isset($rss->channel->item)) { $items = $rss->channel->item; } else { $items = $rss->entry; } $i = 0; foreach ($items as $item) { if($i >= $maxsize){ break; } else { $i++; if (isset($item->link)) { $link = $item->link; } else { $link = $item->link['href']; } $title = $item->title; if (isset($item->description)) { $content = $item->description; } else { $content = $item->content; } $content = strip_tags($content); $content = mb_strimwidth($content, 0, 300, '・・・', 'UTF-8'); $pubDate = $item->children('http://purl.org/dc/elements/1.1/'); if (isset($item->pubDate)) { $time = $item->pubDate; } elseif (isset($pubDate->date)) { $time = $pubDate->date; } elseif (isset($item->issued)) { $time = $item->issued; } else { $time = $item->published; } $dt = new DateTime($time); $time = $dt->format('Y/m/d H:i:s'); printf('<dt><a href="%s" target="_blank">%s</a>(%s)</dt>', $link, $title, $time); printf('<dd>%s</dd>', $content); } } } ;?> |
あとはHTMLの中に下記を入れてしまえば出来上がりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $rss_urls = array( "http://feeds.feedburner.com/hatena/b/hotentry", "http://jp.techcrunch.com/feed/", "http://feeds.lifehacker.jp/rss/lifehacker/index.xml", "http://rss.dailynews.yahoo.co.jp/fc/rss.xml", "http://rss.itmedia.co.jp/rss/2.0/topstory.xml", ); foreach ($rss_urls as $url) : $result = rss_get_contents($url); $rss = simplexml_load_string($result); ;?> <dl> <?php outPutRss($rss,10);?> </dl> <?php endforeach;?> |
これで出力されます。$rss_urlsに複数のフィードのURLを入れていけば、複数取得します。
outPutRss($rss,10)の10は件数ですそのサイト最新の10件を取得します。20でも3でもすきなように数字を変えてください。
何個かのブログで試してみましたが、googleとかのRSSはなぜか取得できませんでした。。。。
だいたい主要なものはうまく取得できているのですが、取得できないものもございますのでご了承くださいませ。
以上ですー
参考サイト
・PHPでRSSを読み込む方法
・PHPのプログラムからRSSを取得する方法
・PHPメモ:file_get_contentsの代替にcURLを使う