![[PHP] noteのRSSをPHPで取得して表示する方法【コード解説&RSSとは?】](https://images.microcms-assets.io/assets/abf038dca2a24f0eb671544430f30ca4/b67018c31f05448f9b8fa2b0243feeb5/get-note-rss.webp)
今回はコンテンツを投稿・販売できる、メディアプラットフォームnoteの投稿をRSSを使用して取得、表示する方法についてまとめました。
RSSとは?
まず先にRSSについて説明しておきます。
RSS(Really Simple Syndication / RDF Site Summary) とは、Webサイトの更新情報を配信するためのXML形式のファイルです。
RSSを使うことで、
- Webサイトの最新記事情報を自動取得できる
- ユーザーはRSSリーダーで購読できる
- 他サイトに最新情報を埋め込むAPIのように活用できる
といったメリットがあります。
noteでも各ユーザーページにRSSフィードURLが用意されており、WordPressブログやオウンドメディアに簡単に最新記事を表示可能です。
実装コード
次に下記が実装コードになります。
<?php
// noteのRSSフィードURLを設定
$noteRssUrl = "https://note.com/ユーザー名/rss"; // 実際のnote RSS URLに置き換えてください
// RSSフィードを取得
$feedData = file_get_contents($noteRssUrl);
// フィードが取得できたか確認
if ($feedData !== false) :
// SimpleXMLElementを使ってXMLを解析
$rss = new SimpleXMLElement($feedData);
// 表示する最大件数を設定
$maxItems = 4;
$itemCount = 0;
?>
<ul>
<?php
// RSS内の各item要素をループ
foreach ($rss->channel->item as $item) :
// 最大件数に達したらループ終了
if ($itemCount >= $maxItems) break;
// 記事タイトル
$title = (string)$item->title;
// 記事URL
$link = (string)$item->link;
// 公開日時
$pubDate = (string)$item->pubDate;
$date = new DateTimeImmutable($pubDate);
// サムネイル画像URL
// noteのRSSでmedia:thumbnailがある場合のみ取得
$thumbnail = (string)$item->children('media', true)->thumbnail;
?>
<li>
<!-- サムネイル画像表示 -->
<?php if (empty($thumbnail)) : ?>
<img src="パス/no-image.jpg" alt="<?php echo htmlspecialchars($title); ?>">
<?php else: ?>
<img src="<?php echo htmlspecialchars($thumbnail); ?>" alt="<?php echo htmlspecialchars($title); ?>">
<?php endif; ?>
<!-- 公開日 -->
<time datetime="<?php echo $date->format('Y-m-d'); ?>">
<?php echo $date->format('Y.m.d'); ?>
</time>
<!-- 記事タイトル -->
<h3><?php echo htmlspecialchars($title); ?></h3>
<!-- 記事リンク -->
<a href="<?php echo htmlspecialchars($link); ?>" target="_blank" rel="noopener noreferrer">
記事を見る
</a>
</li>
<?php
$itemCount++;
endforeach;
?>
</ul>
<?php
// RSS取得失敗時の処理(例: エラーメッセージ表示)
else :
echo "<p>RSSフィードを取得できませんでした。</p>";
endif;
?>
コード解説
指定URLからRSSデータを取得
$noteRssUrl
にRSSのURLを格納し、file_get_contents($noteRssUrl)
でRSSデータを取得します。
$noteRssUrl = "https://note.com/ユーザー名/rss";
$feedData = file_get_contents($noteRssUrl);
SimpleXMLElementを使ってXMLを解析
new SimpleXMLElement($feedData)
で先ほど取得したRSSのデータを解析します。
$rss = new SimpleXMLElement($feedData);
表示件数の設定
$maxItems
で表示件数を設定しています。$itemCount
は次に記載するforeachで使用しており、設定した表示件数以上表示されないようにするための変数です。
ループするごとに1ずつ増えていき、$itemCount
が4になるとループから抜け出すようにしています。
$maxItems = 4;
$itemCount = 0;
ループで内容を出力
foreach
でループ処理をし、内容を表示させます。
<?php
// RSS内の各item要素をループ
foreach ($rss->channel->item as $item) :
// 最大件数に達したらループ終了
if ($itemCount >= $maxItems) break;
// 記事タイトル
$title = (string)$item->title;
// 記事URL
$link = (string)$item->link;
// 公開日時
$pubDate = (string)$item->pubDate;
$date = new DateTimeImmutable($pubDate);
// サムネイル画像URL
// noteのRSSでmedia:thumbnailがある場合のみ取得
$thumbnail = (string)$item->children('media', true)->thumbnail;
?>
<li>
<!-- サムネイル画像表示 -->
<?php if (empty($thumbnail)) : ?>
<img src="パス/no-image.jpg" alt="<?php echo htmlspecialchars($title); ?>">
<?php else: ?>
<img src="<?php echo htmlspecialchars($thumbnail); ?>" alt="<?php echo htmlspecialchars($title); ?>">
<?php endif; ?>
<!-- 公開日 -->
<time datetime="<?php echo $date->format('Y-m-d'); ?>">
<?php echo $date->format('Y.m.d'); ?>
</time>
<!-- 記事タイトル -->
<h3><?php echo htmlspecialchars($title); ?></h3>
<!-- 記事リンク -->
<a href="<?php echo htmlspecialchars($link); ?>" target="_blank" rel="noopener noreferrer">
記事を見る
</a>
</li>
<?php
$itemCount++;
endforeach;
?>
先ほど記載したように、$itemCount
が4になるとループから抜け出すようにしています。
また、タイトルなどを出力するときは、XSS(クロスサイトスクリプティング)対策としてhtmlspecialchars()
を使用し出力時にエスケープしています。
htmlspecialchars()とはHTML内で特殊な意味を持つ<
や>
、&
などの文字を<
のようなHTMLエンティティに変換して表示するための関数です。
この変換処理をエスケープと呼びます。
※<
はブラウザ上で<
と表示されます。
$item
にどのような内容が入っているかは、var_dump($item);
で確認してください。
まとめ
今回は、RSSの基本知識とともに、PHPでnoteのRSSを取得して最新記事をWebサイト上に自動表示する方法をご紹介しました。
オウンドメディアの更新性向上や、外部サービスとの情報連携にぜひ活用してみてください。