見出し画像

【GAS超実践】TwitterのAPIを叩いてチャネルの情報を自動取得する - ④ 動画の詳細情報を取得してみよう!

今日のゴール

前回と似たような、チャンネル情報が記載されているページで、「動画情報自動取得」ボタンをクリックすると...

スクリーンショット 2020-07-28 08.29.47

チャンネル名のシートを自動で作成して、動画の詳細(動画名・公開日時・視聴回数・高評価数・低評価数・コメント数)を自動で取得してシートに書き込みます

これができるだけでもだいぶテンション上がりますね😍😍

スクリーンショット 2020-07-28 08.29.02

1. videosメソッドの仕様を調べる

さて、毎度おなじみとなってきましたAPIのドキュメントを読む時間です。APIのドキュメントを読むコツは段々分かってきましたね。次の3ステップができればだいたいのAPIのドキュメントは読めるようになります

A. どんな結果が得られるのかチェック
B. どんなリクエストパラメータが必要なのかチェック
C. 実際に叩いてみて結果を見てみる

本日利用するvideosメソッドのドキュメントはこちらです。
前回のsearchメソッドでは、動画IDと動画名・公開日時までしか取れなかったので、videosメソッドを使って、動画の【視聴回数】【高評価数】【低評価数】【コメント数】を取得していきます。

1-1. videosメソッドで取れる値のチェック

まず、このメソッドのレスポンスにはどんな値が指定できるのか、いつもどおり必須パラメータのpartから読み解いていきましょう。

色々と取得可能そうですが、今回も【snippet】と【statistics】に欲しいデータがありそうです。

画像3

予想通り、snippetには動画の公開日と、動画名が取得できます。

画像4

また、statisticsには動画の統計情報(視聴回数・高評価数・低評価数・コメント数)が取得できますね!

画像5

1-2. videosメソッドに必要なリクエストパラメータ

さて、リクエストパラメータは、先程のpart、いつもどおりのkey以外に何が必要でしょうか?
今回は、特定の動画の情報が欲しいので動画IDを指定したいですね。

どうやらカンマ区切りで複数の動画IDを指定できるみたいなので、前回のsearchで取得した動画IDのリストを保持しておいて、それを全て取得できれば対象チャンネルの全動画の詳細が取得できそうです。
(そこは次回やりましょう!)

画像6

1-3. videosメソッドを叩いて見る

では必要な情報は分かったので、今回叩くリクエストURLはこんな感じになりますね。

https://www.googleapis.com/youtube/v3/videos?key=【あなたのAPIキー】&part=snippet,statistics&id=TDKAG5-WaTk

【あなたのAPIキー】をAPIキー取得講座で得たAPIキーに置き換えて、実際にブラウザでリクエストしてみましょう。

いつもどおり、itemsの中のsnippetには公開日時・動画名が取得できています。

画像7

さらにstatisticsの中には、視聴回数・高評価数・低評価数・コメント数が取得できています。

画像8

2. GASでvideosメソッドを叩いてみる

ではこれをGASでいつもどおり、URLを構築して叩くところまでやってみましょうか。

function searchVideoDetails() {
 // ベースとなるYoutubeAPIのURL
 const baseYoutubeAPIUrl = "https://www.googleapis.com/youtube/v3/"

 // 前回取得したAPIキー
 const key = "【あなたのAPIキー】"
 
 // 前回取得した森内チャンネルの動画ID
 let videoId = "TDKAG5-WaTk"

 // YoutubeのリクエストURL
 const youtubeAPIUrl = `${baseYoutubeAPIUrl}videos?key=${key}&part=snippet,statistics&id=${videoId}`

 let json = UrlFetchApp.fetch(youtubeAPIUrl)
 let result = JSON.parse(json)
 
 console.log(result.items[0].snippet)
 console.log(result.items[0].statistics) 
}​

ここまでは前回とほぼ同じです。「1. リクエストに必要なパラメータを変数として用意」「2. リクエストURLを組み立て」「3. UrlFetchAppのfetchメソッドで結果を取得」この3ステップです。

では結果を見てみましょう。

snipptでlog吐き出した方は、公開日時と動画名が出力できているみたいです。

画像9

statisticsでlog吐き出した方は、動画の「視聴回数」「高評価数」「低評価数」「コメント数」が取得できてますね。

画像10

これで、先程ブラウザでAPIを叩いたときと同じ結果がGASからも取得できました。

3. 動画の詳細情報を取得する

では、この取得した情報を全部変数に入れていきましょう。
この部分は簡単です。

 let title       = result.items[0].snippet.title
 let publishedAt = result.items[0].snippet.publishedAt
 let viewCount   = result.items[0].statistics.viewCount
 let likeCount   = result.items[0].statistics.likeCount
 let dislikeCount= result.items[0].statistics.dislikeCount
 let commentCount= result.items[0].statistics.commentCount

こんな感じで、スプレッドシートに吐き出したいデータを全て変数に入れておきます。

次に、前回やったのと同様に、この森内チャンネルのシートを作っておきましょう。

 // チャンネル名を取得
 let channelTitle = result.items[0].snippet.channelTitle

 // チャンネル名のシートを作る  
 createSheetByName(channelTitle)

ちなみにcreateSheetByNameメソッドは前回作ったこれを使います。

/**
* チャンネル用のシートを作る
*/
function createSheetByName(sheetName) {  
 let spreadSheet = SpreadsheetApp.getActive()
 let sheet = spreadSheet.getSheetByName(sheetName)
  
 // シートが存在しないときだけ作る
 if (sheet === null) {
   spreadSheet.insertSheet(sheetName)
 }
}

これでデータを書き込む用のシートを自動で作れます。

実際に実行するとこんな感じでシートがポンッと出来上がります😍

まぁこれは前回と同じですね。

スクリーンショット 2020-07-28 09.23.55

4. 動画の詳細情報をスプレッドシートに書き込む

では実際に書き込んで行きましょう!

 // 書き込み対象のチャンネル名のsheetオブジェクトを取得
 let spreadSheet = SpreadsheetApp.getActive()
 let sheet = spreadSheet.getSheetByName(channelTitle)

 // ヘッダー行に書く情報  
 let headers = [["動画名", "動画公開日時", "視聴回数", "高評価数", "低評価数", "コメント数"]]

 // スプレッドシートに書き込む用に、動画の詳細情報を2次元配列に入れておく
 let videoDetails = [[title, publishedAt, viewCount, likeCount, dislikeCount, commentCount]]
   
 // ヘッダー行を書き込み
 sheet.getRange(1, 1, headers.length, headers[0].length).setValues(headers)
 
 // videoの詳細を書き込み
 sheet.getRange(2, 1, videoDetails.length, videoDetails[0].length).setValues(videoDetails)

分かりづらいのは最後のgetRangeの部分だと思います。
getRangeは(開始行数, 開始列数, 何行分, 何列分)という順番に引数を受け取りますが、それぞれこのようにイメージすると分かりやすいです。


ヘッダー行の場合ですと、1行目の1列目から、1行分だけ、6列分の領域(range)を取得したいので、getRange(1, 1, 1, 6)となります。
今回、ただ、引数の3つ目・4つ目の行数と列数はものによって変わりますので、入れたい配列の長さから持ってくると良いですね。

スクリーンショット 2020-07-28 09.31.30

可変に対応するために、今回のheadersを見ると、行数自体はheaders自体のlengthで取得できます。

列数は、headersの最初の要素(headers[0])のlengthを取ればOKです。なのでこのような書き方をしてた訳ですね。

スクリーンショット 2020-07-28 09.37.12

では一旦これで実行してみましょう。

おー無事に動画の詳細情報をスプレッドシートに書き込むことができました😍😍

スクリーンショット 2020-07-28 09.39.02

5. ボタンで実行可能にしてみる。

これも前回と同様の手順で、ボタンを用意しましょう。

まずは、「挿入」→「図形描画」をクリック

画像15

好きな図形を選んで、パワポのようにボタンを作りましょう!

画像16

できたボタンを右クリックして、点3つのボタンをクリックして、スクリプトを割り当てを選択。

画像17

今回のsearchVideoDetailsを割り当ててOKします。

スクリーンショット 2020-07-28 09.41.49

さて、これで実行してみると、、「動画情報自動取得」ボタンを押してみます。

スクリーンショット 2020-07-28 09.42.47

無事に、「森内チャンネル」のシートが自動で生成されて、動画の詳細が書き込まれましたね!

お疲れさまでした🤗🤗

これでできることがだいぶ広がりますね。
チャンネルの中で、動画ごとに高評価率・低評価率を計算して、どの動画が高評価に繋がりやすいか、その逆も、とかコメントの中身を取得してみるとか幅が広がります!

スクリーンショット 2020-07-28 09.43.00

次回は、最終回ということで、最初シートにチャンネルIDだけ記載しておくと、該当チャンネルの情報を全て自動で取得してスプレッドシートに書き込む。というところをやっていきます。

お楽しみに😎😎

実践編で利用するための基礎編はすべて無料公開してます。 基礎編のモチベーション向上のためにサポートして頂けるとめちゃくちゃ喜びます!! だいたい作業工数は1記事あたり4-5時間程度かけて【分かりやすい】【知識が身につく!】を意識して作っておりますので、今後も頑張っていきます!