【PHP】 RSSフィードを取得して、ブログの更新情報を表示してみる。

プログラミング

どうも、コウイチです。

今回は、PHPでRSSフィードを取得して、ブログの更新情報を表示するプログラムを解説します。

※ここに書いたやり方は、自サーバーの php.ini の allow_url_fopen が On でないと駄目みたいです。

RSSフィードとは

RSSフィードとは、簡単に言うと「XML形式で配信される、Webページの更新情報」のことです。

ブログやWebサイトの多くがこの、RSSフィードというものを配信しています。

これを取得することで、リアルタイムでブログ等の更新情報を表示することができます。

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 でないと駄目みたいです。

// 取得して準備
$xml = simplexml_load_file($url);

2.foreach文で、xmlデータを配列に格納して返す。

という関数です。

以下がソース全文です。

<?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を入れてください。

<?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フィード情報を取り出すことができれば、あとは好きなように整形して、表示すればいいだけです。

是非、いろいろ試してみてください。

お疲れ様でした。

コメント