こんばんは。ざわです。
前回、GAS(Google Apps Script)を使って YouTube の動画情報を取得してみました。
この時は特定の動画のURLを指定して取得する方法で、1件分だけの取得だったのですが、
今回はそれを改良し、特定のチャンネルから複数の動画情報を取得してスプレッドシートに一覧出力してみようと思います。
動画情報を取得するチャンネルは、弊社の「AIMEKチャンネル」です。
最初にチャンネルIDが必要なのですが、チャンネルIDはURLの末尾部分から取得できます。
AIMEKチャンネルの場合、URLは下記で、URL末尾の青字部分がチャンネルIDに該当します。
https://www.youtube.com/channel/UCmatd8FfLKg0Pmi4iitAJYg
https://www.youtube.com/channel/UCmatd8FfLKg0Pmi4iitAJYg
YouTube Data APIの以下リソースを使用して実装してみました。
・Channels
・PlaylistItems
・Videos
・Channels
・PlaylistItems
・Videos
できあがったソースがこちら。
function myFunction() {
// チャンネルID
const channelId = "UCmatd8FfLKg0Pmi4iitAJYg"
// ビデオID 取得
const videoIds = getVideoIds(channelId)
if (!videoIds || videoIds.length === 0) {
console.log('No VideoId found.');
return;
}
// スプレッドシートにヘッダ行をセット
const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(1, 1).setValue("タイトル");
sheet.getRange(1, 2).setValue("再生回数");
sheet.getRange(1, 3).setValue("いいね数");
sheet.getRange(1, 4).setValue("コメント数");
sheet.getRange(1, 5).setValue("投稿日時");
sheet.getRange(1, 6).setValue("概要");
// 動画情報を取得し、取得値をスプレッドシートに出力
for (let i = 0; i < videoIds.length; i++) {
const {
title,
publishedAt,
description,
viewCount,
likeCount,
commentCount
} = getVideoData(videoIds[i])
let row = i + 2;
sheet.getRange(row, 1).setValue(title);
sheet.getRange(row, 2).setValue(viewCount);
sheet.getRange(row, 3).setValue(likeCount);
sheet.getRange(row, 4).setValue(commentCount);
sheet.getRange(row, 5).setValue(publishedAt);
sheet.getRange(row, 6).setValue(description);
}
}
function getVideoIds(channelId) {
try {
let results = [];
// チャンネルIDを指定して、channelリソースを取得
const lstChannels = YouTube.Channels.list("contentDetails", {id: channelId});
if (!lstChannels || lstChannels.items.length === 0) {
console.log('No Channels found.');
return;
}
for (let i = 0; i < lstChannels.items.length; i++) {
// チャンネルのアップロード済み動画を含む再生リストIDを取得
const item = lstChannels.items[i];
const playlistId = item.contentDetails.relatedPlaylists.uploads;
let nextPageToken = null;
do {
// 再生リストIDを指定して、playlistItems.list メソッドを使って対応するリストを取得
const playlistResponse = YouTube.PlaylistItems.list('snippet', {
playlistId: playlistId,
maxResults: 50,
pageToken: nextPageToken
});
if (!playlistResponse || playlistResponse.items.length === 0) {
console.log('No Playlist found.');
break;
}
// ビデオID 取得
for (let j = 0; j < playlistResponse.items.length; j++) {
const playlistItem = playlistResponse.items[j];
results.push(playlistItem.snippet.resourceId.videoId);
}
nextPageToken = playlistResponse.nextPageToken;
} while (nextPageToken);
}
return results;
} catch (err) {
console.log('Failed with err %s', err.message);
}
}
function getVideoData(videoId) {
// ビデオIDを指定して、動画情報を取得
const results = YouTube.Videos.list('snippet,statistics', { id: videoId });
const { items } = results
const { statistics, snippet } = items[0]
const { title, publishedAt, description } = snippet
const { viewCount, likeCount, commentCount } = statistics
return { title, publishedAt, description, viewCount, likeCount, commentCount }
}
実行結果の一覧がこちらになります。
YouTube Data APIのサンプルコードを参考に作りました。比較的簡単にできたなぁという感想です。
それではまたー。
0 件のコメント:
コメントを投稿