GASでYouTube APIを使って簡単に特定のチャンネル内の動画情報(タイトル、再生用リンク)を取得する方法
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ステップ【簡単】
YouTube APIの有効化
YouTube APIを使用するには、GCPプロジェクトでAPIを有効化しておく必要があります。
- GCPプロジェクトページを開き「APIとサービス」⇒「有効なAPIとサービス」をクリックします
- 「+APIとサービスの有効化」をクリックします
- 検索ウィンドウに「youtube」と入力します
- 出てきた候補の中から「YouTube Data API v3」をクリックします
- 「有効にする」をクリックします
以上でAPIの使用準備は完了です。GASでスクリプトを書いていく準備をしていきます。
GASにYouTubeサービスをインポートする
GASでYouTube APIスクリプトを使用するため、YouTubeサービスをインポートします。
- スクリプト画面で「サービス」の右側にある「+」をクリックします
- 「YouTube Data API v3」を選択し「追加」をクリックします
以上で下準備は完了です!
GASスクリプト
こちらが今回作成した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の特定チャンネルのタイトルとリンクを取得してみました。
今回は基本的な内容だけでしたが、タイトルやリンク以外にも様々な情報を取得することができそうなので、応用すればいろいろなことに使えそうですね。
お読みいただきありがとうございました!
このブログを書いている人