ザックリ開発することになった経緯
- 知り合いからYouTubeの情報を集めたいと依頼がくる
- 暇だったんで話を聞いてみる(面白そうなので無償で引き受けることに)
- 仕様:以下のデータをチャンネルごとにまとめて出力
- チャンネル名
- チャンネル作製日(年月日)
- チャンネル登録者数
- アップロードした動画、配信の数
- 過去最新10件の(動画、アーカイブ、ショート)平均再生数
- 作ったシステムは自由に動かしていい
特に開発環境の指定が無かったので、GASで実装していくことにしました。
理由はデータの入出力が楽だからです。
今回の仕様
- スプレッドシートから検索対象になるチャンネルIDを取得
- チャンネルIDからチャンネルデータを取得
- 対象チャンネルのアップロードリストを取得
- アップロードリストから10件分の動画データを取得
- スプレッドシートに出力
対象チャンネルの過去10件分の平均再生数取得がちょっと大変でした。
YouTubeAPIには、そのような機能はなかったので。
なので、2~4の工程を行う必要があったんですね。
チャンネルデータの取得
チャンネルデータは以下のリクエストを叩いて取得します。
チャンネルリスト取得: https://www.googleapis.com/youtube/v3/channels
こちらGetパラメータにチャンネルIDが必要なのですが
「チャンネルIDってどれよ?」 ってなりますよね。
チャンネルIDはchannel/以降にあります。
(画像だと「UCZf__ehlCEBPop-_sldpBUQ」)
コレが全部、共通表示だと嬉しいのですが…
チャンネルによってはチャンネルIDが乗ってない場合があります。
そんなときは、投稿動画を開いてchannelIDを探します。
ディベロッパーツールを開いて「channelId」を検索します。
(contentがチャンネルIDとなります)
では、APIを叩きましょう。
以下がパラメータを指定してAPIを叩く処理になります。
//gas
let url = "https://www.googleapis.com/youtube/v3/channels";
url += "?part=snippet,statistics,contentDetails";
url += "&id="+id;
url += "&key="+apiKey;
//APIを叩く
const response = UrlFetchApp.fetch(url);
//レスポンス
const json = JSON.parse(response);
//今回、必要になるデータ
console.log("チャンネル名:"+json.items[0].snippet.title);
console.log("チャンネル作製日:"+json.items[0].snippet.publishedAt);
console.log("チャンネル登録者数:"+json.items[0].statistics.subscriberCount);
console.log("アップロードした動画の数"+json.items[0].statistics.videoCount);
console.log("アップロードプレイリストID:"+json.items[0].contentDetails.relatedPlaylists.uploads);
文字列を連結して渡してる簡単な操作ですね。
partパラメータはチャンネルリソースを指定してます。
今回の例でいうところのitems[0]以降のものですね。
アップロードプレイリストIDが取得できたので、こちらを使って
過去10件分の動画IDを取得していきます。
プレイリストから動画IDを取得
プレイリストのデータは以下のリクエストを叩いて取得します。
プレイリスト取得: https://www.googleapis.com/youtube/v3/playlists
では、APIを叩きましょう。
以下がパラメータを指定してAPIを叩く処理になります。
//gas
let url = "https://www.googleapis.com/youtube/v3/playlistItems";
url += "?part=snippet";
url += "&playlistId=" + id;
url += "&maxResults=" + limit;
url += "&key="+apiKey;
//APIを叩く
const response = UrlFetchApp.fetch(url);
//レスポンス
const json = JSON.parse(response);
//今回、必要なデータ(動画ID)
json.items[i].snippet.resourceId.videoId
maxResultsパラメータは最大50まで指定できます。
動画IDが取れましたので、それぞれ再生数を取得します。
動画情報の取得
動画のデータは以下のリクエストを叩いて取得します。
動画データの取得: https://www.googleapis.com/youtube/v3/videos
では、APIを叩きましょう。
以下がパラメータを指定してAPIを叩く処理になります。
//gas
let url = "https://www.googleapis.com/youtube/v3/videos";
url += "?part=snippet,statistics";
url += "&key="+apiKey;
url += "&id="
//idを入れ込む(カンマ区切り)
for(let i=0; i<ids.length; i++){
url += ids[i];
if(i<ids.length-1){
url += ",";
}
}
//APIを叩く
const response = UrlFetchApp.fetch(url);
//レスポンス
const json = JSON.parse(response);
//今回、必要なデータ(再生数)
Number(json.items[i].statistics.viewCount);
idパラメータはカンマ区切りで複数指定できます。
コレで必要なデータは全て取得できました。
後は加工してスプレッドシートに書き込むだけです。
実際にシステムを動かすと、仕様に沿ったデータを出力します。
以上!
質問、依頼等がありましたらTwitterにてお話、聞きます。
Twitter: Don't Pray Debug