1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

YouTubeAPIを叩く

Last updated at Posted at 2022-11-07

ザックリ開発することになった経緯

  • 知り合いからYouTubeの情報を集めたいと依頼がくる
  • 暇だったんで話を聞いてみる(面白そうなので無償で引き受けることに)
  • 仕様:以下のデータをチャンネルごとにまとめて出力
    • チャンネル名
    • チャンネル作製日(年月日)
    • チャンネル登録者数
    • アップロードした動画、配信の数
    • 過去最新10件の(動画、アーカイブ、ショート)平均再生数
  • 作ったシステムは自由に動かしていい

特に開発環境の指定が無かったので、GASで実装していくことにしました。
理由はデータの入出力が楽だからです。

今回の仕様

  1. スプレッドシートから検索対象になるチャンネルIDを取得
  2. チャンネルIDからチャンネルデータを取得
  3. 対象チャンネルのアップロードリストを取得
  4. アップロードリストから10件分の動画データを取得
  5. スプレッドシートに出力

対象チャンネルの過去10件分の平均再生数取得がちょっと大変でした。
YouTubeAPIには、そのような機能はなかったので。
なので、2~4の工程を行う必要があったんですね。

チャンネルデータの取得

チャンネルデータは以下のリクエストを叩いて取得します。
チャンネルリスト取得: https://www.googleapis.com/youtube/v3/channels

こちらGetパラメータにチャンネルIDが必要なのですが
「チャンネルIDってどれよ?」 ってなりますよね。

チャンネルIDはchannel/以降にあります。
(画像だと「UCZf__ehlCEBPop-_sldpBUQ」)

image.png

コレが全部、共通表示だと嬉しいのですが…
チャンネルによってはチャンネルIDが乗ってない場合があります。
image.png
そんなときは、投稿動画を開いてchannelIDを探します。
ディベロッパーツールを開いて「channelId」を検索します。
(contentがチャンネルIDとなります)
image.png
では、APIを叩きましょう。
以下がパラメータを指定してAPIを叩く処理になります。

.js
//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を叩く処理になります。

.js
//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を叩く処理になります。

.js
//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パラメータはカンマ区切りで複数指定できます。
コレで必要なデータは全て取得できました。
後は加工してスプレッドシートに書き込むだけです。

実際にシステムを動かすと、仕様に沿ったデータを出力します。
image.png
以上!
質問、依頼等がありましたらTwitterにてお話、聞きます。
Twitter: Don't Pray Debug

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?