Written by Manabu Bannai

【コピぺで完了】外部RSS読み込んで別のページに出力する方法【PHP】

PHP PROGRAMMING

備忘録的なまとめです。
外部RSSを読み込んで出力するPHPスクリプトです。

可能な限りRSSを取得するPHPスクリプト

RSSの配信数はサイトによって決まっていますが、以下のスクリプトでは可能な限りRSSを取得することができます。例にはぼくのブログを使っていますが、RSSの配信数は10個となっています。

<?php
	$rss = simplexml_load_file('https://manablog.org/feed/');
	echo '<ul>';

	foreach($rss->channel->item as $item){
		$title = $item->title;
		$date = date("Y年 n月 j日", strtotime($item->pubDate));
		$link = $item->link;
	?>

	<li>
		<a href="<?php echo $link; ?>" target="_blank">
		<span class="date"><?php echo $date; ?></span>
		<span class="title"><?php echo $title; ?></span>
		</a>
	</li>
<?php }  echo '</ul>'; ?>

必要な数だけRSSを取得して表示するPHPスクリプト

$num_of_dataで取得数を定義できます。

<?php
	$rssdata = simplexml_load_file("https://manablog.org/feed/");

	// 読み込み件数を決定する
	$num_of_data = 5;

	//出力内容の初期化
	$outdata = "";

	//設定した読み込み件数分だけ取得を繰り返す
	for ($i=0; $i<$num_of_data; $i++){
		$entry = $rssdata->channel->item[$i]; //記事1個取得
		$date = date("Y年 n月 j日", strtotime($entry->pubDate));
		$title = $entry->title; //タイトル取得
		$link = $entry->link; //リンクURL取得

		//出力内容に日付けを入れる
		$outdata .= '<li><a href="' . $link . '">' . $date;

		//出力内容にリンク付きでタイトルを入れる
		$outdata .= '<span>' . $title . '</span></a></li>';
	}

	echo '<ul>' . $outdata . '</ul>'; //実行結果を出力する

サムネイルは以下のように取得できます

$items = simplexml_load_file('http://matome.naver.jp/feed/hot')->channel->item;
$url = (string)$items[0]->children('media', true)->thumbnail->attributes()->url;
<a href="<?php echo $items->link; ?>"><img src="<?php echo $url; ?>"></a>

はてなブログの場合は動かないので、RSS & Atom Feeds for PHPを使いましょう

はてなブログだとエラーが出ちゃうので下記ライブラリで動かせます。
» dg/rss-php: Small and easy-to-use library for consuming RSS and Atom feeds

<?php
require_once 'src/Feed.php';
$rss = Feed::loadRss('http://ttt414141.hatenablog.com/rss');
?>

<style type="text/css">
	ul li:nth-child(n+6){
		/* 5番目以降は非表示 */
		display: none;
	}
</style>

<ul>
	<?php foreach ($rss->item as $item): ?>
		<li>
			<?php echo date("Y/m/d", (int) $item->timestamp) ?>:
			<a href="<?php echo htmlSpecialChars($item->link) ?>"><?php echo htmlSpecialChars($item->title) ?></a>
		</li>
	<?php endforeach ?>
</ul>

こんな感じ。はてなブログだとRSSが全件表示になっているので、CSS(ul li:nth-child(n+6))で5件目以降の部分は非表示にしています。ちょっとトリッキーですが、、まぁいいかなと。

以上となります。
参考になれば幸いです。

※P.S:無料メルマガで発信中:過去の僕は「ブログ発信で5億円」を稼ぎました。次は「30億円」を目指します。挑戦しつつ、裏側の思考を「メルマガ」から発信します。不満足なら1秒で解約できます。無料登録は「こちら」です。