import asyncio import logging import os import requests from utils.rate_limiter import cat_limiter logger = logging.getLogger(__name__) CAT_API_URL = "https://api.thecatapi.com/v1/images/search" _cat_api_key: str | None = os.getenv("CAT_API_KEY") _session = requests.Session() async def fetch_cat() -> str | None: """Получить URL случайного котика. Вернуть None при ошибке.""" await cat_limiter.acquire() headers: dict[str, str] | None = None if _cat_api_key: headers = {"x-api-key": _cat_api_key} try: response = await asyncio.to_thread( _session.get, CAT_API_URL, timeout=10, headers=headers ) response.raise_for_status() data = response.json() return data[0]["url"] except (requests.exceptions.RequestException, IndexError, KeyError) as e: logger.error("Ошибка при получении котика: %s", e) return None