star back image
people4
電飾 電飾
moon
men
YoutubeのRSSフィードで最新の動画だけ表示

YoutubeのRSSフィードを使ってお気に入りの最新の動画だけ見たい

BLOG WEBログ
読了約:18分

サイガモはYoutubeが大好きなようです。
テレビはほとんど見なくなりました。

でもYoutubeってオススメとか、目移りしてしまってついつい見てしまいます。
本当に時間泥棒じゃないですか?
「切り抜き系・まとめ系」チャンネルが入り乱れて、目が霞んでしまい同じ内容を何度も見てしまったりして疲れ気味です。

何回くらい広告を見たかわかりません(。´-д-)

暇なんですか。いい身分ですね。

いいなと思った宇宙な感じの面白いYoutubeチャンネルだけがまとまっていて、それも最新の内容だったら、最高じゃないですかね?と考えました。

「登録チャンネル」で見ればいいだけでは?

「登録チャンネル」は私には情報過多なんです。
「今日はそれを見てもう寝よう」的な感じがいい。

そういうのを自分のブログに表示させてみたいなと思いました。

Youtubeの自分の「登録チャンネル」の情報をマルっとRSSフィードで取得して、自分専用にお気に入り一覧を表示させたい。そう考える人は検索すると結構いらっしゃるようです。
しかし今はできなくなってしまったみたいで、昔はできていたかもです。

Youtube APIキーの取得しよう

今回はGoogle APIを使ってYouTubeチャンネルのRSSを取得します。
Googleアカウントを取得している必要があります。

方法は検索するといっぱいあるのでググってください。
以下の@shinkaiさんの記事を参考にいたしました。ありがとうございます。

参考:Qiita@shinkai_(新海 正明)さん
【Youtube】APIキーの取得手順(2021/04/08時点のキャプチャ)
https://qiita.com/shinkai_/items/10a400c25de270cb02e4

こういう情報ってスグに仕様が変わってしまいます。
記事のアップデート更新も面倒。

google cloudで、APIキーを作成したときのスクリーンショット
APIキーを作成したときのスクリーンショット

チャンネルIDを取得しよう

表示させたい登録チャンネルの「チャンネルID」を得るための方法。
以下のilrさんの記事を参考にいたしました。ありがとうございます。

参考:ilr(アイ・エル・アール)
【公式】他人のYouTubeのチャンネルIDを調べる
https://ilr.jp/tech/1934/

Youtubeのチャンネルへ行って>をクリック
Youtubeのチャンネルへ行って>をクリック
チャンネルを共有ボタンをクリック
共有ボタンをクリック
チャンネルのIDをコピーでゲットです
チャンネルのIDをコピーでゲットです

簡単ですね。

自分のチャンネルを出してみよう

試しに自分のチャンネルの動画の「サムネイル画像」と「タイトルテキスト」のみが読み込まれるだけのシンプルなphpを作成です。

表示させたいところにコピペしてご利用ください。
ソースには上で取得した「APIキー」や「チャンネルID」を仕込んでください。

・以下の部分です。
3行目:’YOUR_YOUTUBE_API_KEY’
6行目:’YOUR_CHANNEL_ID’

$api_key = ‘〜〜〜〜〜〜〜〜’; ← ”点々ありです。

<?php
// YouTube Data APIキー
$api_key = 'YOUR_YOUTUBE_API_KEY';

// チャンネルID
$channel_id = 'YOUR_CHANNEL_ID';

// YouTube Data APIのエンドポイント
$api_endpoint = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={$channel_id}&maxResults=1&order=date&type=video&key={$api_key}";

// APIリクエストを実行してJSONデータを取得
$api_response = file_get_contents($api_endpoint);
$videos = json_decode($api_response)->items;

// 最新の動画が存在するかチェック
if (count($videos) > 0) {
    $latest_video = $videos[0];
    $video_id = $latest_video->id->videoId;
    $video_title = $latest_video->snippet->title;
    $thumbnail_url = $latest_video->snippet->thumbnails->medium->url;

    // サムネイルとタイトルを表示
    echo '<img src="' . $thumbnail_url . '" alt="' . $video_title . '">';
    echo '<p>' . $video_title . '</p>';
} else {
    echo '最新の動画が見つかりませんでした。';
}
?>

私のチャンネルは3件しか動画がありません。
そのうちの1件の「サムネイル画像とタイトルテキスト」が表示されました。
お試しください。

いけると確信です!
しかし私のチャンネル動画はアレです。
面白くありませんし宇宙の話もないです。

3チャンネル分で出してみよう

お気に入りな「登録チャンネル」はとても多いです。その中でも本当のお気に入りのベスト3チャンネルをリストで表示したい。要件は以下です。

  • お気に入りのベスト3チャンネル
  • リストでそれぞれ9件の最新動画
  • 表示はiframeではなくサムネイル画像&タイトルテキスト
  • このブログで再生させず_blankリンクでYoutubeに飛ばす

以下のようになりました。openaiにも協力してもらいました!

<?php
// APIキーとYouTubeチャンネルIDを設定
$api_key = 'YOUR_YOUTUBE_API_KEY';
$channels = ['CHANNEL_ID_1', 'CHANNEL_ID_2', 'CHANNEL_ID_3']; // 表示したい複数のチャンネルIDを指定

foreach ($channels as $channel_id) {
    // チャンネルの情報を取得
    $channel_url = "https://www.googleapis.com/youtube/v3/channels?part=snippet&id={$channel_id}&key={$api_key}";
    $channel_json = file_get_contents($channel_url);
    $channel_data = json_decode($channel_json, true);

    // チャンネルのタイトルを表示
    $channel_title = $channel_data['items'][0]['snippet']['title'];
    echo "<h2>{$channel_title}</h2>";

    // チャンネルの最新動画一覧を取得
    $playlist_url = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id={$channel_id}&key={$api_key}";
    $playlist_json = file_get_contents($playlist_url);
    $playlist_data = json_decode($playlist_json, true);

    // チャンネルの投稿動画のプレイリストIDを取得
    $playlist_id = $playlist_data['items'][0]['contentDetails']['relatedPlaylists']['uploads'];

    // プレイリストから動画情報を取得
    $videos_url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId={$playlist_id}&maxResults=9&key={$api_key}";
    $videos_json = file_get_contents($videos_url);
    $videos_data = json_decode($videos_json, true);

    // 取得した動画情報を表示
    echo "<ul>";
    foreach ($videos_data['items'] as $video) {
        $title = $video['snippet']['title'];
        $video_id = $video['snippet']['resourceId']['videoId'];
        $thumbnail_url = $video['snippet']['thumbnails']['medium']['url'];
        $video_url = "https://www.youtube.com/watch?v={$video_id}";
        echo "<li><a href=\"{$video_url}\" target=\"_blank\">{$title}<img src=\"{$thumbnail_url}\" alt=\"{$title}\">'</a></li>";
    }
    echo "</ul>";
}
?>

3チャンネル分が以下のように出ます。

  • 「チャンネルのタイトル」
  • 動画情報が9件をずら〜と。
  • 「チャンネルのタイトル」
  • 動画情報が9件をずら〜と。
  • 「チャンネルのタイトル」
  • 動画情報が9件をずら〜と。

って感じです。

なぜ3チャンネル分か、危険妄想センサーが発動したからです。
最初は無料でやらしてくれるんです、でもあまりに多く遊んでると利用料金を請求されるかもしれないと勘ぐりました。
わからないですけど。

ランダムな表示にしたくなった

ランダムに並び替えをしたくなりました。理由は同じサムネイルが並ぶと楽しくないからです。あとは9件づつは量が多すぎました。スクロールが大変です。要件は以下。

  • お気に入りのベスト3チャンネル
  • リストでそれぞれ3件の最新動画
  • 表示はiframeではなくサムネイル画像&タイトルテキスト
  • このブログで再生させず_blankリンクでYoutubeに飛ばす
  • 読み込んだ後にランダムに並び替えをしたい

「チャンネルのタイトル(チャンネル名)」もいらないなと削除しました。

<?php
// APIキーとYouTubeチャンネルIDを設定
$api_key = 'YOUR_YOUTUBE_API_KEY';
$channels = ['CHANNEL_ID_1', 'CHANNEL_ID_2', 'CHANNEL_ID_3']; // 表示したい複数のチャンネルIDを指定

$videos = [];

foreach ($channels as $channel_id) {
    // チャンネルの最新動画一覧を取得
    $playlist_url = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id={$channel_id}&key={$api_key}";
    $playlist_json = file_get_contents($playlist_url);
    $playlist_data = json_decode($playlist_json, true);

    // チャンネルの投稿動画のプレイリストIDを取得
    $playlist_id = $playlist_data['items'][0]['contentDetails']['relatedPlaylists']['uploads'];

    // プレイリストから動画情報を取得
    $videos_url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId={$playlist_id}&maxResults=3&key={$api_key}";
    $videos_json = file_get_contents($videos_url);
    $videos_data = json_decode($videos_json, true);

    // 取得した動画情報を配列に追加
    foreach ($videos_data['items'] as $video) {
        $title = $video['snippet']['title'];
        $video_id = $video['snippet']['resourceId']['videoId'];
        $thumbnail_url = $video['snippet']['thumbnails']['medium']['url'];
        $video_url = "https://www.youtube.com/watch?v={$video_id}";
        $videos[] = ['title' => $title, 'url' => $video_url, 'thumbnail' => $thumbnail_url];
    }
}

// 動画をランダムにシャッフル
shuffle($videos);

// シャッフルされた動画を表示
echo "<ul>";
foreach ($videos as $video) {
    echo "<li><a href=\"{$video['url']}\" target=\"_blank\">{$video['title']}<img src=\"{$video['thumbnail']}\" alt=\"{$video['title']}\"></a></li>";
}
echo "</ul>";
?>

このアウトロウェーブBlogのトップページに設置しました。

表示例のスクリーンショット
あれ?なんか楽しげに見えませんか。

満足です。

Youtuberさん達の動画パワーで
なんとなく雰囲気を賑やかにしたかった。
それが本音ですね。

参考サイト置き場

参考にさせていただきました。ありがとうざいます。

参考:ilr(アイ・エル・アール)
【公式】他人のYouTubeのチャンネルIDを調べる
https://ilr.jp/tech/1934/

参考:Qiita@shinkai_(新海 正明)さん
【Youtube】APIキーの取得手順(2021/04/08時点のキャプチャ)
https://qiita.com/shinkai_/items/10a400c25de270cb02e4