見出し画像

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による正規の方法でのコメント取得はできないみたいです

次:


この記事が気に入ったらサポートをしてみませんか?