Web Fetch API

Readable content from any web page, in markdown format.

Client
POST /web-fetch
Markdown Output

Web Fetch API คืออะไร

API สำหรับดึงเนื้อหาหลักจากหน้าเว็บไซต์ แล้วแปลงเป็น Markdown

ใช้งานง่าย ไม่ซับซ้อน แค่ส่ง URL เว็บไซต์เข้ามา

เหมาะกับงาน RAG

Web Fetch API คือบริการดึงเนื้อหาหลักจากหน้าเว็บไซต์ แล้วแปลงเป็นไฟล์ Markdown เท่านั้น (Markdown-only output). เหมาะกับงาน RAG / AI / Knowledge Ingestion ที่ต้องการโครงสร้างข้อความอ่านง่าย ป้อนเข้าโมเดลได้ทันที

API นี้ออกแบบให้ใช้งานง่าย: ส่ง URL เดี่ยวหรือหลาย URL ในครั้งเดียว ระบบจะดึงเนื้อหาให้พร้อม metadata ขั้นพื้นฐาน เช่นtitle และเวลาที่ดึงข้อมูลสำเร็จ โดยไม่บังคับรูปแบบอื่นนอกจาก Markdown

หวัดดี! ถามไรหน่อยดิ แชทบอทตัวนี้มีคู่แข่งมั้ยอ่ะ https://example.com/blog/682...
ขอค้นแป๊บนะครับ
อ่านเว็บเสร็จแล้ว — ดูผลลัพธ์
# GearMind แชทบอทสุดเจ๋ง
- จุดเด่น: โฟกัสงานเฉพาะทาง, เน้น RAG
- กลุ่มเปรียบเทียบ: โซลูชันทั่วไป/โอเพนซอร์สบางตัว
- ....
โอ้ ดูจากเนื้อหาแล้ว คู่แข่งโดยตรงมีไม่มากครับ เน้นใช้งานเฉพาะทางมากกว่า และสามารถเทียบได้กับโซลูชันทั่วไปเพียงไม่กี่ตัว

เริ่มต้นใช้งาน

คุณสามารถเข้าถึง Web Fetch API ได้ง่ายๆ เพียงทำตามขั้นตอนนี้

1. ขอ API Key

2. เรียกใช้งาน

API ของเราเป็น REST API ที่รองรับการส่ง URL แบบ Single หรือ Batch (ส่งหลาย URL ในครั้งเดียว) ได้อย่างง่ายดาย

ตัวอย่าง cURL แบบ Single URL

ใช้เมื่อคุณต้องการดึงข้อมูลจาก 1 URL ต่อคำขอ เหมาะกับงานตรวจสอบทีละหน้า

Terminal
# === ตัวอย่างการเรียกใช้งาน API (Single URL) ===
curl -sS -X POST https://api.mengsokool.space/web-fetch \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "url": "https://example.com"
  }'
  • Header Content-Type: application/json  ระบุว่ากำลังส่ง JSON
  • Header Authorization: Bearer YOUR_API_TOKEN  ใช้ Token สำหรับยืนยันตัวตน
  • ใน payload ระบุ url เป็น string เดี่ยว

ตัวอย่าง cURL แบบ Batch URLs

ใช้เมื่อคุณต้องการดึงข้อมูลหลาย URL ในครั้งเดียว เหมาะกับงานรวบยอด ประหยัดจำนวนรอบคำขอ

Terminal
# === ตัวอย่างการเรียกใช้งาน API (Batch URLs) ===
curl -sS -X POST https://api.mengsokool.space/web-fetch \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
    "url": [
      "https://example.com",
      "https://example.org",
      "https://example.net"
    ]
  }'
  • โครงสร้าง Header และวิธีส่งเหมือน Single แต่รูปแบบฟิลด์แตกต่าง
  • ใน payload ระบุ url เป็น array ของ string เช่น ["https://a.com","https://b.com"]
  • ระบบจะประมวลผลทีละรายการและรวมผลลัพธ์ให้ในการตอบกลับเพียงครั้งเดียว

ตัวอย่างการใช้ในภาษาหรือเครื่องมืออื่นๆ

หากคุณอยากเห็นตัวอย่างการใช้งาน Web Fetch ไม่ว่าแบบ single หรือแบบ fetch เพียงแค่พิมพ์คำขอ แล้วดูผลลัพธ์ที่ถูกพิมพ์กลับมาในเทอร์มินัล

Terminal (cURL)
พิมพ์บอกภาษาที่ต้องการ เช่น: python, javascript, go, rust, php, ruby หรืออธิบาย use case แล้วกด Enter เพื่อให้ AI สร้างโค้ดตัวอย่าง

3. ผลลัพธ์ตัวอย่าง

ผลลัพธ์ที่ได้จาก /web-fetch เป็น Markdown-only ภายในฟิลด์data.content โดยไม่มีรูปแบบอื่น เช่น HTML/JSON ของเนื้อหา และสำหรับ batch จะส่งกลับเป็น Array ที่อาจมีทั้งsuccess และ error ปะปนกัน

ผลลัพธ์
[
  {
    "status": "success",
    "data": {
      "title": "หัวข้อของหน้าเว็บ",
      "content": "# หัวข้อ ย่อหน้าแรกของบทความ ... ## หัวข้อย่อย - รายการที่ 1 - รายการที่ 2",
      "url": "https://example.com",
      "extracted_at": "2025-01-01T00:00:00.000Z",
      "processing_time": 324
    }
  },
  {
    "status": "error",
    "url": "https://unsafe.example",
    "code": "E_FETCH_FAILED",
    "message": "Failed to fetch content",
    "processing_time": 120
  }
]
Fieldคำอธิบาย
statusสถานะของการดึงข้อมูล (success หรือ error)
dataข้อมูลที่ดึงได้ (มีเฉพาะกรณี success)
urlURL ของหน้าที่ดึงข้อมูล
data.contentสตริง Markdown ล้วน ๆ (ไม่มี HTML/RTF/Doc)
extracted_atเวลาที่ดึงข้อมูลสำเร็จในรูปแบบ ISO 8601
processing_timeเวลาที่ใช้ประมวลผลหน้านั้น หน่วยเป็นมิลลิวินาที
codeรหัสข้อผิดพลาดแบบย่อ (เช่น E_NO_KEY) กรณี error
messageคำอธิบายข้อผิดพลาดแบบอ่านง่าย กรณี error

4. ตัวอย่างโปรเจค

แนวทางการนำ Web Fetch API ไปใช้ในงานจริงเพื่อให้เห็นภาพชัดเจนขึ้น

5. ข้อควรรู้

  • จำกัดการเรียกใช้งาน 50 ครั้งต่อนาที ต่อ Token
  • ผลลัพธ์จะถูกแคชเก็บไว้ 1 นาที หากเรียกซ้ำในช่วงเวลานั้นอาจได้ผลลัพธ์เดิม
  • ไม่มีการตัดเนื้อหา (ไม่มี max length — ดึงจนจบ)
  • ต้องส่ง Authorization Header ทุกครั้ง โดยใส่รูปแบบAuthorization: Bearer YOUR_API_TOKENซึ่งสามารถขอ Token ได้จากส่วน "ขอ API Key" ด้านบน
  • หากเกิด error เช่น "Failed to fetch content" ให้ตรวจสอบ URL ว่าสามารถเข้าถึงได้และไม่ถูกบล็อค
  • เนื้อหาเป็น Markdown เท่านั้น ไม่มีฟอร์แมตอื่น
  • เว็บไซต์ที่บล็อกบอทหรือใช้ dynamic rendering อาจดึงไม่สำเร็จ

6. รหัสข้อผิดพลาด

API ใช้ HTTP status code ควบคู่กับ JSON error format ที่ประกอบด้วย status = "error", code, และ message สำหรับอธิบายสาเหตุอย่างสั้น

HTTP 401Unauthorized
API Error

ไม่ได้ส่ง API Key หรือ Token ไม่ถูกต้อง

Causes

  • ไม่มี Header Authorization
  • ใช้รูปแบบไม่ถูกต้อง เช่น ไม่ได้ขึ้นต้นด้วย Bearer
  • Token หมดอายุหรือไม่ถูกต้อง

Solutions

  • เพิ่ม Header: Authorization: Bearer YOUR_API_KEY
  • ตรวจสอบว่าใช้ Key ล่าสุด และสะกดถูกต้อง
  • หากเพิ่งสร้าง Key ใหม่ ให้ลองใช้อีกครั้ง

Example Response

Error Response
{
  "status": "error",
  "code": "E_NO_KEY",
  "message": "Missing or invalid API key in Authorization header."
}
HTTP 403Forbidden
API Error

ไม่มีสิทธิ์เข้าถึงทรัพยากร หรือ Key ถูกระงับ

Causes

  • Token ถูกจำกัดสิทธิ์สำหรับ Endpoint นี้
  • บัญชี/Key ถูกระงับการใช้งานชั่วคราว

Solutions

  • ตรวจสอบสิทธิ์ของ Key ว่ารองรับ Endpoint นี้
  • ติดต่อผู้ดูแลระบบหากคิดว่าเป็นความผิดพลาด

Example Response

Error Response
{
  "status": "error",
  "code": "E_FORBIDDEN",
  "message": "Permission denied for this resource."
}
HTTP 404Not Found
API Error

ไม่พบปลายทางหรือทรัพยากรที่ระบุ

Causes

  • URL ปลายทางไม่ถูกต้อง หรือหน้าเว็บถูกลบ
  • เส้นทาง API ไม่ถูกต้อง

Solutions

  • ตรวจสอบ URL/Endpoint ว่าสะกดถูกต้อง
  • ตรวจสอบการ Redirect/บล็อคจากปลายทาง

Example Response

Error Response
{
  "status": "error",
  "code": "E_NOT_FOUND",
  "message": "Target resource not found."
}
HTTP 405Method Not Allowed
API Error

Method ที่ใช้ไม่รองรับสำหรับ Endpoint นี้

Causes

  • เรียกด้วย GET/PUT/DELETE ในขณะที่ Endpoint รองรับเฉพาะบาง Method

Solutions

  • ตรวจสอบเอกสารว่า Endpoint รองรับ Method ใด (เช่น POST)
  • เปลี่ยนมาใช้ Method ที่รองรับ

Example Response

Error Response
{
  "status": "error",
  "code": "E_METHOD",
  "message": "Method not allowed. Please use POST."
}
HTTP 429Too Many Requests
API Error

เกินโควตาการใช้งานที่กำหนด

Causes

  • เรียกใช้งานเกิน 50 ครั้งต่อนาที ต่อ Token

Solutions

  • เพิ่มระยะห่างระหว่างคำขอ หรือทำ Retry แบบ Exponential Backoff
  • รวมคำขอที่ซ้ำหรือรอให้แคชหมดอายุ (1 นาที)

Example Response

Error Response
{
  "status": "error",
  "code": "E_RATE_LIMIT",
  "message": "Rate limit exceeded: 50 requests per minute per token."
}
HTTP 500Internal Server Error
API Error

ข้อผิดพลาดภายในระบบ

Causes

  • เหตุขัดข้องภายในที่ไม่คาดคิด
  • ปลายทางตอบกลับผิดรูปแบบ/ไม่เสถียร

Solutions

  • ลองใหม่ภายหลัง และทำ Retry ด้วย Backoff
  • เก็บรายละเอียด error เพื่อแจ้งผู้ดูแลระบบ

Example Response

Error Response
{
  "status": "error",
  "code": "E_INTERNAL",
  "message": "Unexpected server error. Please try again later."
}

7. การใช้งานขั้นสูง

  • Batch เพื่อลดจำนวนคำขอ: รวมหลาย URL ในคำขอเดียวเพื่อลด round-trip และปริมาณการเรียก API ภายใต้ข้อจำกัด rate limit
  • รวมผลลัพธ์ต่างสถานะ: กรณี batch อาจมีทั้ง success และ error ในลิสต์เดียวกัน ให้ตรวจสอบฟิลด์ status ของแต่ละรายการ
  • Retry แบบเลือกกรณี: แนะนำให้ retry เมื่อพบโค้ดE_RATE_LIMIT หรือข้อผิดพลาดเครือข่าย ด้วย exponential backoff (เช่น 1s, 2s, 4s) และหยุด retry เมื่อพบE_FORBIDDEN หรือ E_NO_KEY