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"
    }
  }
}