Improve visual
This commit is contained in:
@@ -84,7 +84,7 @@ class BrowserService:
|
||||
# Запускаем браузер
|
||||
if proxy_config:
|
||||
async with AsyncCamoufox(
|
||||
headless=False,
|
||||
headless=True,
|
||||
geoip=True,
|
||||
humanize=True,
|
||||
exclude_addons=[DefaultAddons.UBO],
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
"""Получение числа зрителей Twitch через публичный GQL эндпоинт."""
|
||||
|
||||
import logging
|
||||
import aiohttp
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
_GQL_URL = "https://gql.twitch.tv/gql"
|
||||
_HEADERS = {
|
||||
"Client-ID": "kimne78kx3ncx6brgo4mv6wki5h1ko",
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
_QUERY = """
|
||||
query ($login: String!) {
|
||||
user(login: $login) {
|
||||
stream {
|
||||
viewersCount
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
|
||||
async def get_viewer_count(channel: str) -> int | None:
|
||||
"""
|
||||
Возвращает число зрителей (0 = оффлайн, >0 = онлайн).
|
||||
Возвращает None при ошибке запроса — статус неизвестен, не менять состояние.
|
||||
"""
|
||||
payload = {"query": _QUERY, "variables": {"login": channel.lower()}}
|
||||
try:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.post(
|
||||
_GQL_URL,
|
||||
json=payload,
|
||||
headers=_HEADERS,
|
||||
timeout=aiohttp.ClientTimeout(total=8),
|
||||
) as resp:
|
||||
data = await resp.json()
|
||||
|
||||
stream = data.get("data", {}).get("user", {}).get("stream")
|
||||
count = stream.get("viewersCount", 0) if stream else 0
|
||||
logger.info(f"Viewers on {channel}: {count}")
|
||||
return count
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"GQL request failed for {channel}: {e}")
|
||||
return None # ошибка сети — не трогаем состояние задачи
|
||||
Reference in New Issue
Block a user