[PHP] noteのRSSをPHPで取得して表示する方法【コード解説&RSSとは?】

BLOG

[PHP] noteのRSSをPHPで取得して表示する方法【コード解説&RSSとは?】

今回はコンテンツを投稿・販売できる、メディアプラットフォーム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内で特殊な意味を持つ<>&などの文字を&lt;のようなHTMLエンティティに変換して表示するための関数です。
この変換処理をエスケープと呼びます。
&lt; はブラウザ上で<と表示されます。

$itemにどのような内容が入っているかは、var_dump($item);で確認してください。

まとめ

今回は、RSSの基本知識とともに、PHPでnoteのRSSを取得して最新記事をWebサイト上に自動表示する方法をご紹介しました。

オウンドメディアの更新性向上や、外部サービスとの情報連携にぜひ活用してみてください。

アーツビーについて
もっと知りたい方へ

What’s Artsbe
Contact

お問い合わせ

Webサイトのリニューアルや新規制作、
マーケティングについてなど、Webに関することでしたらお気軽にご相談ください。
ロゴの制作なども対応可能ですので、サービス一覧より何ができるのかご確認ください。

CONTACT