YouTube Data API v3を利用してチャンネルのプロフィール情報を取得する

独自にYouTubeチャンネルのプロフィール情報ページを作成することを想定し、プロフィール情報ページは下記のデータから構成されるものと定義し、APIでこれらのデータを取得することを考えてみる。

  • チャンネルアイコン画像
  • チャンネルアート画像
  • チャンネル名
  • アップロード動画数
  • 登録者数
  • 動画再生回数
  • チャンネルに関連付けられた国
  • チャンネル作成日

これらのデータは、YouTube Data APIの channels リソースに含まれるプロパティと下記のように対応する。

  • snippet
    • snippet.thumbnails:チャンネルアイコン画像
    • snippet.title:チャンネル名
    • snippet.country:チャンネルに関連付けられた国
    • snippet.publishedAt:チャンネル作成日
  • statistics
    • statistics.videoCount:アップロード動画数
    • statistics.subscriberCount:登録者数
    • statistics.viewCount:動画再生回数
  • brandingSettings

これを踏まえて、APIを利用して上記のプロパティを取得するコードの例が下記。


require_once '/path/to/google-api-php-client/vendor/autoload.php';

$client = new Google_Client();
$client->setDeveloperKey("_API_KEY_");
$youtube = new Google_Service_YouTube($client);

$json = file_get_contents("channelIds.json");
$channelIds = json_decode($json, true);

foreach (array_chunk($channelIds, 50) as $ids)
{
  $params = [
    'id' => implode(",", $ids),
    'maxResults' => 50,
  ];

  $response = $youtube->channels->listChannels('snippet,statistics,brandingSettings', $params);

  foreach ($response['items'] as $i => $item)
  {
    echo "#$i\n";
    echo "id         : {$item['id']}\n";
    echo "title      : {$item['snippet']['title']}\n";
    echo "country    : {$item['snippet']['country']}\n";
    echo "publishedAt: {$item['snippet']['publishedAt']}\n";

    echo "viewCount      : {$item['statistics']['viewCount']}\n";
    echo "subscriberCount: {$item['statistics']['subscriberCount']}\n";
    echo "videoCount     : {$item['statistics']['videoCount']}\n";

    foreach ($item['snippet']['thumbnails'] as $key => $img)
    {
      echo "$key: {$img['url']}\n";
    }

    foreach ($item['brandingSettings']['image'] as $key => $imgUrl)
    {
      if (!is_null($imgUrl))
      {
        echo "$key: $imgUrl\n";
      }
    }
  }
  sleep(1);
}

前述のプロフィール情報に必要なプロパティをリクエストするには、listChannels() メソッドの part 引数に snippetstatisticsbrandingSettings を指定すれば良い。

フィルタのパラメータとして、maxResults パラメータには、APIレスポンスに含める結果の件数を指定する。デフォルト値は 5、最大値は 50 となる。上記コードでは最大値 50 を指定している。また、id パラメータにチャンネルIDを指定する。カンマ区切りで複数のチャンネルIDを指定できる。上記のコードでは、maxResults パラメータに合わせて、カンマ区切りで一度に最大50のチャンネルIDを指定するようにしている。