![見出し画像](https://assets.st-note.com/production/uploads/images/31321389/rectangle_large_type_2_2178335e417bee5cb31bf2e4a7c471bb.png?width=1200)
【GAS超実践】TwitterのAPIを叩いてチャネルの情報を自動取得する - ④ 動画の詳細情報を取得してみよう!
今日のゴール
前回と似たような、チャンネル情報が記載されているページで、「動画情報自動取得」ボタンをクリックすると...
チャンネル名のシートを自動で作成して、動画の詳細(動画名・公開日時・視聴回数・高評価数・低評価数・コメント数)を自動で取得してシートに書き込みます。
これができるだけでもだいぶテンション上がりますね😍😍
1. videosメソッドの仕様を調べる
さて、毎度おなじみとなってきましたAPIのドキュメントを読む時間です。APIのドキュメントを読むコツは段々分かってきましたね。次の3ステップができればだいたいのAPIのドキュメントは読めるようになります。
A. どんな結果が得られるのかチェック
B. どんなリクエストパラメータが必要なのかチェック
C. 実際に叩いてみて結果を見てみる
本日利用するvideosメソッドのドキュメントはこちらです。
前回のsearchメソッドでは、動画IDと動画名・公開日時までしか取れなかったので、videosメソッドを使って、動画の【視聴回数】【高評価数】【低評価数】【コメント数】を取得していきます。
1-1. videosメソッドで取れる値のチェック
まず、このメソッドのレスポンスにはどんな値が指定できるのか、いつもどおり必須パラメータのpartから読み解いていきましょう。
色々と取得可能そうですが、今回も【snippet】と【statistics】に欲しいデータがありそうです。
予想通り、snippetには動画の公開日と、動画名が取得できます。
また、statisticsには動画の統計情報(視聴回数・高評価数・低評価数・コメント数)が取得できますね!
1-2. videosメソッドに必要なリクエストパラメータ
さて、リクエストパラメータは、先程のpart、いつもどおりのkey以外に何が必要でしょうか?
今回は、特定の動画の情報が欲しいので動画IDを指定したいですね。
どうやらカンマ区切りで複数の動画IDを指定できるみたいなので、前回のsearchで取得した動画IDのリストを保持しておいて、それを全て取得できれば対象チャンネルの全動画の詳細が取得できそうです。
(そこは次回やりましょう!)
1-3. videosメソッドを叩いて見る
では必要な情報は分かったので、今回叩くリクエストURLはこんな感じになりますね。
https://www.googleapis.com/youtube/v3/videos?key=【あなたのAPIキー】&part=snippet,statistics&id=TDKAG5-WaTk
【あなたのAPIキー】をAPIキー取得講座で得たAPIキーに置き換えて、実際にブラウザでリクエストしてみましょう。
いつもどおり、itemsの中のsnippetには公開日時・動画名が取得できています。
さらにstatisticsの中には、視聴回数・高評価数・低評価数・コメント数が取得できています。
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吐き出した方は、公開日時と動画名が出力できているみたいです。
statisticsでlog吐き出した方は、動画の「視聴回数」「高評価数」「低評価数」「コメント数」が取得できてますね。
これで、先程ブラウザで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)
}
}
これでデータを書き込む用のシートを自動で作れます。
実際に実行するとこんな感じでシートがポンッと出来上がります😍
まぁこれは前回と同じですね。
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つ目の行数と列数はものによって変わりますので、入れたい配列の長さから持ってくると良いですね。
可変に対応するために、今回のheadersを見ると、行数自体はheaders自体のlengthで取得できます。
列数は、headersの最初の要素(headers[0])のlengthを取ればOKです。なのでこのような書き方をしてた訳ですね。
では一旦これで実行してみましょう。
おー無事に動画の詳細情報をスプレッドシートに書き込むことができました😍😍
5. ボタンで実行可能にしてみる。
これも前回と同様の手順で、ボタンを用意しましょう。
まずは、「挿入」→「図形描画」をクリック
好きな図形を選んで、パワポのようにボタンを作りましょう!
できたボタンを右クリックして、点3つのボタンをクリックして、スクリプトを割り当てを選択。
今回のsearchVideoDetailsを割り当ててOKします。
さて、これで実行してみると、、「動画情報自動取得」ボタンを押してみます。
無事に、「森内チャンネル」のシートが自動で生成されて、動画の詳細が書き込まれましたね!
お疲れさまでした🤗🤗
これでできることがだいぶ広がりますね。
チャンネルの中で、動画ごとに高評価率・低評価率を計算して、どの動画が高評価に繋がりやすいか、その逆も、とかコメントの中身を取得してみるとか幅が広がります!
次回は、最終回ということで、最初シートにチャンネルIDだけ記載しておくと、該当チャンネルの情報を全て自動で取得してスプレッドシートに書き込む。というところをやっていきます。
お楽しみに😎😎
いいなと思ったら応援しよう!
![スキプラ@元エンジニア](https://assets.st-note.com/production/uploads/images/19845779/profile_b4f759b58f265865a4794edcd87ec2e0.jpg?width=600&crop=1:1,smart)