はじめに
Twitch APIでココを更新するための手順。
ゲームイベントとかではNodeCG等から叩くケースが想定されます。
1. New Twitch APIを利用できるようにする
Twitch APIを利用してみようを参考に、利用登録をします。
2 操作対象のAPIに合わせたOAuth2トークン取得
チャンネル情報の更新は Modify Channel Information のAPIを利用します。
各APIのAuthenticationには以下の2種類が書いてあって、それぞれ別物と思ってください。
- App Access Token: curlだけで取得できるトークン (
/token
のやつ) - OAuth Token: 一回ブラウザでアクセスしてリダイレクトして取得できるトークン (
/authorize
のやつ)
対応しないトークンで各種APIを叩いた場合、401が返却されます。
{"error":"Unauthorized","status":401,"message":"Invalid OAuth token"}
Modify Channel Information
はOAuth Tokenを要求されるので、ブラウザでアクセスしてリダイレクトする方になります。
また、このAPIは channel:manage:broadcast
のscopeが必要なので、このscopeを指定しておきます。詳細はTwitch APIに必要なOAuth認証のアクセストークンを取得しようを参照してください。
一応nginxで動かすことを想定したhtmlを記載しておきます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<a href="https://id.twitch.tv/oauth2/authorize?client_id=ここにクライアントID&redirect_uri=http://localhost&response_type=token&scope=channel%3Amanage%3Abroadcast">Twitch認証</a>
<div id="token"></div>
</body>
<script>
if (location.hash) {
document.querySelector("#token").innerHTML=decodeURIComponent(location.hash)
}
</script>
</html>
ちゃんと取得できれば以下のような感じになります。ここでaccess_tokenが取得できれば以降はコマンドラインだけで進められます。
なお、その他のscopeについてはTwitch Access Token Scopesを参照。
3 配信者ID(broadcaster_id)の取得
人に見えてる文字列だとAPIには使えないので、数字の方のIDを取得します。
Get Started with the Twitch API にもある通り、とりあえずこれを叩きます。
Postmanの場合
curlの場合
curl -X GET 'https://api.twitch.tv/helix/users?login=pastan04' \
-H 'Authorization: Bearer とーくん' \
-H 'Client-Id: 自分のクライアントID'
4 ゲームカテゴリの検索
ゲームカテゴリは自由に入力できるものではなく、ゲームごとのに設定されたIDを知る必要があります。これはSearch Categories
のAPIを使います。
query=
の部分に、ゲームカテゴリ名を入れて検索を行います。
複数のゲームがヒットした場合はそれだけレスポンスが返ってきます。機械的に判定するのは大変なので、イベントで使う場合は事前に全ゲームのidを調べ上げておくのがよいでしょう。
Postmanの場合
curlの場合
スペースを含む検索ワードは+
や%20
に置き換えないと怒られることに注意.
curl -X GET 'https://api.twitch.tv/helix/search/categories?query=The+Somnium+Files' \
-H 'Authorization: Bearer とーくん' \
-H 'Client-Id: 自分のクライアントID'
5 ゲームカテゴリの更新
これで 更新対象の配信者ID ゲームID が揃ったので、いよいよカテゴリを更新します。
ここではタイトルも一緒に更新する例を記載していますが、更新が不要なkeyは指定しなくてOKです。
Postmanの場合
見えてないけどこれまで通りAuthorizationとClient-IdをHeadersに指定してください。
レスポンスボディは無いです。
curlの場合
curl -X PATCH 'https://api.twitch.tv/helix/channels?broadcaster_id=43594253' \
-H 'Authorization: Bearer とーくん' \
-H 'Client-Id: 自分のクライアントID' \
-H 'Content-Type: application/json' \
--data-raw '{"game_id":"1816749448", "title":"話題のあのゲームをやるよ!"}'
よくわかんないけどgitbashで叩いた時は文字化けしました。ラズパイとかWSL2のUbuntuからなら問題無かったです