twicasのAPIを叩いてコメントを取得する

Python

はじめに

好きな配信者のコメントがかなり終わっているコメントが多いため、データを保存して解析してみたいなと思った。
そこでツイキャスAPIを叩いて自動保存できるプログラムを作りたいと思ったので頑張ってみた。
他のサイトも興味があったら見てほしい

ツイキャスAPIの作成

ツイキャスの開発者用サイトにログインして設定を完了する。
このサイトに入ると以下のように表示されるので記入する。

ここで*があるところを埋める。自分は以下のように埋めた。

namedescriptionは正直なんでもいいので、任意の文字列を記入する。
collbackURLは「http://localhost:8000/」と設定する。

これで開発者アカウント作成完了である。

ACCESS TOKENの取得

これがかなり厄介だった。
このサイトを参考に取得した。
開発者サイトにいき、以下の画面から「CliendID」と「ClientSecret」をメモする。

https://apiv2.twitcasting.tv/oauth2/authorize?client_id={clientID}&response_type=code

clientIDは{}を含めずにchromeのURL欄に以上のURLを記入する。

この画面に遷移するので、「連携アプリを許可」してあげると以下の画面に遷移する。

そこで、このときのURLをコピーしてあげると

http://localhost:8000/?code={def+英数字}

みたいになっていると思う。この{def+英数字}がcodeパラメータである。
ここまででcode、clientID、clientSecretが手に入ったのでいよいよ実際のアクセストークンを手に入れる。Pythonを起動して以下のコードを実行する。

import json
import urllib.request
import urllib.parse

code = "取得したcodeを入れる"
client_id = "clientIDを入れる"
client_secret = "clientSecretを入れる"

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': client_id,
    'client_secret': 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)

これで出力に{access_token: xxx}でアクセストークンが手に入る。
local hostの設定などを変えるとcodeなどが変わるので今一度確認しながらやったほうがいい。
繰り返すがこの作業はこちらを参考にした、公式ドキュメントが不親切ななかとてもありがたかった。Python で ツイキャスAPI の OAuth認証 をした  #Qiita @T4phage25nmより

ツイキャスの放送中コメントを取得する

現時点でツイキャスコメントを過去にさかのぼって取得はできず、生放送中のものしか取得できなかった。今回はもこうさんのツイキャスのコメントを見てみます。
もこうさんのツイキャスURLは以下のようになっています。
もこう (@mokouliszt) さんのライブ – ツイキャス
ユーザーページを開くと以下のような画面に飛びます。

この名前のあとの@mokoulisztのユーザー名:mokoulisztが得られたのでrequest.getでリダイレクトする。

URL = "https://apiv2.twitcasting.tv/users/{ユーザー名}/movies"

として

import requests

# TwitCasting APIキー
ACCESS_TOKEN = "ここにアクセストークンを入れる"

HEADERS = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
    "X-Api-Version": "2.0"
}

response = requests.get("https://apiv2.twitcasting.tv/users/mokouliszt/movies", headers=HEADERS)
print(response.json())

と打ち込むことでもこうさんの生配信情報がjson形式で得られる。
2025/2/22 15:00時点での情報は以下の通りとなっていて

{'movies': [{'id': 'ABCDE', 'user_id': 'xxx', 'title': 'xxx', 
'subtitle': xxx, 'last_owner_comment': 'xxx', 'category': 'xxx', 
'link': 'xxx', 'is_live': True, 'is_recorded': "bool",……………………

とかなり長いがこの”is_live”がTrueとなっている場合はこの放送がlive中でコメントを取得できることを表している。(実際の数値ををxxxで伏せています)
このときのid=”ABCDE”をメモして

import requests

# TwitCasting APIキー (変更なし)
ACCESS_TOKEN = "アクセストークンを入力"

HEADERS = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
    "X-Api-Version": "2.0"
}

MOVIE_ID = "ABCDE" #  現在配信中のライブID

response = requests.get(f"https://apiv2.twitcasting.tv/movies/{MOVIE_ID}/comments", headers=HEADERS)
print(response.json())

と入力するとコメントが得られる。例えばデータをcsvで出力したいときは

import requests

# TwitCasting APIキー (変更なし)
ACCESS_TOKEN = "アクセストークンを入力"

HEADERS = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
    "X-Api-Version": "2.0"
}

MOVIE_ID = "ABCDE" #  現在配信中のライブID

response = requests.get(f"https://apiv2.twitcasting.tv/movies/{MOVIE_ID}/comments", headers=HEADERS)
data = response.json()

# CSVファイルに書き出し
csv_file = "comments.csv"
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(["id", "name", "message", "image"])  # ヘッダー行
    
    for comment in data["comments"]:
        writer.writerow([
            comment["id"],
            comment["from_user"]["name"],
            comment["message"],
            comment["from_user"].get("image", "")
        ])

print(f"CSVファイル '{csv_file}' を作成しました。")

ここまでで配信者のコメントが取得できる。

コメント

タイトルとURLをコピーしました