33 lines
977 B
Python
33 lines
977 B
Python
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
|