Потоковый режим
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, асинхронных обёрток или долгих пайплайнов.