【コピぺで完了】外部RSS読み込んで別のページに出力する方法【PHP】
備忘録的なまとめです。
外部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秒で解約できます。無料登録は「こちら」です。