【PHP】 楽天ブログの新着ブログ情報をRSSで取得して表示する

たまご

PHPにて楽天ブログの情報をRSSで取得して表示した時のメモ

まず取得対象のブログURLから、RSSのURLを見つける

楽天ブログのRSSのURLの作り方
  1. URLの「plaza」の前に「api.」を追加
  2. co.jp」を「ne.jp」に変更
  3. URLの最後に「/rss」を追加

例えばRakutenブックスのブログの場合

  • ブログのURL https://plaza.rakuten.co.jp/infobooks
  • RSSのURL https://api.plaza.rakuten.ne.jp/infobooks/rss

になる。アクセスしてみるとXMLがズラ〜っと表示されるはず

https://api.plaza.rakuten.ne.jp/infobooks/rss

RSSのURLを使用してPHPで取得 & 表示処理を実装

<?php
date_default_timezone_set('Asia/Tokyo');

// RSSのURL
$url = "https://api.plaza.rakuten.ne.jp/infobooks/rss";
// RSSの内容を読み込む (https://php.net/manual/en/function.simplexml-load-file.php)
$rss = simplexml_load_file($url);
// 表示する件数
$max = 5;
// 表示数カウント
$i = 0;

// 読み込み成功した場合
if ($rss) {
  // foreachで1つずつ取り出して表示
  foreach ($rss->item as $item) {
    if ($max <= $i) {
      // 表示する件数を超えた場合は終了
      break;
    }
    // 日付
    $date = date('Y年m月d日', strtotime($item->children("http://purl.org/dc/elements/1.1/")->date));
    // ブログ詳細URL
    $link = $item->link;
    // ブログタイトル
    $title = $item->title;
    // 表示数カウント更新
    $i++;
?>
  <ul>
    <li>
      <a href="<?php echo $link ?>" target="_blank" rel="noopener noreferrer">
        <?php echo $date ?> <br>
        <?php echo $title ?>
      </a>
    </li>
  </ul>
<?php
  }
}

ポイント
  1. simplexml_load_fileメソッドを使用してXMLをオブジェクト型式で読み込む
    (https://www.php.net/manual/ja/function.simplexml-load-file.php)
  2. foreach ($rss->item as $item)でブログ情報を1つずつ取り出す
  3. 各情報を表示する

取得できる情報

  • $rss->title : ブログホームタイトル
  • $rss->link: ブログホームURL
  • $rss->description : ブログホーム説明
  • $rss->item : ブログ一覧 (配列)
  • $rss->item[0]->title : ブログ記事タイトル
  • $rss->item[0]->link : ブログ記事リンク
  • $rss->item[0]->description : ブログ記事詳細
  • 日付に関しては楽天がRSS1.0なので下記コードで取得する
date('Y年m月d日', strtotime($item->children("http://purl.org/dc/elements/1.1/")->date))

htmlファイルなどで使用する場合

PHPではなくhtmlのページで表示したい場合、PHPファイルを作成してJavaScriptで読み込む

手順
  1. RSS読み込み用のPHPファイルを作成 (rss.phpとする)
  2. htmlファイルにrss.phpを呼び出す非同期処理Javascriptで実装する
  • rss.php
<?php
date_default_timezone_set('Asia/Tokyo');

// RSSのURL
$url = "https://api.plaza.rakuten.ne.jp/infobooks/rss";
// RSSの内容を読み込む (https://php.net/manual/en/function.simplexml-load-file.php)
$rss = simplexml_load_file($url);
// 取得する件数
$max = 5;
$i = 0;
// JSに返すレスポンス
$response = '';

// 読み込み成功した場合
if ($rss) {
  // foreachで1つずつ取り出して表示
  foreach ($rss->item as $item) {
    if ($max <= $i) {
      // 取得件数を超えた場合は表示終了
      break;
    }
    // 日付
    $date = date('Y年m月d日', strtotime($item->children("http://purl.org/dc/elements/1.1/")->date));
    // ブログ詳細URL
    $link = $item->link;
    // ブログタイトル
    $title = $item->title;
    // indexを更新
    $i++;
    $response .= "<li>";
    $response .= "<a href='{$link}' target='_blank' rel='noopener noreferrer'>";
    $response .= "{$date} <br> {$title}";
    $response .= '</li>';
  }
}

// 生成したHTMLパーツを返す
echo $response;
  • index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
</head>
<body>
<section class="blogs">
  <ul><!-- ⭐️ ここに動的生成されます --></ul>
</section>
</body>
<!-- jQueryを使用 -->
<script
    src="https://code.jquery.com/jquery-3.5.1.js"
    integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
    crossorigin="anonymous"></script>
<script type="text/javascript">
    $(function(){
        // ⭐️ ここで取得 & 反映する
        $.get('rss.php',function(data){
            $('.blogs ul').html(data)
        })
    })
</script>