# ค้นหาโพสต์ X ของ Felo

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

เลือกการทำงานให้ตรงกับข้อมูลที่คุณต้องการ ทั้งห้าเอนด์พอยต์ใช้ POST และส่งคืน JSON ที่ราก โดยไม่มี wrapper `data` ร่วมกัน

ตัวอย่างทั้งหมดใช้ `FELO_API_KEY` จาก [ภาพรวม](https://openapi.felo.ai/th/docs/data-api/guides/felo-overview.md) การเรียกใช้ใช้ **ยอดคงเหลือบนแพลตฟอร์ม** ไม่ใช่ Felo Pro credits ตัวอย่างการตอบกลับมีไว้เพื่อประกอบการอธิบาย; เนื้อหาจริงและฟิลด์เสริมอาจแตกต่างกัน





## 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 | ไม่ | cursor สำหรับการแบ่งหน้า, ยาวได้ถึง 4,000 อักขระ |
| `since_time` | integer or string | ไม่ | เวลาเริ่มต้น; ใช้ Unix seconds เพื่อให้ค่าเป็นตัวเลขที่ชัดเจน |
| `until_time` | integer or string | ไม่ | เวลาสิ้นสุด; ใช้ Unix seconds ไม่ใช่ milliseconds |

```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`; replies และโพสต์ที่อ้างถึง/รีทวีตอาจซ้อนอยู่ Treat IDs as strings.

### ขีดจำกัดจำนวนผลลัพธ์

`limit` คือเป้าหมาย ไม่ใช่การรับประกัน การใช้งานปัจจุบันใช้เป้าหมายอย่างน้อย 20: เป้าหมาย 20 จะอ่าน upstream page หนึ่งหน้า; เป้าหมายที่มากกว่าจะดึงอัตโนมัติได้สูงสุด 50 หน้า เวลาเริ่มต้นจะถูกตรวจสอบก่อนแต่ละหน้า และจะไม่ดึงหน้าต่อไปเมื่อเกิน 60 วินาที upstream request ที่กำลังดำเนินการอยู่ยังอาจใช้เวลาได้ ดังนั้นนี่ไม่ใช่ overall HTTP timeout

การเก็บข้อมูลยังหยุดเมื่อถึงเป้าหมาย upstream ไม่มีหน้าถัดไป หน้าว่าง หรือ 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` นับอาร์เรย์ที่สอดคล้องกันใน response ปัจจุบัน: โพสต์ระดับบนสำหรับคำถามโพสต์ หรือ replies ภายในแต่ละรายการผลลัพธ์สำหรับคำถาม replies มันไม่ใช่จำนวนแมตช์ทั่วโลก จำนวน replies ทั้งหมดของโพสต์ หรือจำนวนที่คิดค่าบริการสุดท้าย

1. ส่งคำขอแรกโดยไม่ใส่ `cursor`.
2. อ่าน `has_next` และ `next_cursor` จาก response สำหรับ replies ให้อ่านในแต่ละรายการผลลัพธ์
3. หากมีหน้าถัดไปและ cursor ไม่ว่าง ให้ส่งค่าเดิมโดยไม่เปลี่ยนพร้อมกับคำค้นหาเดิม สำหรับชุด replies ให้ดำเนินต่อทีละโพสต์
4. หยุดเมื่อไม่มีหน้าถัดไป เมื่อ cursor ซ้ำ หรือเมื่อถึงขีดจำกัดหน้าหรือค่าใช้จ่ายของคุณ

เมตาดาตาการแบ่งหน้าสะท้อน response upstream ล่าสุด; collection ที่ส่งคืนอาจถูกตัดที่ขีดจำกัดผลลัพธ์ แม้แต่ `has_next=false` ก็ไม่รับประกันว่าประวัติ X หรือ replies ทั้งหมดถูกดึงแล้ว แสดงจำนวนที่ส่งคืนจริงแทนที่จะติดป้ายชุดผลลัพธ์ที่มีขอบเขตว่าเป็นข้อมูลทั้งหมดที่มีอยู่

แต่ละหน้าที่สำเร็จอาจมีค่าบริการได้ การทำงานทั้งห้านี้คิดค่าบริการตามผลลัพธ์ที่ส่งคืน ไม่ใช่ค่าธรรมเนียมต่อคำขอแบบคงที่ replies ที่ซ้อนกันและระเบียนที่ส่งคืนอื่นๆ อาจมีผลต่อจำนวนที่คิดค่าบริการ; อย่าประเมินต้นทุนจากความยาวของอาร์เรย์ระดับบนเพียงอย่างเดียว ตรวจสอบ [ราคาปัจจุบัน](https://openapi.felo.ai/api/v1/data/prices) และการใช้งานในคอนโซล ฟิลด์ออบเจ็กต์ฉบับสมบูรณ์อยู่ใน [OpenAPI schema](https://openapi.felo.ai/api/v1/data/openapi.json)
