GAS

GASでYouTube APIを使って簡単に特定のチャンネル内の動画情報(タイトル、再生用リンク)を取得する方法

thumbnail
n-mukineer
えぬ
えぬ

こんにちは、えぬ(@nmukineer)です!

GASから簡単にYouTube APIが使えるので紹介します!

例として、最近お世話になっている、『ザ・きんにくTV 2nd 【The Muscle TV 2nd】』(なかやまきんに君さんのサブチャンネル)のチャンネル内の動画情報をすべて取得するスクリプトを書いてみました!

GASでYouTube APIが使えるようにする

GAS(Google Apps Script)はYouTube APIを使いやすくするためのサービスが組み込まれています(どちらも、Googleのサービスですので連携が取れていますね)。

そのため、エンドポイントのURLを気にせずにメソッドを実行するだけで使えるようになっていて非常に便利です。

GASプロジェクトの作成

まずは、GASのプロジェクトを作成しましょう。GASのプロジェクト作成方法については、以下の記事に書いてありますので参照してください。

あわせて読みたい
【無料】GASを使い始めるための3ステップ【簡単】
【無料】GASを使い始めるための3ステップ【簡単】

作成したGASプロジェクトは、GCPプロジェクトと紐づけておく必要があります

YouTube APIの有効化

YouTube APIを使用するには、GCPプロジェクトでAPIを有効化しておく必要があります。

YouTube DATA APIの有効化手順
  1. GCPプロジェクトページを開き「APIとサービス」⇒「有効なAPIとサービス」をクリックします
  2. +APIとサービスの有効化」をクリックします
  3. 検索ウィンドウに「youtube」と入力します
  4. 出てきた候補の中から「YouTube Data API v3」をクリックします
  5. 有効にする」をクリックします

以上でAPIの使用準備は完了です。GASでスクリプトを書いていく準備をしていきます。

GASにYouTubeサービスをインポートする

GASでYouTube APIスクリプトを使用するため、YouTubeサービスをインポートします。

YouTubeサービスのインポート方法
  1. スクリプト画面で「サービス」の右側にある「」をクリックします
  2. YouTube Data API v3」を選択し「追加」をクリックします

以上で下準備は完了です!

GASスクリプト

こちらが今回作成したGASスクリプトです。

YouTubeのチャンネルID取得方法については、以下の記事を参考にしてください。

あわせて読みたい
【GAS】YouTubeのチャンネルID取得方法を徹底解説
【GAS】YouTubeのチャンネルID取得方法を徹底解説
CHANNEL_ID = {
  muscleTv2nd: 'UCnHzm--hwx96P9D3Rnbe3LQ'
}

// 実行関数
function main() {
  const channelId = CHANNEL_ID.muscleTv2nd;
  const videos = getVideosAll(channelId);
  videos.forEach(video => {
    console.log(JSON.stringify(video));
  })
}

// チャンネル内のすべての動画のタイトルとリンクを取得
function getVideosAll(channelId) {
  const channel = getChannel(channelId);
  const playlistId = uploadPlaylist(channel);
  const videoIds = getVideoIdsAll(playlistId);
  const videos = videoIds.map(videoId => {
    return {
    'title': videoTitle(videoId),
    'link': watchLink(videoId)
    }
  });
  return videos;
}

// チャンネル情報を取得
function getChannel(channelId) {
  return YouTube.Channels.list([
    'contentDetails'
  ], {
    'id': channelId
  });
}

// "upload"プレイリストID
const uploadPlaylist = channel => channel.items[0].contentDetails.relatedPlaylists.uploads;

// 再生用リンク
const watchLink = videoId => `https://www.youtube.com/watch?v=${videoId}`;

// ビデオタイトル
const videoTitle = videoId => getVideo(videoId).items[0].snippet.title;

// プレイリスト内のすべてのvideoIdを取得
function getVideoIdsAll(playListId) {
  let videoIds = [];
  let nextPageToken = null;

  while(true) {
    const info = getVideoIdsOnePage(playListId, nextPageToken);
    videoIds = videoIds.concat(info.videoIds);
    if(info.nextPageToken != null) {
      nextPageToken = info.nextPageToken
    } else {
      break;
    }
  }
  return videoIds;
}

// プレイリスト内の特定のページのvideoIdをすべて取得
function getVideoIdsOnePage(id, pageToken) {
  const info = YouTube.PlaylistItems.list([
    'contentDetails'
  ], {
    'playlistId': id,
    'maxResults': 50,
    pageToken,
  });
  return {
    videoIds: info.items.map(item => item.contentDetails.videoId),
    nextPageToken: info.nextPageToken
  };
}

// Video情報を取得
function getVideo(videoId) {
  return YouTube.Videos.list([
      'snippet',
      'statistics',
    ], {
    'id': videoId
  });
}

実行結果

実行結果は実行ログで確認します。

動画タイトルとリンクが取得できた!

まとめ

今回はYouTube Data APIを使用してYouTubeの特定チャンネルのタイトルとリンクを取得してみました。

今回は基本的な内容だけでしたが、タイトルやリンク以外にも様々な情報を取得することができそうなので、応用すればいろいろなことに使えそうですね。

お読みいただきありがとうございました!

このブログを書いている人
えぬ
えぬ
N日後にムキムキになるエンジニア
WebアプリエンジニアとしてIoTシステムを開発中。30代折り返し。 趣味(モノづくり、プログラミング、筋トレ)や子育てのことを主に記事にします。 TOEIC: 900点/第一級陸上無線技術士/第3種電気主任技術者/技術士一次試験合格/基本情報技術者/第2種電気工事士/デジタル技術検定2級(情報・制御)
記事URLをコピーしました