Как реализовать поиск по кириллическим запросам в 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
→ Ссылка
- Используйте 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:
# Обработка ответа
- Отправляйте правильный 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"
}
}
}]
- Обрабатывайте результаты:
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"]
# Обработка данных видео