見出し画像

【GAS超実践】TwitterのAPIを叩いてチャネルの情報を自動取得する - ②Twitter APIでチャンネル情報を取得してみる


ゴール

今回は将棋の森内さんの森内チャンネルのデータを引っ張ってこようと思います。

↓このようなシートを用意してスクリプトを実行すると...

スクリーンショット 2020-07-22 23.07.27


↓ 自動でチャンネルの情報を持ってきて埋めてくれます!

スクリーンショット 2020-07-22 23.07.36


ってところまでやってみましょう!ワクワクしますね!

1. 準備

まず、実行にはAPIキーが必要なので、前回のAPIキー発行がまだの方はこちらの記事をご覧になって、APIキーを用意してください。

さて、準備は良いですか!?やっていきましょう!

2. APIのドキュメントの読み方

まず、APIのドキュメントを見る癖を付けましょう。
一見すると難しいように思えますが、実は見る場所は決まっているので結構簡単です。

まずはYoutubeAPIのドキュメントページを見て下さい。

1. まずは「ガイド」を見て、使い方を確認

画像3

2. ガイドで使い方を確認します。

これは、「Getting Start」という名前のぺージになってる場合もあります。
ここには、だいたいAPIを使い始めるために必要な手順や情報が乗っています(前回の記事で紹介した内容と同じです)

画像4


3. リファレンスを見てみる

これは「document」「ドキュメント」と表記されてる場合もあります。
おおよそ、APIが用意しているメソッドの一覧が見れますので、お目当てのメソッドを探し出します。

画像5
4. チャンネル情報を取得するメソッドの中を見てみる

今回は【森内チャンネル】の情報を取得するので、「channels」メソッドを見てみましょう。listとupdateがありますが、listがチャンネル情報を取得する方です。

こちらに、リクエストURLが記載されているのでこれを使います。

画像6

5. チャンネル情報を取得するのに必要なリクエストパラメータを確認

ここでリクエストに必要なパラメータを確認します。
リクエストパラメータには、「必須」のものとそうでないものがあります今回のメソッドでは「part」パラメータのみ必須です。
(中には「required」や「*」と記載されてる場合もあります)

画像7

6. 取得できるレスポンスの内容を確認

では実際にリクエストを投げて、返ってくるパラメータを確認してみましょう。
例えば。nextPageTokenなどは、返ってきた情報が多すぎる場合(YoutubeのAPIは最大50件までしか返しません)、50件以上の情報を取得したいときはレスポンスに含まれるnextPageTokenを保存して、次のリクエスト時にリクエストパラメータのnextPageTokenにこれを指定することで次の50件の情報が取得できます。

ま、今回のお目当ての情報(登録者や視聴回数はitemsに入ってるみたいですね)

画像8

3. channelsメソッドを叩いてみる

APIを叩くには以下の3つを確認します

A. 認証方法を確認する
B. リクエストURLを確認する
C. リクエストパラメータを確認する

まず、Aの認証方法ですが、APIリファレンスのページを見ると、APIキー(前回取得したやつ)を使うか、OAuth認証を使うかどっちかと書いてます。

スクリーンショット_2020-07-23_12_49_44

今回はこのAPIキーを使う方で行きます。
次にリクエストURLですが、上のchannelsメソッドのlistで確認したURLを使えばOKなので、以下を利用します。

https://www.googleapis.com/youtube/v3/channels

最後、リクエストパラメータですが、以下の通りpartだけが必須でした。

画像10

このpartには何を指定すればよいのでしょうか?

見てみると以下のように書いてますね。

part パラメータには、API レスポンスに含める 1 つまたは複数の channel リソース プロパティをカンマ区切りリストの形式で指定します。このパラメータに指定できる part 名は id、snippet、 brandingSettings、 contentDetails、 invideoPromotion、 statistics、 topicDetails です。

難しいですが、「APIの結果として欲しいものを言ってくれ」という意味ですね。

また、「指定できるpart名はid,snippet,brandingSettings,,,,」などがありますがどれが僕たちが欲しい情報でしょうか?

その答えはchannelsメソッドのページに記載があります。

snippetの中に「チャンネル名」が入ってるようです。これはもらいましょう!

スクリーンショット_2020-07-23_12_52_15

statisticsの中には、「再生回数、コメント数、登録者数、動画数」が入ってるようです。これもゲットしたいですね!

スクリーンショット_2020-07-23_12_52_47

ということで、リクエストURLはパラメータを付けて以下のようになりますね。

https://www.googleapis.com/youtube/v3/channels?key=【前回取得したAPIキー】&part=snippet,statistics

でも待ってください。これじゃ森内チャンネルの情報が取得できないじゃないですか!

森内チャンネルの情報だけ取ってくるには・・

channelsメソッドのlistのリクエストパラメータに以下がありました。

スクリーンショット 2020-07-23 12.58.52

そう。これがまさにチャンネルIDです。森内チャンネルの場合はこちらですね。

UCAwDrM75UAddwluabae4A6g

画像14

ではこれも入れて完成するURLは・・・

https://www.googleapis.com/youtube/v3/channels?key=【前回取得したAPIキー】&part=snippet,statistics&id=UCAwDrM75UAddwluabae4A6g

こうなります。

これで一度ブラウザで叩いてみてください。レスポンスが確認できます。

snippetのところに、「チャンネル名」「チャンネル作成日時」が入ってるのが分かります。

画像15


statisticsの中に、動画数や、登録者数、総再生回数が取れてるのが分かりますね。

画像16

まずはこれをGASで作ってみましょう。

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

 // 前回取得したAPIキー
 const key = "【前回取得したAPIキー】"
 
 // 森内チャンネルのチャンネルID
 let channelId = "UCAwDrM75UAddwluabae4A6g"

 // リクエストURL
 const youtubeAPIUrl = `${baseYoutubeAPIUrl}channels?part=snippet,statistics&id=${channelId}&key=${key}`
 
 let json = UrlFetchApp.fetch(youtubeAPIUrl)
 let result = JSON.parse(json)
 
 console.log(result.items[0].snippet)
 console.log(result.items[0].statistics)
 }
 

こんな感じですね。APIキーの部分だけ自分のものに変更してみてください。

ちなみに・・

 let json = UrlFetchApp.fetch(youtubeAPIUrl)
 let result = JSON.parse(json)

この部分ですが、さっきブラウザで見て分かったとおり、このAPIはレスポンスがjson形式で返ってきています。
このままだとプログラム上では扱うことができないので、JavaScriptのJSONオブジェクトが持つparseメソッドを使ってパース(使える形に変換)して、配列・オブジェクトとしてプログラム上から扱えるようにしてます。

また、チャンネルIDを自分が好きなYoutuberのチャンネルIDに変えてみても面白いですよ。

itemsというレスポンスの中に、先程までみてた「snnipet」や「statistics」が入ってるので、オブジェクトのプロパティとして取得しに行ってます。

結果はこのような感じになります。

↓ snippetの中身

スクリーンショット 2020-07-23 13.07.56

↓ statisticsの中身

スクリーンショット 2020-07-23 13.08.01

では実際に、最初にほしかった「チャンネル名」「チャンネル公開日時」「登録者数」「動画数」「総視聴回数」を取得してみましょう。

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

 // 前回取得したAPIキー
 const key = "【前回取得したAPIキー】"
 
 // 森内チャンネルのチャンネルID
 let channelId = "UCAwDrM75UAddwluabae4A6g"

 // リクエストURL
 const youtubeAPIUrl = `${baseYoutubeAPIUrl}channels?part=snippet,statistics&id=${channelId}&key=${key}`
 
 let json = UrlFetchApp.fetch(youtubeAPIUrl)
 let result = JSON.parse(json)
   
 let title           = result.items[0].snippet.title
 let publishedAt     = result.items[0].snippet.publishedAt
 let subscriberCount = result.items[0].statistics.subscriberCount
 let videoCounts     = result.items[0].statistics.videoCount
 let viewCounts       = result.items[0].statistics.viewCount

 console.log(title, publishedAt, subscriberCount, videoCounts, viewCounts)
}
​

取得できてますね!

スクリーンショット 2020-07-23 13.11.12

4. 取得した情報をスプレッドシートに書き込んでみる

ではこのデータをそれぞれ、スプレッドシートに書き込んでみましょうか。
まず、最初に用意してたチャンネル情報を取得するシートを「チャンネル情報」というシート名にします。

スクリーンショット 2020-07-23 13.31.45

では、さきほどのコードの続きに以下を記載してみましょう。

  // 書き込む対象のチャンネル情報のシートオブジェクトを取得します  
 let spreadSheet = SpreadsheetApp.getActive()
 let sheet = spreadSheet.getSheetByName("チャンネル情報")

 // 書き込みはA2:E2までなので、
 // sheet.getRange("A2:E2")と書いてもOKです
 let range = sheet.getRange(2,1, 1, sheet.getLastColumn())

 // 取得した範囲に、チャンネル名、登録者。チャンネル公開日時、動画数、総再生数を書き込む
 // ※ setValuesで書き込む場合は、二次元配列にします  
 range.setValues([[title, subscriberCount, publishedAt, videoCounts, viewCounts]]) 

これで実行してみると・・・

スクリーンショット 2020-07-23 13.35.43

おおおおおおお!!!!無事に取得した情報が入ってます!!

素晴らしいですね。可能性は無限に広がります。

では今回はここまで。次回はこのチャンネルの中の動画一覧の取得と、各動画の再生数や高評価・低評価・コメントの数を取得していきます。

お楽しみに!!

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