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
で全ての期間が対象となる。他には、day
、week
、month
を指定することができる。
sort
パラメータでは、レスポンスに含まれる動画情報リストのソート方法を指定できる。デフォルト値は time
で新しい動画順にソートされる。views
を指定すると視聴数(再生回数)が多い順にソートされる。他には trending
も指定可能であるが、上記のコードを実行して確認した時点では、"503 Service Unavailable" で結果を取得することができなかった。
type
パラメータでは、レスポンスに含める動画の種類を指定することができる。デフォルト値は all
で全ての動画の種類がレスポンスに含まれる。upload
を指定するとアップロード動画、archive
を指定するとライブ配信のアーカイブ動画、highlight
を指定するとダイジェスト動画に限定した結果を取得することができる。
APIリクエスト実行後、レスポンスデータの data
フィールドにクエリパラメータの指定条件にマッチした動画情報リストが含まれている。また、APIリクエスト時に、レスポンスデータの pagination
フィールドにある cursor
プロパティの値を after
パラメータの値に指定してリクエストを行うと、レスポンスデータの次の結果セットを取得することができる。