# جستجوی پست X در Felo

POST /api/v1/data/x/tweet/search

عملیات مناسب برای داده‌ای را که نیاز دارید انتخاب کنید. هر پنج پایان‌نقطه از POST استفاده می‌کنند و JSON را در ریشه برمی‌گردانند، بدون یک پوشش مشترک `data`.

تمام نمونه‌ها از `FELO_API_KEY` از [نمای کلی](https://openapi.felo.ai/fa/docs/data-api/guides/felo-overview.md) استفاده می‌کنند. تماس‌ها از **موجودی پلتفرم** استفاده می‌کنند، نه اعتبارات Felo Pro. نمونه‌های پاسخ صرفاً نمایشی هستند؛ محتوای زنده و فیلدهای اختیاری متفاوت‌اند.





## 4. جستجوی پست‌ها

`POST /api/v1/data/x/tweet/search`

| فیلد | نوع | الزامی | معنا |
|---|---|---|---|
| `query` | string | بله | متن جستجو، 1 تا 1,000 نویسه |
| `query_type` | string | خیر | `Latest` (پیش‌فرض) یا `Top` |
| `limit` | integer | خیر | 1 تا 1,000؛ پیاده‌سازی فعلی حداقل 20 را استفاده می‌کند، با پیش‌فرض 20 |
| `cursor` | string | خیر | نشانگر صفحه‌بندی، تا 4,000 نویسه |
| `since_time` | integer or string | خیر | زمان شروع؛ برای مقدار عددیِ بدون ابهام از ثانیه‌های یونیکس استفاده کنید |
| `until_time` | integer or string | خیر | زمان پایان؛ از ثانیه‌های یونیکس استفاده کنید، نه میلی‌ثانیه |

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/tweet/search" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"retrieval augmented generation","query_type":"Latest","limit":20}'
```

پاسخ شامل `tweets`، `total`، `has_next` و `next_cursor` است. اشیای پست شامل `id`، `content`، `author`، `created_at` و `metrics` هستند؛ پاسخ‌ها و پست‌های نقل‌قول‌شده/بازنشرشده ممکن است تودرتو باشند. شناسه‌ها را به‌صورت رشته در نظر بگیرید.

### محدودیت‌های تعداد نتیجه

`limit` یک هدف است، نه تضمین. پیاده‌سازی فعلی از هدفی حداقل 20 استفاده می‌کند: هدف 20 یک صفحه بالادستی را می‌خواند؛ اهداف بزرگ‌تر به‌طور خودکار تا 50 صفحه را واکشی می‌کنند. زمان سپری‌شده پیش از هر صفحه بررسی می‌شود و پس از فراتر رفتن از 60 ثانیه، صفحه دیگری واکشی نمی‌شود. یک درخواست بالادستی در حال اجرا هنوز می‌تواند زمان ببرد، بنابراین این یک زمان‌اِتمام کلی HTTP نیست.

گردآوری همچنین وقتی هدف برآورده شود، صفحه بعدی بالادست وجود نداشته باشد، یک صفحه خالی باشد، یا cursor موجود نباشد متوقف می‌شود. بازگرداندن کمتر از `limit` پست به این معنا نیست که درخواست ناموفق بوده یا هر پست منطبق بازیابی شده است. پیش از ادامه، `has_next` و `next_cursor` را بررسی کنید.

```json
{
  "tweets": [{
    "id":"example-post-id",
    "content":"Example post content",
    "author":{"user_id":"example-user-id","username":"example","display_name":"Example"},
    "created_at":"2026-11-01T00:00:00Z",
    "metrics":{},
    "replies":[]
  }],
  "total":1,
  "has_next":false,
  "next_cursor":null
}
```



## صفحه‌بندی و کنترل هزینه

`total` آرایه متناظر را در پاسخ فعلی می‌شمارد: پست‌های سطح بالا برای پرس‌وجوهای پست، یا پاسخ‌ها درون هر ورودی نتیجه برای پرس‌وجوهای پاسخ. این یک شمارش جهانیِ تطابق‌ها، تعداد کامل پاسخ‌های یک پست، یا شمارش نهایی قابل‌صورتحساب نیست.

1. درخواست اول را بدون `cursor` بفرستید.
2. `has_next` و `next_cursor` را از پاسخ بخوانید. برای پاسخ‌ها، آن‌ها را روی هر ورودی نتیجه بخوانید.
3. اگر صفحه دیگری وجود دارد و cursor خالی نیست، همان را بدون تغییر با همان پرس‌وجو بفرستید. برای یک دسته پاسخ، هر پست را جداگانه ادامه دهید.
4. وقتی صفحه بعدی وجود ندارد، وقتی cursor تکرار می‌شود، یا وقتی سقف صفحه یا هزینه خودتان به پایان می‌رسد، متوقف شوید.

فراداده صفحه‌بندی نشان‌دهنده آخرین پاسخ بالادستی است؛ مجموعه بازگردانده‌شده می‌تواند در یک سقف نتیجه کوتاه شود. حتی `has_next=false` نیز تضمین نمی‌کند که تمام تاریخچه X یا پاسخ‌ها بازیابی شده‌اند. به‌جای برچسب‌زدن یک مجموعه نتیجه محدود به‌عنوان همه داده‌های موجود، شمارش واقعی بازگردانده‌شده را نمایش دهید.

هر صفحه موفق می‌تواند هزینه‌ای در پی داشته باشد. این پنج عملیات بر اساس نتایج بازگردانده‌شده صورتحساب می‌شوند، نه یک هزینه ثابت برای هر درخواست. پاسخ‌های تودرتو و سایر رکوردهای بازگردانده‌شده می‌توانند روی شمارش صورتحساب اثر بگذارند؛ هزینه را فقط بر اساس طول آرایه سطح بالا تخمین نزنید. [قیمت‌های فعلی](https://openapi.felo.ai/api/v1/data/prices) و استفاده در کنسول را بررسی کنید. فیلدهای کامل شیء در [اسکیما OpenAPI](https://openapi.felo.ai/api/v1/data/openapi.json) موجود است.
