Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

Youtubeライブ配信リストをつくる【Googleサイト編】

目次

Youtubeライブ配信を一覧で見ることができるサイトをつくる

どうも、高島です。

Youtubeでゲーム実況など生配信していることはみなさんご存知だと思います。 最近はスポーツの生中継も意外にあります。

例えば、日本アマチュアサッカー界の最高峰JFLオートバイレースのロードやモトクロス、ボクシングなど、楽しめるコンテンツが配信されています。

無料で見ることができるので、嬉しいですね。

ライブ配信だけを集めて、画面上で選べるものがほしいと思いまして、Googleのウェブサイト作成サービスでお手軽に作ってみました。

youtubeからデータを受け取るには?

youtube APIというものがあります。 このapiで検索条件を指定すれば、希望の動画一覧を取得できます。 このAPIPHPPythonRuby などで使えますが、URLにパラメータ指定でも使うことができます。 URLで使うのがお手軽ですので、今回はこの方法を使います。

youtube APIを利用できるようにする

APIを使うには、APIの利用申請し、API キーを発行する必要があります。 このあたりはたくさんのブログで紹介されているので、「youtube apiキー」でgoogle検索して参照してください。 UIもコロコロ変わっているようですので、できるだけ最新の記事を見つけてください。

youtube APIで動画検索する方法

公式ページで使い方を確認してみましょう。 developers.google.com

https://www.googleapis.com/youtube/v3/search にgetパラメータを付けることで動画情報を取得できます。

必要なパラメータは、

  • 取得情報(idかsnippetか。今回は詳細情報は要らないのでid)

  • 取得件数(とりあえず20件)

  • 並び順(とりあえず日付が新しいものから)

  • タイプ(videoかchannelかplaylistか。今回はvideo)

  • 先程発行したAPIキー

  • 検索したいYouTubeチャンネルのチャンネルID(とりあえずサッカーJFLチャンネル)

  • イベントタイプ(今現在配信中は、live。配信前はupcoming、配信を終えたものはcompletedです)

JFL日本フットボールリーグ)の現在生配信中の動画を取得するには、このようになります。

https://www.googleapis.com/youtube/v3/search?part=id&maxResults=20&order=date&type=video&key={発行したAPIキー}&channelId=UCIqR8JZTxJScZg3H4l_Rfhg&eventType=live

結果はjsonで返って来ます。 画面表示で必要なのは"videoId"です。

[
    {
        "kind": "youtube#searchResult",
        "etag": "YSgQNp77JrlZMRUzY9My3C95I58",
        "id": {
            "kind": "youtube#video",
            "videoId": "v_6INYqSU6g"
        }
    },
    {
        "kind": "youtube#searchResult",
        "etag": "HOFJ_q3JZPlMSXZgKynZUggBD0U",
        "id": {
            "kind": "youtube#video",
            "videoId": "fNECO8zkvvo"
        }
    },
    {
        "kind": "youtube#searchResult",
        "etag": "I_f_N-fpVLfqIysKxkJZSuFdwNA",
        "id": {
            "kind": "youtube#video",
            "videoId": "o-IuYxLwrSk"
        }
    }
]

動画をHTMLページに貼り付ける。

動画をブラウザに表示するには?

これは簡単です。 iframeのsrcに指定するだけです。

<iframe src="https://www.youtube.com/embed/{動画ID} frameborder="1" sandbox="allow-scripts allow-popups allow-forms allow-same-origin allow-popups-to-escape-sandbox allow-downloads allow-modals" allowfullscreen></iframe>

実際のソース

live、upcoming、completedの順で取得するサンプルです。 idが"youtubeList"のdivタグに動画iframeを追加していきます。

<!-- jQueryによるスクリプト -->
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function() {
    const base_youtube_url = 'https://www.googleapis.com/youtube/v3/search?part=id&maxResults=20&order=date&type=video&key=AIzaSyDHHcO1rMsZJXcc5t-oJwlGGHBeNs3nf7U';

    const promiseFunc = (value,value2) => {
      return new Promise((resolve, reject) => {
        console.log(value + value2);
        $.ajax({
          type: 'GET',
          url: value + value2,
          datatype: 'json',
          success: function(json){
            resolve(json.items);
          },
          error: function(){
            reject();
          }
        });
      });
    };

    // 非同期関数
    async function asyncFunc() {
      // 並行して処理が実行され、全ての処理が終わるまで待機
      const values = await Promise.all([
        promiseFunc(base_youtube_url,'&channelId=UCIqR8JZTxJScZg3H4l_Rfhg&eventType=live'),
        promiseFunc(base_youtube_url,'&channelId=UCIqR8JZTxJScZg3H4l_Rfhg&eventType=upcoming'),
        promiseFunc(base_youtube_url,'&channelId=UCIqR8JZTxJScZg3H4l_Rfhg&eventType=completed')
      ]);

      const jsonitem = values.flat();
      console.log(jsonitem);

      num = jsonitem.length;
      for(var i = 0; i < num ; i++){
        var ID = jsonitem[i].id.videoId;
        $("#youtubeList").append('<iframe src="https://www.youtube.com/embed/' + ID + '" frameborder="1" sandbox="allow-scripts allow-popups allow-forms allow-same-origin allow-popups-to-escape-sandbox allow-downloads allow-modals" allowfullscreen></iframe>');
      }
    }

    asyncFunc();
});

</script>
<div id="youtubeList"></div>

Googleサイトで作ってみる

Googleサイト作成ページにアクセスしてみましょう。 sites.google.com

新しいサイトの作成から「空白」を選びます

作成ページに飛ぶので、プロジェクト名やページタイトルを入力しましょう。

画面右側の「埋め込む」を選びます。

「埋め込みコード」の部分に先程のjavaScriptを書き込みましょう。

埋め込みプレビューが表示されるので、youtube動画の一覧が表示されているのを確認して「挿入」を押します。

埋め込みの領域の縦横を調整しましょう。

画面右上のディスプレイマーク(赤印)のところをクリックするとプレビューで確認できます。 人マーク(黄色)でリンクURLを取得できます。リンクURLで自分のスマホから見ることができます。

スマホではこのようなレイアウトです。

このように試合中継を見ることができます。

あとがき

ライブ配信一覧を表示するサイトはいかがだったでしょうか。

サイトはドラッグ&ドロップとコード貼り付けだけで簡単に作ることができました。

ただし、実はこの方法は弱点があり、ページを表示するたびにYouTubeAPIの検索が走るので、クォータという検索回数制限みたいなものに引っかかってしまいます。

そのため、実際はlive、upcoming、completedを全て取得するのではなく、liveのみで件数を少なくするほうが良いでしょう。

それでも他人に公開してしまうと、あっという間に制限を超えてしまうことになります。

次回は、googleスプレッドシートに定期的にライブ配信リストを書き込み、それを元に表示するサイトを作ってみたいと思います。