New Twitch API を利用して動画情報を取得する

New Twitch APIを利用してユーザーに紐付いた動画情報やゲームに紐付いた動画情報を取得することができる。

下記はAPIを利用して動画情報を取得するコードの例。


class TwitchApiClient
{
  private $endpoint = 'https://api.twitch.tv/helix/';

  private $oauthClientIdHeader;
  private $oauthTokenHeader;

  public function __construct($CLIENT_ID, $ACCESS_TOKEN)
  {
    $this->oauthClientIdHeader = "Client-ID: $CLIENT_ID";
    $this->oauthTokenHeader = "Authorization: Bearer $ACCESS_TOKEN";
  }

  public function get($resource, array $queryParams)
  {
    $url = $this->endpoint . $resource;

    if (!empty($queryParams))
      $url .= '?' . http_build_query($queryParams);

    $response = $this->execCurlGET($url);
    sleep(1);

    return json_decode($response, true);
  }

  private function execCurlGET($url)
  {
    $cmd = 'curl' .
           " -H '{$this->oauthClientIdHeader}'" .
           " -H '{$this->oauthTokenHeader}'" .
           " -X GET '$url'";

    echo "# $cmd\n";

    return exec($cmd);
  }
}


$CLIENT_ID = '_CLIENT_ID_';
$ACCESS_TOKEN = '_ACCESS_TOKEN_';

$client = new TwitchApiClient($CLIENT_ID, $ACCESS_TOKEN);

$params = [
  //'user_id' => '19571641', // ninja
  'game_id' => '33214', // Fortnite
  'first' => 20,
  'period' => 'all',
  'sort' => 'views',
  'type' => 'all',
];

$page = 0;
do
{
  $response = $client->get('videos', $params);
  var_dump($response);
  $page++;

  if (isset($response['pagination']['cursor']))
    $params['after'] = $response['pagination']['cursor'];
  else
    break;

  if ($page >= 2)
    break;

} while(true);

動画情報を取得するには、下記のURLに対してGETリクエストを行えば良い。

https://api.twitch.tv/helix/videos

GETリクエストを行う際の必須クエリパラメータとして、user_id パラメータにユーザーIDを指定した場合は、そのユーザーに紐付いた動画情報、game_id パラメータにゲームIDを指定した場合は、そのゲームに紐付いた動画情報を取得することができる。上記のコードの例では、game_id にFortniteのゲームIDを指定している。

次に上記のコードで設定しているオプションのクエリパラメータを順に説明していく。

first パラメータに値を設定すると、APIレスポンスに含める動画情報の件数を指定することができる。デフォルト値は 20、最大 100 まで指定することができる。

period パラメータには、いつ作成された動画を取得対象にするか、その期間を指定できる。デフォルト値は all で全ての期間が対象となる。他には、dayweekmonth を指定することができる。

sort パラメータでは、レスポンスに含まれる動画情報リストのソート方法を指定できる。デフォルト値は time で新しい動画順にソートされる。views を指定すると視聴数(再生回数)が多い順にソートされる。他には trending も指定可能であるが、上記のコードを実行して確認した時点では、"503 Service Unavailable" で結果を取得することができなかった。

type パラメータでは、レスポンスに含める動画の種類を指定することができる。デフォルト値は all で全ての動画の種類がレスポンスに含まれる。upload を指定するとアップロード動画、archive を指定するとライブ配信のアーカイブ動画、highlight を指定するとダイジェスト動画に限定した結果を取得することができる。

APIリクエスト実行後、レスポンスデータの data フィールドにクエリパラメータの指定条件にマッチした動画情報リストが含まれている。また、APIリクエスト時に、レスポンスデータの pagination フィールドにある cursor プロパティの値を after パラメータの値に指定してリクエストを行うと、レスポンスデータの次の結果セットを取得することができる。