YouTubeチャンネルのRSS

今回はPHPを使ってYoutubeからRSS情報を取得して、iframeの埋め込み形式で出力する方法を紹介します。

通常は埋め込みたいYouTube動画を選択して、ツールメニューの「共有」から「動画の埋め込み」のコードをコピーペーストで貼り付けますよね。

この作業を自動で行い、最新のYouTube動画をWebページに貼り付けよう!
…という魂胆です。

まずは実際の挙動をご確認ください。

サンプル:https://on-ze.com/demo/php-rss-youtube/

サンプルでは最近よく見るユーチューバーの「佐賀よかでしょう。」様のチャンネルを紹介しています。
毎日更新されているのでサンプルとして使うのにも最適です。

YouTubeチャンネルのRSSフィードのURL

最初にYouTubeチャンネルのRSSを取得する必要があります。
YouTubeにはRSSのアイコンなどがないのでURLの確認が難しいのですが、下記のようにユーザー名やチャンネルIDを指定してRSSフィードを取得できます。

#チャンネルIDを指定してRSSを取得
https://www.youtube.com/feeds/videos.xml?channel_id=チャンネルID

#ユーザー名を指定してRSSを取得
https://www.youtube.com/feeds/videos.xml?user=ユーザ名

チャンネルIDまたはユーザー名はURLから判別することができます。
たとえばサンプルで紹介した「佐賀よかでしょう。」様の場合、チャンネルのURLは次のようになっています。

https://www.youtube.com/channel/UCD7-Ocp4InwPKzwiq_U-Abg
このURLの「channel」の後ろの部分がチャンネルIDになります。

つまり。
https://www.youtube.com/feeds/videos.xml?channel_id=UCD7-Ocp4InwPKzwiq_U-Abg
にアクセスするとRSSフィードを取得できるワケです。

参考コード

RSSフィードが取得できたら、あとはPHPを駆使してiframe埋め込み形式で出力します。

<?php
$url = "https://www.youtube.com/feeds/videos.xml?channel_id=XXXXX";
// または
// $url = "https://www.youtube.com/feeds/videos.xml?user=XXXXX";
$rss = file_get_contents($url);
$rss = preg_replace("/<([^>]+?):(.+?)>/", "<$1_$2>", $rss);
$rss = simplexml_load_string($rss,'SimpleXMLElement');
echo '<ul>';
foreach($rss->entry as $value) {
	echo '<li>';
	echo '<div class="youtube-box"><iframe src="https://www.youtube.com/embed/' . htmlspecialchars($value->yt_videoId) . '" frameborder="0"></iframe></div>';
	echo '<p><a href="https://www.youtube.com/watch?v=' . htmlspecialchars($value->yt_videoId) . '" target="_blank">' . htmlspecialchars($value->title) . '</a></p>';
	echo '</li>';
}
echo '</ul>';
?>
  1. 変数 $url にRSSフィードURLを格納
  2. file_get_contents() で文字列に変換して読み込む
  3. preg_replace() で文字列を置換
  4. simplexml_load_string() で文字列をオブジェクトに代入
  5. 配列に変換して動画情報を変数に格納
  6. foreachでループを回し、iframeタグなどに動画ID、動画タイトルを出力

といった流れになっています。

サンプル:https://on-ze.com/demo/php-rss-youtube/