twitch api を pythonで触ってみた① [v3.5]
twitchの提供している twitch api を利用してストリーマーのアクティブ数を取得してみました。
twitch APIを使用するためには、clientIDと秘密鍵が必要になります。twitchアカウントを持っていればdeveloperのサイトから簡単に取得できます。その辺の説明はいろいろ転がっているので、そちらをご参照ください。
実際にAPIを動かしてやってみようと思います。ただ、参考にしようと思った検索して出てくる qiitaのやり方だとうまく取得できなかったので、TwitchのRefarenceを見てみました。
async やら await やらきな臭い単語が出てきてます。もうやりたくない。
APIとかではよく使われる非同期処理用のものなのですが、twitchAPIではこれらが使われているみたいですね。twitchAPIのバージョンがv3.0以降ではこの非同期処理が使われているらしく、v2.x とは大きく毛色が変わったため、拾ってきたプログラムは動かなかったみたいですね。
とりあえず目下取得したいのは、「配信中のストリーマーの一覧」と「指定のストリーマーのアクティブ数」、ついでに「配信コメント」なんかも取得できたらしたい。といったところです。
とりあえず、それらしい関数を探します。
どうやら get_streams 関数 が現在アクティブなストリーミングの情報を取得してくれるみたいです。
この関数を使ってとりあえず日本語のアクティブ上位20件のライブ配信の情報を取得していきます。
import configparser
from typing import AsyncGenerator
from twitchAPI.twitch import Twitch
from twitchAPI.helper import first
import asyncio
import pandas as pd
import datetime
# twitchAPIの設定ファイルの読み込み
inifile = configparser.ConfigParser()
inifile.read('config.ini')
clientID = inifile.get('TwitchAPI', 'clientID')
secretID = inifile.get('TwitchAPI', 'secretID')
def save_stream(stream_dicts, fpath='./twitch_top_stream.pkl'):
df = pd.DataFrame(stream_dicts)
df['dt'] = datetime.datetime.now()
df.to_pickle(fpath)
async def twitch_get_streams():
# twitchAPIの読み込み
twitch = await Twitch(clientID, secretID)
# ストリームの一覧取得(上位20件)
streams_list = []
i = 1
async for stream in twitch.get_streams(language='ja'):
i += 1
print(stream.to_dict())
streams_list.append(stream.to_dict())
if i > 20:
break
# 読み込んだデータをpickleに保存
save_stream(streams_list)
await twitch.close()
# run this example
asyncio.run(twitch_get_streams())
リファレンスのサンプルを参考に簡単に書いてみました。
結果はこんな感じです。viewer_count で現在のアクティブも取れているので、欲しかった情報は大体取れた感じですね。
まだまだ取れそうな情報もありそうなので、次回はもう少し探ってみようかなと思います。
※ jupyter だと非同期処理がうまく働かないので動かないです
※2022年2月に v5からhelix にAPIの名前空間(データ構成)が変更になりAPIによる正規の方法でのコメント取得はできないみたいです
次:
この記事が気に入ったらサポートをしてみませんか?