ラベル Twitch の投稿を表示しています。 すべての投稿を表示
ラベル Twitch の投稿を表示しています。 すべての投稿を表示

Twitch API v5 を利用して人気のゲーム情報を取得する

Twitch API v5を利用して人気のゲーム情報を取得することができる。New Twitch APIでも可能だが、取得できるのは、現在の視聴数順にソートされたゲーム情報だけになる。v5はすでにdeprecatedなAPIとしてアナウンスされているが、ゲーム情報に加え、視聴数や配信チャンネル数も取得することができるため、New Twitch APIよりも利用価値が高い。

下記は、v5を利用して人気のゲーム情報を取得するコードの例。


class TwitchApi_v5_Client
{
  private $endpoint = 'https://api.twitch.tv/kraken/';

  private $oauthClientIdHeader;

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

  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 'Accept: application/vnd.twitchtv.v5+json'" .
           " -H '{$this->oauthClientIdHeader}'" .
           " -X GET '$url'";

    echo "# $cmd\n";

    return exec($cmd);
  }
}


$CLIENT_ID = '_CLIENT_ID_';
$client = new TwitchApi_v5_Client($CLIENT_ID);

$params = [
  //'limit' => 100,
  //'offset' => 0,
];

$response = $client->get('games/top', $params);
var_dump($response);

v5で人気のゲーム情報を取得するには、下記のURLに対してGETリクエストを送信すれば良い。

https://api.twitch.tv/kraken/games/top

リクエスト時のクエリパラメータとして、limit パラメータを指定すると、APIレスポンスに含める結果の件数を変更することができる。デフォルトは 10 で10件のゲーム情報がレスポンスとして返される。最大値は 100 までとなる。

また、offset パラメータを指定することにより、レスポンスデータのページネーションを行うことができる。デフォルトでは、0 が設定され、1ページ目の結果がレスポンスとして返される。2ページ目以降の結果を取得するには、この値をインクリメントしていけば良い。

APIリクエスト実行後、レスポンスデータの top フィールドにゲーム情報(game オブジェクト)が含まれている。viewers プロパティがそのゲームの現在の視聴数、channels プロパティが現在配信しているチャンネル数を表す。現在の視聴数とチャンネル数は、New Twitch APIではレスポンスデータに含まれないため、これらのデータを取得したい場合は、v5を利用する必要がある。

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 パラメータの値に指定してリクエストを行うと、レスポンスデータの次の結果セットを取得することができる。

Twitch API v5 を利用してユーザー情報を取得する

Twitch API v5はすでにdeprecatedであるが、v5でユーザー情報を取得する方法を記載する。あえてv5でユーザー情報を取得する理由は、New Twitch APIで取得できるユーザー情報には、アカウント作成日時や更新日時が含まれていないが、Twitch API v5ではそれが取得可能なため。

下記はv5を利用してユーザー情報を取得するコード。


class TwitchApi_v5_Client
{
  private $endpoint = 'https://api.twitch.tv/kraken/';

  private $oauthClientIdHeader;

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

  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 'Accept: application/vnd.twitchtv.v5+json'" .
           " -H '{$this->oauthClientIdHeader}'" .
           " -X GET '$url'";

    echo "# $cmd\n";

    return exec($cmd);
  }
}


$CLIENT_ID = '_CLIENT_ID_';
$client = new TwitchApi_v5_Client($CLIENT_ID);

$params = [
  'login' => 'ninja',
];

$response = $client->get('users', $params);
var_dump($response);

Twitch API v5でユーザー情報を取得するには、

https://api.twitch.tv/kraken/users

に対し、クエリパラメータとして、login パラメータにユーザー名を指定してGETリクエストを行えば良い。
※公式ドキュメントでは リクエストURLに user IDs と記載されていて紛らわしいが、ユーザーIDではなくユーザー名を指定する。

上記のコードを実行するとAPIレスポンスとして、下記のようなユーザー情報を取得することできる。
※実際はAPIレスポンスとしてJSONデータが返されるが、json_decode() を使って配列データに変換している。

レスポンスデータに含まれる created_atupdated_at がNew Twitch APIでは取得できない情報で、それぞれアカウントの作成日時、更新日時にあたる情報となる。


array(2) {
  ["_total"]=>
  int(1)
  ["users"]=>
  array(1) {
    [0]=>
    array(8) {
      ["display_name"]=>
      string(5) "Ninja"
      ["_id"]=>
      string(8) "19571641"
      ["name"]=>
      string(5) "ninja"
      ["type"]=>
      string(4) "user"
      ["bio"]=>
      NULL
      ["created_at"]=>
      string(27) "2011-01-16T04:31:20.024666Z"
      ["updated_at"]=>
      string(27) "2020-08-26T11:23:23.750014Z"
      ["logo"]=>
      string(109) "https://static-cdn.jtvnw.net/jtv_user_pictures/cef31105-8a6e-4211-a74b-2f0bbd9791fb-profile_image-300x300.png"
    }
  }
}

New Twitch API を利用してユーザー(チャンネル)のフォロワー数を取得する

New Twitch APIを利用してユーザー(チャンネル)のフォロワー数を取得する。Twitch API v5ではフォロワー数はチャンネルオブジェクトのプロパティの一つであったが、New Twitch APIではデータモデルが見直され、チャンネルオブジェクトはユーザーオブジェクトに統合された。よって、New Twitch APIでは、ユーザーリソースに対してリクエストを行うことによって、フォロワー数を取得することができる。

下記は、New Twitch 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 = [
  'to_id' => '19571641', // ninja
  'first' => 1,
];

$response = $client->get('users/follows', $params);
var_dump($response);

フォロワー数は、

https://api.twitch.tv/helix/users/follows

に対し、クエリパラメータとして to_id パラメータを付加してGETリクエストを行うことによって取得することができる。

to_id にはユーザーIDを指定する。上記のコードの例では、ユーザー名 ninja のユーザーIDを指定している。

APIレスポンスとして返ってくるデータは、totaldatapagination フィールドから構成され、total の値が取得したいフォロワー数に該当する。

data フィールドには、フォロワーのユーザー情報が含まれている。デフォルトでは20件のユーザー情報が含まれる。この件数は、APIリクエストを行う際のクエリパラメータとして first パラメータに値を設定することで変更できる。設定できる最大値は 100 まで。上記のコードの例では、フォロワー数を取得するのが主な目的なため、first1 を指定し、レスポンスに含めるデータ件数を抑制している。

pagination フィールドのデータは、結果のページネーションに利用するためのもの。data フィールドに含まれるユーザー情報の次の結果セットを取得したい場合、APIリクエスト時のクエリパラメータとして after パラメータに pagination フィールドの cursor の値を指定すれば良い。

Twitch API v5 を利用して人気の動画情報を取得する

Twitch API v5を利用して人気の動画情報を取得することができる。これは特定の期間における視聴数(再生回数)に基づいたもので、視聴数が多い順にソートされた動画情報がAPIレスポンスとして返ってくる。

Twitch API v5はすでにdeprecatedで、New Twitch APIを利用することが推奨されているが、New Twitch APIには現状、人気の動画情報をリクエストする手段が提供されていないので、v5を利用する。

下記は、v5を利用して人気の動画情報を取得するコード。


class TwitchApi_v5_Client
{
  private $endpoint = 'https://api.twitch.tv/kraken/';

  private $oauthClientIdHeader;

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

  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 'Accept: application/vnd.twitchtv.v5+json'" .
           " -H '{$this->oauthClientIdHeader}'" .
           " -X GET '$url'";

    echo "# $cmd\n";

    return exec($cmd);
  }
}


$CLIENT_ID = '_CLIENT_ID_';
$client = new TwitchApi_v5_Client($CLIENT_ID);

$params = [
  'language' => 'en,ja',
  'period' => 'all',
  'limit' => 20,
  'offset' => 0,
];

do
{
  $response = $client->get('videos/top', $params);
  var_dump($response);
  $params['offset']++;

  if ($params['offset'] >= 2)
    break;

} while($response);

Twitch API v5を利用して人気の動画情報を取得するには下記のURLに対してGETリクエストを送信すれば良い。

https://api.twitch.tv/kraken/videos/top

APIリクエストを送る際のクエリパラメータとして、上記のコードの例では、languageperiodlimitoffset パラメータを設定している。

language パラメータに言語コードを指定すると、APIレスポンスに含める結果を指定した言語に紐付いたものに限定させることができる。上記の例では、en,ja を指定し英語と日本語の動画に限定している。

period パラメータでは、人気の期間を指定することができる。この値には、weekmonthall のいずれかを指定できる。上記の例では、all を指定し全期間における累計の視聴数に基づいた結果を取得するようにしている。

limit パラメータは、APIレスポンスに含める動画件数を指定するもので、デフォルト値は 10、最大値として 100 を設定できる。今回の例では、20 を指定し、1回のリクエストあたり20件の結果を取得するようにしている。

offset パラメータは、結果のページネーションのためのもので、デフォルトでは 0 が設定される。このパラメータの値をインクリメントしていけば、次の結果を順に取得していくことができる。