0
0

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の謎仕様で沼った話

Posted at

0.作成したシステム概要

  • インプット:動画URL(複数)

    1. 動画URLから動画IDを抽出
    2. 動画IDを使ってAPIを呼び出す(取得:動画情報とチャンネルID取得)
    3. チャンネルIDを使ってAPIを呼び出す(取得:チャンネル情報)
  • アウトプット:動画情報+チャンネル情報(複数)

実際に作ったシステムの動作は、こちら!

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にてお話ください。
ツイッター(プレイ)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?