【YouTube Data API】Youtubeの動画の諸データを取得する

公式にも使用方法が纏まっていたが、一応纏めた。

前準備

以下のサイトの「作業を始める前に」に従って準備をする。
Youtube Data API の概要

情報の取得方法

動画の情報を取得する際は、

https://www.googleapis.com/youtube/v3/videos?id={videoID}&key={apiKey}&part={parts}&fields={fields}

のURLを叩けば良い。(fieldsは任意)

idパラメータはビデオID(動画のURL末尾の11桁の英数記号)、keyパラメータはAPIキーを指定する。

partパラメータ(必須)

このパラメータは、取得する情報の大まかな種類を決める。「大まかな」と書いたのは、最上位のカテゴリしか指定できないからだ。

より細かい項目ごとの指定は、この後解説する"fields"パラメータで行う。

よく使うところとしては、

  • snippet 動画の基本的な情報(タイトル、説明、カテゴリなど)が格納される。
  • contentDetails 動画の長さとアスペクト比を含む、動画コンテンツに関する情報が格納される。
  • status 動画のアップロード、処理、プライバシーのステータスに関する情報が格納される。
  • statistics 動画に関する統計情報が格納される。

具体的な取得できる値については公式サイトに乗っている。

fieldsパラメータ(任意)

詳しく所得する情報を指定できるこのパラメータは、階層構造にそって指定していく。説明するより具体例を見たほうが良いと思うので、具体例を紹介する。(パラメータのところのみ掲載。)

- snippet内のデータのみ取得 : fields=items(snippet(title))
- 動画名のみ取得 : fields=items(snippet(title))
- 動画IDと公開日時、動画名を取得 : fields=items(id,snippet(publishedAt,title))

もちろん、上記の例では part=snippet は必須になる。

ソースコード

以上を踏まえて、動画名を取得するコードをC#で記述してみる。

string youtubeID = "jNQXAC9IVRw";

string apiKey = "*****";//自分の取得したAPIキー

//YoutubeビデオIDが有効か
if(Regex.IsMatch(youtubeID, @"[0-9a-zA-Z-_]{11}"))
{
    //APIを叩く
    string youtubeDataJson = Encoding.UTF8.GetString(wc.DownloadData($"https://www.googleapis.com/youtube/v3/videos?id={youtubeID}&key={apiKey}&part=snippet&fields=items(snippet(title))"));

    //最後の"までを削除
    youtubeDataJson = youtubeDataJson.Remove(youtubeDataJson.LastIndexOf("\""));

    //最後の"から後だけ残す(これで動画名の取得)
    youtubeDataJson = youtubeDataJson.Substring(youtubeDataJson.LastIndexOf("\"") + 1);
    
}

ゴリゴリと削って動画名を取得しているが、Json.NETというJson形式のファイルをキレイにデコードしてくれるNuGetパッケージもあるので、そちらもおすすめだ。