Пагинация
Длинные списки — каталог каналов и посты канала — отдаются страницами по курсору.
Как это устроено
limit— сколько строк на странице: от 1 до 100, по умолчанию 50.- В ответе два поля:
results— строки страницы,next— готовая ссылка на следующую страницу.nullвnext— страниц больше нет. - Берите ссылку из
nextцеликом. Курсор в ней закодирован и помнит сортировку и фильтры — собирать его самому не нужно. - Курсор устойчив к новым данным: посты, которые появились, пока вы листаете, не сдвигают страницы и не дают повторов.
- Каждая страница — отдельный запрос и стоит столько же единиц, сколько метод.
Пример: все посты канала
import requests
# первая страница — до 100 постов
URL = "https://api.datool.ru/v1/max/channels/@citynews/posts/?limit=100"
HEADERS = {"Authorization": "Bearer dtk_…"}
posts = []
while URL:
page = requests.get(URL, headers=HEADERS, timeout=30).json()
posts += page["results"]
# None — страниц больше нет
URL = page["next"]
Без страниц
Справочники рубрик и территорий, статистика по дням и список вебхуков отдаются целиком. Каталог с параметром ids (до 100 номеров) — тоже без страниц: карточки идут в порядке запроса.