Сразу обозначу, что пост для новичков и тех, кто ещё не может бегло читать документацию по API, а то набегут печенеги крякая про бесполезность поста.
Создание приложения Twitch
Переходим в консоль разработчика и создаём Application. Тут стоит отметить, что Twitch подогнал русский язык, но корявый. Например нужная вкладка на русском называется “Заявки”, поэтому лучше сразу переключиться на английский, сделать это можно на самом Twitch, а не в консоли.
Тут всё просто:
Name – даём произвольное имя нашему приложению.
OAuth Redirect URLs – как я понял на случай, если вы хотите редиректить авторизации с вашем токеном на ваш сервер. Мне это не нужно, поэтому пишу http://localhost.
Category – выбираем категорию нашего приложения. У меня это чат-бот.
Получение токена
Создав приложение нажимаем Manage рядом с названием.
Тут у нас есть:
Client ID – это ID вашего приложения, он неизменный.
Client Secret – это ключ для авторизации в TwitchAPI, его необходимо записать, так как просмотреть полученный ключ невозможно. Однако генерировать их можно вроде бесконечно.
Копируем эти данные и идём в нашу среду разработки. У меня Telegram-бот, которого я создал по ТЗ дтфэра, он позволяет собрать всех стримеров, которых ты отслеживаешь в одном месте и получать умные уведомления, которые в реальном времени отображают длительность стрима, название, категорию. Уведомления также можно подключить для Telegram-каналов.
В первую очередь создаём переменные, которые будут хранить в себе наши ключи.
from dotenv import load_dotenv
import os
load_dotenv()
twitch_id = os.getenv(‘CLIENT_ID’)
twitch_key = os.getenv(‘CLIENT_SECRET’)
Далее создаём функцию get_twitch_token,в которой как вы поняли из названия мы будем получать токен для авторизации в TwitchAPI:
# функция получает токен для запросов Twitch
async def get_twitch_token():
try:
response = requests.post(
f”https://id.twitch.tv/oauth2/token?client_id={twitch_id}&client_secret={twitch_key}&grant_type=client_credentials”
)
response.raise_for_status()
return (response.json())[“access_token”]
except Exception as e:
log.logger.exception(f”Ошибка в функции get_twitch_token: {e}”)
return None
Данная функция универсальная и подойдёт не только для ботов. Можете просто копировать её и подставлять свои ключи.
Например, у нас есть задача проверить существует ли стример. В моём боте она лежит в основе, так как пользователь может указать юзернейм или ссылку с ошибкой, в итоге в базу данных попадёт несуществующий юзернейм и бот будет постоянно сталкиваться с ошибкой 200.
Вот так выглядит такая функция:
# функция проверяет существует ли username введённый юзером
async def check_twitch_streamer(username):
token = await get_twitch_token() – вызываем нашу функцию, которая получает токен
headers = {“Client-ID”: twitch_id, “Authorization”: f”Bearer {token}”} – формируем запрос
url = f”https://api.twitch.tv/helix/users?login={username}” – адрес куда направляем запрос
response = requests.get(url, headers=headers) – сам запрос
if response.status_code == 200:
data = response.json()
if len(data[“data”]) > 0:
return True
return False
Если запрос возвращает код 200, то такого стримера не существует.
Результат:
О том какие данные о стриме можете получить таким запросом.
• Название стрима.
• Категория стрима.
• Превью. То же, что отображается на самом Твиче.
• Время начала стрима. Тут интересный момент, насколько я понял, Твич не ведет данные сколько стрим идёт, таймер на самом Твиче подсчитывает основываясь на времени начала стрима и текущем времени. Мой бот делает так же.
• Количество зрителей.
Это что касается информации о стриме, также есть запросы, которые позволяют получить инфу о канале.
Для наглядности:
if data[“data”]:
stream_title = data[‘data’][0][‘title’]
stream_category = data[‘data’][0][‘game_name’]
preview = data[‘data’][0][‘thumbnail_url’]
started_time = datetime.datetime.fromisoformat(
data[‘data’][0][‘started_at’].replace(“Z”, “+00:00”))
current_time = datetime.datetime.now(datetime.timezone.utc)
stream_time = current_time – started_time
stream_times[username] = stream_time
message = f’Название: {stream_title}’ \
f’\nКатегория: {stream_category}’ \
f’\n\nСтрим идёт: {str(stream_time).split(“.”)[0]}’
На этом всё. Я планирую сделать серию постов про разработку Telegram-ботов. Поэтому буду рад фидбеку. Также, если юзаете Твич, рекомендую ознакомиться с ботом: