どうも、コウイチです。
今回は、PHPでRSSフィードを取得して、ブログの更新情報を表示するプログラムを解説します。
※ここに書いたやり方は、自サーバーの php.ini の allow_url_fopen が On でないと駄目みたいです。
RSSフィードとは
RSSフィードとは、簡単に言うと「XML形式で配信される、Webページの更新情報」のことです。
ブログやWebサイトの多くがこの、RSSフィードというものを配信しています。
これを取得することで、リアルタイムでブログ等の更新情報を表示することができます。
RSSフィードを実際に見てみましょう
実際に見てもらった方が早いですね。
まずは、こちらをご覧ください。このブログが配信しているRSSフィードです。
このように、ブログの更新情報が表示されました。
PHPでこれらの情報を取得することができれば、自分のブログや外部のブログの更新情報を、
リアルタイムで自分のサイトに表示することなどができます。
無料ブログでもRSSフィードが配信されているところは多いですし、WordPressでも配信されています。
取得したいRSSフィードのURLを調べる
準備として、取得したいRSSフィードのURLを調べる必要があるので、まずは調べます。
Internet Explorerの場合
コマンドバーのRSSフィードボタンから調べられます。
コマンドバーが無い場合は出してから、RSSフィードボタンを押しましょう。
Firefoxの場合
Google Chromeの場合
Google Chromeは、標準ではRSSフィードボタンがありません。
公式アドオンを入れればボタンは出ます。 ⇒ RSS Subscription Extension(by Google)
ただ見た感じ、RSSフィードのURLを調べられないみたいなので、IEかFirefoxを使うといいと思います。
RSSフィードのページが開けたら、アドレスバーに表示されているURLをメモしておいてください。
RSSフィードのXML構成を調べる
RSSフィードのXML構成を調べます。
どういうことかというと、今表示したRSSフィードページのソースを表示してください。
実際にはこのように、XML形式になっています。
今回は、「記事タイトル」、「記事URL」、「公開日時」、「記事説明」の4つを各記事ごとに取り出して、配列に入れたいと考えているので、これらの値がどのような構成になっているか見ます↓
見た感じ、channelタグの中に、各記事毎で titleタグ、linkタグ、pubDateタグ、descriptionタグ があるようです。
この4つのタグの中身を取り出せば良さそうですね。
配信されているRSSのバージョン等によって、構成が変わることがあるので、取得したいRSSフィードのXML構成は、しっかり確認しておきましょう。
PHPソースコード
それでは実際に、PHPでRSSフィードの情報を取得して、表示するコードを見ていきます。
割とシンプルに書けます。
lib.php(関数定義)
はじめに、指定したURLのRSSフィード(XML)を取得し、配列にして返す getRssFeedArray関数 を作成します。
1.simplexml_load_file 関数で、指定したRSSフィードのxmlデータを読み込みます。
引数に、ファイルとしてURLを指定しているので、サーバーの php.ini の allow_url_fopen が On でないと駄目みたいです。
1 2 |
// 取得して準備 $xml = simplexml_load_file($url); |
2.foreach文で、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 |
<?php // 指定したURLのRSSフィードを配列で取得する! function getRssFeedArray($url, $nKiji){ // (引数:RSSフィードURL, 取得したい記事数) // 取得して準備 $xml = simplexml_load_file($url); if($xml){ // 準備できたら $i = 0; // カウンタ foreach($xml->channel->item as $item){ // マズい文字は変換しながら各種データを取得する。 // 記事タイトル $a[$i]['title'] = htmlspecialchars($item->title, ENT_QUOTES, "UTF-8"); // 記事URL $a[$i]['link'] = htmlspecialchars($item->link, ENT_QUOTES, "UTF-8"); // 公開日時 $time = strtotime($item->pubDate); $a[$i]['time'] = getTime_j(htmlspecialchars($time, ENT_QUOTES, "UTF-8")); // 記事説明 $a[$i]['description'] = htmlspecialchars($item->description, ENT_QUOTES, "UTF-8"); $i++; // 取得するのは$nKiji分だけ if($i == $nKiji){ break; } } }else{ // エラーです。 } // お疲れ様でした return $a; } // time値から日本語値を得る。 function getTime_j($time){ $weeks = array('日','月','火','水','木','金','土'); $time_j = date('Y/m/d',$time).'('.$weeks[date('w',$time)].')'.date('H:i:s',$time); return $time_j; } ?> |
printRSSFeed.php
それでは、上記で作成した getRssFeedArray関数 を呼んで、最新5記事の情報を取得して、表示してみます。
$rss_urlには、メモしておいたRSSフィードURLを入れてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php // ライブラリロード require_once('./lib.php'); $rss_url = 'https://senews.jp/wp/feed/'; // 最新5記事の情報を取得して表示してみる。 $feedArray = getRssFeedArray($rss_url, 5); foreach($feedArray as $f){ print '<p>'; print '<a target="_blank" href="' . $f["link"] . '">' . $f['title'] . '</A>(' . $f['time'] . ')<br />'; print $f['description']; print '</p>'; } ?> |
実行結果
実行結果を見てみましょう!
こんな感じです。
これで、PHPを使ってRSSフィード情報を取り出し、表示することができました。
まとめ
PHPでRSSフィード情報を取り出すことができれば、あとは好きなように整形して、表示すればいいだけです。
是非、いろいろ試してみてください。
お疲れ様でした。
コメント