Разрабатываю бота Discord в py. Но я не могу понять, как проверить, находится ли пользователь на Twitch. Когда я проверяю заголовок их потока. Я мог бы заставить бота объявлять потоки, если бы в нем было слово stream. Но бот продолжал проверять это снова и снова, нарушая канал. Какое еще есть решение, чтобы проверить, работает ли стример? Я не мог понять, как работает api
Есть ли способ проверить, что стример работает на twitch с api или без него?
Ответы (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