[php]simplexml_load_file関数を使用して外部サイトのRSSを読み込み画像付きで表示

  • スポンサーリンク

  • スポンサーリンク

この記事は公開から9年、最終更新日からも6年経過しています。内容が古くなっている可能性があります。

RSS読み込み例

simplexml_load_file関数を使用して外部サイトのRSSを読み込み画像付きで表示

概要

外部サイトのRSSを読み込んで画像付きで表示します。
今回は、phpのimplexml_load_file関数を使用しました。

※以前、こちらの記事でGoogle Feed APIを使って同様なことを実現しております。
[Google Feed API]サイトのRSSフィードを取得し画像付きで記事の内容を表示する

前提条件

・画像は、コンテンツ内にある最初のimgタグで記載された箇所の画像を読み込みます。

phpソース

<?php
$rss = simplexml_load_file('https://www.nakamurayuji.com/feed', 'SimpleXMLElement', LIBXML_NOCDATA);
$count = 0;
foreach($rss->channel->item as $item){
	$count++;
	if ($count > 10) {break;}	//10記事まで表示
	$title = $item->title;
    $date = date("Y年 n月 j日", strtotime($item->pubDate));
    $link = $item->link;
    $description = mb_strimwidth (strip_tags($item->description), 0 , 110, "…Read More", "utf-8");
    preg_match('/<img.*>/i',$item->children('content', true)->encoded, $matches);
?>

<div class="rssreadmain">
<div class="imagebox">
<a href="<?php echo $link; ?>" target="_blank">
      <?php if ( $matches[0] ): // サムネイルを持っているときの処理 ?>
		<img <?php echo $matches[0]; ?> >
      <?php else: // サムネイルを持っていないときの処理 ?>
      <img src="<?php echo get_template_directory_uri(); ?>/images/no-img.png" alt="no image" title="no image" width="100" height="100" />
      <?php endif; ?>
</a>
</div> <!-- imagebox -->

<p class="boxtitle">
	<a href="<?php echo $link; ?>" target="_blank">
	<?php echo $title; ?></a> <!-- the_title(); -->
</p>

<p class="boxcontent">
	<a href="<?php echo $link; ?>" target="_blank">
	<?php echo $description; ?></a>
</p>
</div> <!-- rssreadmain -->
<?php } ?>

コード説明

$rss = simplexml_load_file('https://www.nakamurayuji.com/feed', 'SimpleXMLElement', LIBXML_NOCDATA);

・RSSアドレスを指定し、変数;$rssにRSSを読み込みます。

CDATAセクションの取得
これは、simplexml_load_file関数の第三引数にLIBXML_NOCDATAを指定する事でテキストとして取得できる様になります。

とあるように、第三引数にLIBXML_NOCDATAを指定します。

$count = 0;
foreach($rss->channel->item as $item){
	$count++;
	if ($count > 10) {break;}	//10記事まで表示
	$title = $item->title;
    $date = date("Y年 n月 j日", strtotime($item->pubDate));
    $link = $item->link;
    $description = mb_strimwidth (strip_tags($item->description), 0 , 110, "…Read More", "utf-8");
    preg_match('/<img.*>/i',$item->children('content', true)->encoded, $matches);
}

・RSSを記事ごとに分割し、ループさせます。今回は10記事表示させます。
・各記事の、タイトル、投稿日付、リンクURL、記事の中味、及び、画像URLを取得します。
・記事の中味は110文字のみ抽出し、最後に、”…Read More”を付与します。
・画像URLはタグで記述されたURLを配列matchesに格納します。※画像が複数あれば複数格納されます。※RSSのdescription要素は概要でありimgタグがないため、content:encoded要素で取得します。
・この箇所で読み込み完了です。

<a href="<?php echo $link; ?>" target="_blank">
      <?php if ( $matches[0] ): // サムネイルを持っているときの処理 ?>
		<img <?php echo $matches[0]; ?> >
      <?php else: // サムネイルを持っていないときの処理 ?>
      <img src="<?php echo get_template_directory_uri(); ?>/images/no-img.png" alt="no image" title="no image" width="100" height="100" />
      <?php endif; ?>
</a>

・画像を記事のリンクURL付きで出力します。
・$matches[0]は画像のうち最初の画像のリンクURLです。
・画像が見つからなかった時は代替画像を表示します。※本ソースはWordPress内で使用しているため、適宜読み替えて下さい。

	<a href="<?php echo $link; ?>" target="_blank">
	<?php echo $title; ?></a> <!-- the_title(); -->
	<a href="<?php echo $link; ?>" target="_blank">
	<?php echo $description; ?></a>

・タイトル、記事の中味をそれぞれリンク付きで出力します。

適用サイト

sample2に本サイトの最新10記事を読み込んだ例を表示しています。
■表示例です。
RSS読み込み例

参考サイト(本当に有難うございます!)

PHP: simplexml_load_file – Manual
PHP: preg_match – Manual

最後に

・RSSの読み込みが自由に使えるようになったらアンテナサイトやポータルサイト等、色々応用できそうです。

/////

  • スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA