Инкрементальная синхронизация
Тянуть только новое и изменённое через курсор updated_after.
Чтобы держать свою копию отзывов в актуальном состоянии, не перечитывайте всё
подряд. Используйте курсор updated_after — он возвращает только записи,
изменившиеся у нас после указанного момента: новые отзывы, а также прежние, у
которых появился ответ объекта, фото или пометка удаления.
Ось updated_at
У каждого отзыва есть updated_at (UTC) — момент последнего изменения записи в
Rewio. Курсор updated_after фильтрует по этой оси. Не путайте с review_date
(дата публикации на площадке, местное время) и с диапазоном published_from/to.
Алгоритм
- Первый прогон: скачайте всё постранично, запомните максимальный
updated_at. - Следующие прогоны: передавайте этот максимум в
updated_after, обрабатывайте только пришедшее, снова обновляйте курсор.
import requests
BASE = "https://api.rewio.ru/v2"
HEADERS = {"X-API-Key": "hrev_ВАШ_КЛЮЧ"}
def sync(group_id, cursor=None):
"""Возвращает (обработанные_отзывы, новый_курсор)."""
params = {"group_id": group_id, "limit": 100, "offset": 0,
"sort_by": "date", "sort_order": "desc"}
if cursor:
params["updated_after"] = cursor # ISO 8601 UTC, напр. 2026-07-01T00:00:00
seen, newest = [], cursor
while True:
r = requests.get(f"{BASE}/reviews", headers=HEADERS, params=params)
r.raise_for_status()
page = r.json()
for rev in page["data"]:
seen.append(rev)
if newest is None or rev["updated_at"] > newest:
newest = rev["updated_at"]
if not page["has_next"]:
break
params["offset"] += params["limit"]
return seen, newest
# первый прогон
items, cursor = sync(20)
# ... сохраните cursor у себя ...
# следующий прогон (через N минут/часов)
new_items, cursor = sync(20, cursor)
print(f"новых/изменённых: {len(new_items)}")Курсор храните у себя (в своей БД/конфиге). API не хранит вашу позицию.
Берите значение updated_at из полученных записей — так вы не пропустите ничего
на границе.
Когда лучше вебхуки
updated_after — это pull-модель: вы сами решаете, когда опросить. Если нужна
реакция в момент появления отзыва без опроса — подпишитесь на
вебхуки: Rewio сам пришлёт пуш после каждого обхода.
Часто оба подхода совмещают: вебхук как триггер, updated_after как надёжная
дозагрузка (на случай пропущенной доставки).