Есть ли способ проверить, что стример работает на twitch с api или без него?

Разрабатываю бота Discord в py. Но я не могу понять, как проверить, находится ли пользователь на Twitch. Когда я проверяю заголовок их потока. Я мог бы заставить бота объявлять потоки, если бы в нем было слово stream. Но бот продолжал проверять это снова и снова, нарушая канал. Какое еще есть решение, чтобы проверить, работает ли стример? Я не мог понять, как работает api


person Kirito    schedule 02.07.2020    source источник


Ответы (1)


Распространенный подход с использованием библиотеки запросов Python, которая может сообщить вам ЕСЛИ, что пользователь активен:

import requests

CLIENT_ID = 'my-twitch-client-id'
OAUTH_TOKEN = 'my-twitch-oauth-token'

def is_user_live(username):
    endpoint = 'https://api.twitch.tv/helix/streams'
    my_headers = {
        'Client-ID': CLIENT_ID,
        'Authorization': f'Bearer {OAUTH_TOKEN}'
    }
    my_params = {'user_login': username}
    response = requests.get(endpoint, headers=my_headers, params=my_params)
    data = response.json()['data']
    if len(data) == 0:
        return False
    return data[0]['type'] == 'live'

Я бы порекомендовал вашему боту подписаться на веб-перехватчик событий. при инициализации бота. Вам нужно будет создать веб-сервер для обработки POST-запросов, которые Twitch будет отправлять вам, он сможет сообщить вам, КОГДА пользователь выходит в эфир. Грубый пример с использованием Flask:

import requests
import json
from flask import request

CLIENT_ID = 'my-twitch-client-id'
OAUTH_TOKEN = 'my-twitch-oauth-token'
MY_SECRET = 'an-arbitrary-secret'

app = your_flask_app()

@app.route('/my_webhook/<user_id>')
def my_webhook(user_id):
    check_secret(request) # sha256 of your secret and content-length
    data = request.get_json()['data']
    if len(data) > 0:
       your_bot.user_is_live(data)
    else:
       your_bot.user_is_offline(data)
    return 'OK'

def subscribe_to_webhook(user_id):
    endpoint = 'https://api.twitch.tv/helix/webhooks/hub'
    topic = 'https://api.twitch.tv/helix/streams'
    my_headers = {
        'Client-ID': CLIENT_ID,
        'Authorization': f'Bearer {OAUTH_TOKEN}'
    }
    payload = {
        'hub.callback': f'http://my_server.url/my_webhook/{user_id}',
        'hub.mode': 'subscribe',
        'hub.topic': f'{topic}?user_id={user_id}',
        'hub.lease_seconds': 864000,
        'hub.secret': MY_SECRET
    }
    response = requests.post(endpoint, headers=my_headers, data=json.dumps(payload))
    return response.ok
person fixmycode    schedule 02.07.2020