Как реализовать поиск по кириллическим запросам в Twitch API?

Я разрабатываю веб-приложение, которое использует Twitch API для поиска стримов и VOD. Столкнулся с проблемой: поиск по кириллическим запросам (например, "моб психо 100") не возвращает результатов через API, хотя на самом сайте Twitch такой поиск работает нормально.

Проблема в том, что когда я ввожу "моб психо 100", я хочу получить русскоязычные VOD с этим аниме, а не англоязычные каналы с названиями вроде "mobpsycho100". Как правильно реализовать поиск по кириллическим запросам, чтобы он работал так же, как на самом сайте Twitch?

Я также заметил, что на самом Twitch URL для поиска выглядит так: https://www.twitch.tv/search?term=Моб%20Психо%20100


Ответы (1 шт):

Автор решения: Fedor Pasynkov
  1. Используйте GraphQL API вместо Helix API:
async with aiohttp.ClientSession() as session:
    async with session.post(
        "https://gql.twitch.tv/gql",
        headers={
            "Client-ID": "kimne78kx3ncx6brgo4mv6wki5h1ko",  # Анонимный клиент ID Twitch
            "Content-Type": "text/plain;charset=UTF-8"
        },
        json=graphql_query
    ) as response:
        # Обработка ответа
  1. Отправляйте правильный GraphQL запрос:
graphql_query = [{
    "operationName": "SearchResultsPage_SearchResults",
    "variables": {
        "platform": "web",
        "query": query,  # Прямая передача кириллического запроса
        "options": {
            "targets": None,
            "shouldSkipDiscoveryControl": False
        },
        "requestID": str(uuid.uuid4()),
        "includeIsDJ": True
    },
    "extensions": {
        "persistedQuery": {
            "version": 1,
            "sha256Hash": "f6c2575aee4418e8a616e03364d8bcdbf0b10a5c87b59f523569dacc963e8da5"
        }
    }
}]
  1. Обрабатывайте результаты:
data = await response.json()
search_data = data[0]["data"]["searchFor"]

# Обрабатываем каналы
if "channels" in search_data:
    for edge in search_data["channels"]["edges"]:
        channel = edge["item"]
        # Обработка данных канала

# Обрабатываем игры
if "games" in search_data:
    for edge in search_data["games"]["edges"]:
        game = edge["item"]
        # Обработка данных игры

# Обрабатываем видео
if "videos" in search_data:
    for edge in search_data["videos"]["edges"]:
        video = edge["item"]
        # Обработка данных видео
→ Ссылка