0.作成したシステム概要
-
インプット:動画URL(複数)
- 動画URLから動画IDを抽出
- 動画IDを使ってAPIを呼び出す(取得:動画情報とチャンネルID取得)
- チャンネルIDを使ってAPIを呼び出す(取得:チャンネル情報)
-
アウトプット:動画情報+チャンネル情報(複数)
実際に作ったシステムの動作は、こちら!
YouTubeAPIとGASで
— Don't Pray Debug(プレイさん) (@DebugDon) April 7, 2023
投稿動画からチャンネル情報を取得
現役プログラマなら
こんなのサクッと作りますわ…
(APIの仕様がメンドイんで解説記事かきます)#プログラミング勉強中#駆け出しエンジニアと繋がりたい pic.twitter.com/45QLppvgnq
1.面倒くさかったところ
APIの仕様云々は過去に解説したので分かった前提で話します。
過去記事_チャンネルAPI
問題になったのはレスポンスデータの並び
動画で取得したチャンネルIDを、そのままAPIのIDに渡したのですが…
ID順にデータが返って来ませんでした…(なぜ、この仕様にしたんだ!?)
なので、ここはコードで対応しました。
.js
/*GASのコードです。*/
//データを入れ込む
for (let i = 0; i < dataSet.length; i++) {
let setData = [];
//videoID,videoName,channelIDsはAPI(動画)から取得
setData.push(videoIDs[i]);
setData.push(videoNames[i]);
setData.push(channelIDs[i]);
/*
entityはAPI(チャンネル)から取得
・id チャンネルID
・title チャンネル名
・publisheAt 開設日
・subscriberCount チャンネル登録者数
・videoCount 総再生数
*/
//チャンネルAPIのソートがクソなので配列から検索を行う
let setEntity = channelEntityList.find(
function (entity) {
return entity.id == channelIDs[i];
}
);
//チャンネルAPIのデータを入れる
setData.push(setEntity.title);
setData.push(setEntity.publishedAt);
setData.push(setEntity.subscriberCount);
setData.push(setEntity.videoCount);
result.push(setData);
}
find()内はアロー関数式でもいいのですが、ここは好みですね
3.終わりに
ここまで記事を読んでいただき、ありがとうございます。
何かありましたらTwitterのDMにてお話ください。
ツイッター(プレイ)