LoginSignup
2
1

More than 1 year has passed since last update.

Python で ツイキャスAPI の OAuth認証 をした

Last updated at Posted at 2023-02-23

ツイキャス公式でPHPとRubyのサンプルソースはあるのだが、Pythonしかわからないので自分で作ってみた。

HTTPリクエストのPOSTメソッドには、urllibライブラリを使う。
HTTPリクエストヘッダーにapplication/x-www-form-urlencodedを指定するので、パラメータはURLエンコードしなければならない。この辺で結構つまづいた。

引用資料

開発API - ツイキャス

TwitCastingのAPIv2ドキュメント

環境

  • Python 3.11.1 64-bit

アプリケーションの登録

ツイキャス公式サイト開発APIページに準じて、アプリケーションを登録する。

開発の流れ

まず、開発者向けページからアプリケーションを登録します。CreateNewApp から必要な情報を入力して、Createします。

開発者向けページへアクセスする。
ログインを求められたらログインする。

Create New Appを選択する。

image.png

Name,Descriptionは適当で良い。
Callback URLにはhttp://localhost:8000/を指定する。
Createを選択する。

image.png

登録が完了したら、ClientID, ClientSecretが発行される。

ブラウザで連携アプリの許可

APIドキュメントに準じて、ブラウザでアプリ許可を得る。

Step1

以下のURLにブラウザでアクセスし、アプリ許可確認画面で「連携アプリを許可」または「キャンセル」を選択します。
URL
https://apiv2.twitcasting.tv/oauth2/authorize?client_id={YOUR_CLIENT_ID}&response_type=code&state={CSRF_TOKEN}

{YOUR_CLIENT_ID}の部分を上記で取得したClientIDに読み替える。
{CSRF_TOKEN}は不要なので&state=以降を削除した。

例)ClientIDがAAAの場合は以下のようになる。

https://apiv2.twitcasting.tv/oauth2/authorize?client_id=AAA&response_type=code

このURLをブラウザのアドレス欄に貼り付けて移動する。

連携アプリを許可を選択する。

image.png

ブラウザでエラー画面等が出るが、気にせずアドレス欄のURLをコピーする。

image.png

アドレス欄のURLは以下のようになっている。

http://localhost:8000/?code={CODE}

codeパラメータが取得できた。

アクセストークンの取得

APIドキュメントに準じて、OAuth認証でアクセストークンを取得する。

Step2
許可後にコールバックに渡された code パラメータを使用してユーザのアクセストークンを取得します。

{CODE} {YOUR_CLIENT_ID} {YOUR_CLIENT_SECRET}はそれぞれ上記で取得したものに読み替える。

get_access_token.py
import json
import urllib.request
import urllib.parse

url = 'https://apiv2.twitcasting.tv/oauth2/access_token'
headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
}
params = {
    'code': {CODE},
    'grant_type': 'authorization_code',
    'client_id': {YOUR_CLIENT_ID},
    'client_secret': {YOUR_CLIENT_SECRET},
    'redirect_uri': 'http://localhost:8000/',
}
data = urllib.parse.urlencode(params).encode('utf-8')

req = urllib.request.Request(url, data=data, headers=headers, method='POST')
with urllib.request.urlopen(req) as res:
    data = json.load(res)
print(data)
結果
{'token_type': 'Bearer', 'expires_in': 15552000, 'access_token': 'BBB'}

アクセストークンを取得できた。

有効期限は180日間となっていた。

なお、アクセストークンを再度取得しようとすると404エラーとなる。
メモし忘れた場合などは、開発者向けページからClientIDを再発行してやり直せば良い。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1