التقسيم لصفحات
كل القوايم بتتقسم بـ cursor: ?limit= و ?cursor= والرد { data, nextCursor }.
القوايم بترجع الأحدث الأول، صفحة صفحة:
{
"data": [
{
"id": "3EB0A1B2C3D4E5F60718",
"status": "read"
},
{
"id": "3EB0C9D8E7F6A5B40312",
"status": "delivered"
}
],
"nextCursor": "eyJ0IjoiMjAyNi0xMC0xM1QwODowMDowMC4wMDBaIn0"
}| البارامتر | المعنى |
|---|---|
limit | المعنىمن 1 لـ 100، الافتراضي 25 (مستلمي الحملة: 1–500، الافتراضي 50). غير كده 400 PAGINATION_LIMIT_INVALID. |
cursor | المعنىالـ nextCursor من الصفحة اللي قبلها زي ما هو. أي تعديل فيه بيرد 400 PAGINATION_CURSOR_INVALID. |
nextCursor: null معناها إنك وصلت لآخر صفحة. الـ cursor مقفول: متبنيهوش ومتفكهوش. العناصر اللي بتتضاف وانت بتقلّب مش بتزحزح أو تكرر الصفحات الجاية.
قراءة كل الصفحات
import os, requests
def all_messages(**filters):
cursor = None
while True:
params = {"limit": 100, **filters, **({"cursor": cursor} if cursor else {})}
res = requests.get("https://mursilat.com/api/v2/messages",
headers={"Authorization": f"Bearer {os.environ['WASLA_API_KEY']}"},
params=params, timeout=30)
res.raise_for_status()
page = res.json()
yield from page["data"]
cursor = page["nextCursor"]
if not cursor:
break