Skip to content

Потоковый режим

analyze_stream() возвращает генератор, отдающий Server-Sent Events в виде Python-словарей. Используйте его, когда нужен прогресс в реальном времени без блокировки.

Базовое использование

python
for event in client.analyze_stream(
    own_page="https://example.com",
    competitors=["https://comp.com"],
    queries=["целевой запрос"],
):
    state = event.get("state")

    if state == "PROGRESS":
        pct = event.get("progress", 0)
        msg = event.get("details", {}).get("message", "")
        print(f"[{pct:3d}%] {msg}")

    elif state == "SUCCESS":
        result = event["result"]
        print("Готово!", result.keys())
        break

    elif state == "FAILURE":
        print("Ошибка:", event.get("error"))
        break

Состояния события

СостояниеОписание
PENDINGЗадача в очереди, ещё не запущена
PROCESSINGАнализ выполняется
PROGRESSОбновление прогресса с progress (0–100) и details.message
SUCCESSАнализ завершён — event["result"] содержит полный результат
FAILUREОшибка — event["error"] содержит code и message

Детали прогресса

python
event = {
    "state": "PROGRESS",
    "progress": 45,
    "details": {
        "step": "analysis_internal",
        "message": "Вычисление TF-IDF векторов"
    }
}

Пример: кастомный прогресс-бар

python
from unihra import UnihraClient

client = UnihraClient(api_key="ВАШ_КЛЮЧ")

for event in client.analyze_stream("https://mysite.com", ["https://comp.com"]):
    if event.get("state") == "PROGRESS":
        pct = event.get("progress", 0)
        bar = "█" * (pct // 5) + "░" * (20 - pct // 5)
        print(f"\r[{bar}] {pct}%", end="", flush=True)
    elif event.get("state") == "SUCCESS":
        print("\nГотово!")
        result = event["result"]
        break

Замечание

analyze() — это удобная обёртка вокруг analyze_stream(), которая блокирует выполнение до SUCCESS и опционально показывает прогресс-бар tqdm. Используйте analyze_stream() напрямую для кастомных UI, асинхронных обёрток или долгих пайплайнов.