Как отследить начало стрима на твиче python

Рейтинг: 0Ответов: 1Опубликовано: 21.06.2023

Я делаю бота в дискорде, который должен уведомлять о начале стрима. В данном случае я не смог найти документации на твич апи и похожих тем с ответом тоже. Как возможно отслеживать начало стрима на твиче?

Ответы

▲ 1Принят

Вот часть кода из моего бота. Имена переменных вместо settings[] и session[] нужно подставить свои.

Запрос статуса начала и окончания стрима:

response = requests.get(f"https://api.twitch.tv/helix/streams?user_login={settings['twitch']['channel']}", 
                        headers={
                            'Client-ID': settings['twitch']['client_id'],
                            'Authorization': 'Bearer ' + session['twitch_api_access_token']
                        }
)
if response.status_code == 200:
    data = response.json()
    if len(data['data']) > 0:
        if not session['twitch_streaming']:
            print("Стрим начался")
            #
            # Действия по началу стрима
            #
        session['twitch_streaming'] = True
    else:
        if session['twitch_streaming']:
            print("Стрим закончился")
            #
            # Действия по окончанию стрима
            #
        session['twitch_streaming'] = False
else:
    print(f'task_twitch_job Error: {response.status_code}')

Вначале запрашивается информация о стриме используя Twitch API. Далее если ответ 200 и есть полезные данные, то идет обработка. Код должен периодически запускаться, например отдельной задачей через AsyncIO. Чаще 10-15 секунд код нет смысла запускать, т.к. данные кэшируются на серверах и обновляются с задержкой. Кроме того, при запросе возвращается другая полезная информация о стриме, как например: текущее описание стрима, кол-во зрителей, игра/категория и пр.

При запросе на Twitch API используется Access Token, который можно получить используя запрос на OAuth, примерно следующим кодом:

response = requests.post(
    'https://id.twitch.tv/oauth2/token',
    data={
        'client_id': settings['twitch']['client_id'],
        'client_secret': settings['twitch']['client_secret'],
        'grant_type': 'client_credentials'
    }
)
if response.status_code == 200:
    response_json = response.json()
    session['twitch_api_access_token'] = response_json['access_token']

Токен выдается примерно на 60 суток, и если бот работает дольше, то его нужно периодически обновлять. Точное время существования токена в секундах отправляется в ответе на запрос. По идее, нужно еще делать Revoke старого токена если его время еще не вышло, но по большей части это лишнее.

client_id и client_secret можно получить зарегистрировав программу на https://dev.twitch.tv/console/apps При регистрации категорию лучше всего указывать Website Integration, а Redirect URL можно оставить localhost он не используется при запросе.