Edited at

YouTube DATA APIを利用し、再生リスト内の動画のタグ情報を取得する。

More than 1 year has passed since last update.

YouTube DATA APIを利用すると、YouTube上の様々な情報を操作できます。

https://developers.google.com/youtube/v3/docs/

少しニッチな使い方ですが、再生リスト内の動画のタグ情報を取得しようとしたときのメモです。


動画からタグ情報を取得する。

まずは、通常の動画のタグ情報の取得方法。

YouTube DATA APIのVideosを利用することで、動画に登録されているタグ情報を取得することができます。

https://developers.google.com/youtube/v3/docs/videos/list


JavaScript

$.ajax({

url: 'https://www.googleapis.com/youtube/v3/videos', // YouTube DATA API: videos
dataType: 'json',
data: {
part: 'snippet',
id: '8OROgK7r7MU', // タグを取得したいYouTubeのvideoId
maxResults: 50,
key: 'xxx' // APIキー
}
})
.done(function(vidoeRes) {
console.log(vidoeRes.items[0].snippet.tags); // タグを取得
});

videoIdは、動画URLのv=8OROgK7r7MU部分です。

https://www.youtube.com/watch?v=8OROgK7r7MU

また、APIキーは、事前に取得しておきましょう。

https://developers.google.com/youtube/registering_an_application


再生リストの各動画のタグ情報を習得する。

続いて、本題。

YouTube DATA APIのplaylistItemsを利用すると、再生リストに登録されている各動画の情報を取得することができます。

https://developers.google.com/youtube/v3/docs/playlistItems/list

しかし、playlistItemsで取得した動画の情報には、タグの情報がありません。

そこで、playlistItemsで取得したvideoIdをもとに、videosでもう一度動画情報を取得し、再生リストの各動画のタグ情報を取得します。


JavaScript

let videoIdArray = [];

let _tagsArray = [];
let tagsArray = [];

// PlaylistItems APIで各動画の情報を取得
$.ajax({ 
url: 'https://www.googleapis.com/youtube/v3/playlistItems', // YouTube DATA API: PlaylistItems
dataType: 'json',
data: {
part: 'snippet',
playlistId: 'PLC9941FF2E16B9532', // Youtube 再生リストID
maxResults: 50,
key: 'xxx'
}
})
.done(function (playlistItemRes) {
const videos = playlistItemRes.items;

for (let i = 0; i < videos.length; i++) {
let _videoId = videos[i].snippet.resourceId.videoId;
videoIdArray.push(_videoId); // videoIdのみ抽出し、配列位に格納
}

for (let i = 0; i < videoIdArray.length; i++) {
let videoId = videoIdArray[i];

// videos API で各動画の情報を再度取得
_tagsArrey.push($.ajax({
url: 'https://www.googleapis.com/youtube/v3/videos', // YouTube DATA API: videos
dataType: 'json',
data: {
part: 'snippet',
id: videoId,
maxResults: 50,
key: 'xxx'
}
}));
}
$.when.apply($, _tagsArray).done(function (){ // 再生リストの順番を保証
for (let i = 0; i < arguments.length; i++) {
tagsArray.push(arguments[i][0].items["0"].snippet.tags);
}

console.log(tagsArray); // タグの情報が配列に格納されています。
});
});


再生リストの順番の保証は、こちらを参考にさせていただきました。

結果の順番を保証して、且つ『並列』でAjax通信を行う方法