# Extract endpoint: อ่าน URL ที่ agent ของคุณมีอยู่แล้ว

> Extract endpoint: ส่ง 1 ถึง 20 URL ที่คุณมีอยู่แล้ว และรับเนื้อหาหลักของแต่ละหน้าเป็น Markdown, 1 เครดิตต่อกลุ่ม 3 หน้าที่เริ่มอ่าน ไม่ต้อง KYC จ่ายด้วยคริปโต

- URL: https://llmwebsearch.com/th/docs/extract/
- อัปเดตล่าสุด: 2026-10-22
- ผู้เผยแพร่: LLMWebSearch (https://llmwebsearch.com)

บางครั้ง agent ก็มีลิงก์อยู่แล้ว ผู้ใช้วางลิงก์มา การค้นหาก่อนหน้าระบุลิงก์ไว้ หรือเอกสารอ้างอิงถึงลิงก์เหล่านั้น `/extract` อ่านหน้าเหล่านั้นและคืนเนื้อหาหลัก ด้วย reader เดียวกันและกฎเดียวกันกับ `/search`

**คำตอบสั้น — ฉันจะอ่านหน้าเว็บที่ฉันมี URL อยู่แล้วได้อย่างไร**

ส่ง URL สูงสุด 20 รายการไปที่ `POST https://llmwebsearch.com/api/v1/extract` **LLMWebSearch** อ่านแต่ละหน้าสาธารณะและคืนเนื้อหาหลักเป็น Markdown หรือ plain text พร้อมสถานะต่อ URL การคิดค่าบริการคือ 1 เครดิตต่อกลุ่ม 3 หน้าที่เริ่มอ่าน จาก US$1.20/1K การค้นหา ต่อเครดิตการค้นหา ณ เดือนตุลาคม 2026 robots.txt ถูกเคารพ ไม่ต้อง KYC จ่ายด้วยคริปโต

## /extract at a glance

| คุณลักษณะ | ค่า |
| --- | --- |
| Method | `POST` พร้อม JSON body |
| URL | `https://llmwebsearch.com/api/v1/extract` |
| อินพุต | `urls`: ที่อยู่ http หรือ https จำนวน 1 ถึง 20 รายการ |
| เอาต์พุต | เนื้อหาหลักต่อ URL ในรูปแบบ `markdown` (ค่าเริ่มต้น) หรือ `text` |
| การเรียกเก็บเงิน | การอ่านหน้าเว็บที่คุณมี URL อยู่แล้วใช้ 1 เครดิตต่อกลุ่ม 3 หน้าที่เริ่มอ่านและส่งกลับพร้อมเนื้อหา สูงสุด 20 URL ต่อการเรียก; URL ที่ถูกปฏิเสธหรือล้มเหลวไม่ถูกนับ |
| robots.txt | ตัวอ่านของเราเคารพ robots.txt: แนะนำตัวว่าเป็น LLMWebSearch ทำตามกฎที่เว็บไซต์เขียนไว้สำหรับมันหรือสำหรับ robots ทั้งหมด และละเว้นเนื้อหาของหน้าใดก็ตามที่มันไม่ได้รับอนุญาตให้อ่าน |
| Page reader | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## อ่านรายการ URL

`POST /api/v1/extract`

ดึงแต่ละ URL แบบขนานและคืนเนื้อหาหลักตามลำดับที่คุณส่งมา แต่ละรายการมี `content_status` ของตัวเอง ดังนั้นหน้าหนึ่งที่ถูกปฏิเสธจะไม่ทำให้การเรียกทั้งหมดล้มเหลว ตัวอย่างอ่านสามหน้า ชื่อเรื่องและค่าต่างๆ ใช้เพื่อประกอบคำอธิบาย

การยืนยันตัวตน: API key ใน header `Authorization: Bearer API_KEY`

**Request body**

| Field | Type | Required | คำอธิบาย |
| --- | --- | --- | --- |
| `urls` | string[] | ใช่ | ที่อยู่ http หรือ https จำนวน 1 ถึง 20 รายการ ที่อยู่แบบ private, local และ cloud metadata จะถูกปฏิเสธ |
| `format` | string | ไม่ | `markdown` (ค่าเริ่มต้น) หรือ `text` |
| `max_chars` | integer | ไม่ | ขีดจำกัดความยาวเนื้อหาของแต่ละหน้า 500 ถึง 50,000 ตัวอักษร ค่าเริ่มต้น 6,000 |

*ตัวอย่าง: three pages, longer content*

```json
{
  "urls": [
    "https://docs.example.com/security/key-rotation",
    "https://blog.example.org/key-rotation-checklist",
    "https://example.com/changelog"
  ],
  "max_chars": 20000
}
```

**Response** `200`

```json
{
  "credits_used": 1,
  "results": [
    {
      "url": "https://docs.example.com/security/key-rotation",
      "title": "Rotating API keys",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key...",
      "word_count": 948
    },
    {
      "url": "https://blog.example.org/key-rotation-checklist",
      "content_status": "blocked_by_robots"
    },
    {
      "url": "https://example.com/changelog",
      "title": "Changelog",
      "content_status": "ok",
      "content": "# Changelog\n\n## 2026-10-20\n\n- New export format...",
      "word_count": 2204
    }
  ]
}
```

*curl*

```bash
curl -s "https://llmwebsearch.com/api/v1/extract" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"], "max_chars": 20000}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://llmwebsearch.com/api/v1/extract",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    json={"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"]},
    timeout=60,
)
for page in resp.json()["results"]:
    print(page["url"], page["content_status"], page.get("word_count", 0))
```

*Node.js*

```javascript
const res = await fetch('https://llmwebsearch.com/api/v1/extract', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ urls: ['https://docs.example.com/security/key-rotation', 'https://example.com/changelog'] }),
});
for (const page of (await res.json()).results) console.log(page.url, page.content_status);
```

## เมื่อไหร่ควรใช้ extract แทน read ในการค้นหา

ใช้ extract เมื่อ URL ไม่ได้มาจากการค้นหาที่คุณกำลังทำอยู่ ผู้ใช้วางลิงก์มา เอกสารอ้างอิงถึงสามแหล่ง หรือการค้นหาครั้งแรกด้วย `read=0` ให้โมเดลเลือกว่าหน้าไหนสมควรอ่านเต็ม

ใช้ `read` ภายใน `/search` เมื่อคุณเพียงต้องการอ่านผลลัพธ์อันดับต้นๆ ในการเรียกเดียวกัน เป็นคำขอเดียวแทนที่จะเป็นสอง และรวมได้ถึง 3 หน้าในเครดิตเดียวของการค้นหา

## การเรียก extract คิดค่าบริการอย่างไร

หนึ่งเครดิตต่อกลุ่ม 3 หน้าที่เริ่มอ่าน การนับใช้เฉพาะหน้าที่ส่งคืนเนื้อหากลับมา URL ที่ถูกปฏิเสธโดย robots.txt หรือโดยเว็บไซต์ หรือหน้าที่โหลดไม่สำเร็จ จะไม่ถูกนับ

| หน้าที่อ่าน | เครดิต |
|---|---|
| 1 ถึง 3 | 1 |
| 4 ถึง 6 | 2 |
| 7 ถึง 9 | 3 |
| 19 หรือ 20 | 7 |

การตอบกลับระบุยอดรวมใน `credits_used` เสมอ การเรียกที่ไม่มีหน้าใดอ่านได้เลยไม่มีค่าใช้จ่าย

## แต่ละรายการในการตอบกลับบอกอะไรฉันบ้าง

แต่ละรายการจะส่งคืน `url` ที่คุณส่งไป และให้ `content_status` มาด้วย เมื่อใช้ `ok` คุณจะได้หน้าเว็บ `title`, `content` หลัก และ `word_count` ของหน้านั้นด้วย มิฉะนั้นสถานะจะระบุเหตุผล เช่น `blocked_by_robots`, `blocked_by_site_policy`, `target_refused` พร้อม `target_status`, `fetch_failed`, `fetch_timeout` หรือ `unsupported_content` ของเว็บไซต์นั้น

รายการจะเรียงตามลำดับของลิสต์ `urls` ที่คุณส่งมา คุณจึงจับคู่ได้ทั้งจากลำดับและจาก URL หน้า [รูปแบบการตอบกลับ](https://llmwebsearch.com/th/docs/response/) อธิบายแต่ละสถานะ

## URL แบบใดที่ถูกปฏิเสธก่อนที่จะดึงข้อมูล?

ที่อยู่ที่ชี้ไปยังเครือข่ายส่วนตัว เครื่องภายในเครื่อง หรือบริการ metadata ของคลาวด์จะถูกปฏิเสธ วิธีนี้ป้องกันไม่ให้ใครใช้ตัวอ่านของเราเข้าถึงระบบภายใน การเปลี่ยนเส้นทางที่นำไปยังที่อยู่ดังกล่าวก็ถูกปฏิเสธเช่นกัน และจะติดตามการเปลี่ยนเส้นทางได้สูงสุด 5 ครั้ง

ที่อยู่ต้องใช้ `http` หรือ `https` การเรียกที่ `urls` ว่างเปล่า มีมากกว่า 20 รายการ หรือมีที่อยู่ผิดรูปแบบจะคืนค่า `400 invalid_parameter` โดยไม่มีค่าใช้จ่าย

## extract ใช้กฎเดียวกับ search หรือไม่?

ใช่ เป็นตัวอ่านตัวเดียวกัน โดยแนะนำตัวว่าเป็น `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` เว็บไซต์ที่ตั้งค่า Content-Signal: ai-input=no ใน robots.txt จะกันหน้าเว็บของตนออกจากเนื้อหาในผลลัพธ์ของคุณ เมื่อเว็บไซต์ปิดกั้นตัวอ่านของเรา ผลลัพธ์จะกลับมาโดยไม่มีเนื้อหาและมีสถานะของเว็บไซต์: เราไม่แก้ CAPTCHA ไม่ลงชื่อเข้าใช้บัญชี และไม่หลบเลี่ยงการบล็อกหรือ paywall

หน้าที่ต้องเข้าสู่ระบบหรืออยู่หลัง paywall จะได้ผลลัพธ์กลับมาโดยไม่มีเนื้อหา ให้ agent ไปยังแหล่งอื่น หรือไปยังหน้าที่คุณได้รับอนุญาตให้อ่านด้วยเซสชันเบราว์เซอร์ของคุณเอง

## Endpoint extract: คำถามที่พบบ่อย

### อ่านไฟล์ประเภทใดได้บ้าง?

หน้าเว็บคือสิ่งที่มันถูกสร้างมาเพื่ออ่าน ลิงก์ไปยังวิดีโอ ไฟล์บีบอัด หรือไฟล์อื่นที่ไม่มีข้อความที่อ่านได้จะส่งคืนเป็น `unsupported_content` และ URL นั้นจะไม่ถูกนับในราคา

### ถ้าส่ง URL เดิมสองครั้งจะอ่านสองครั้งหรือไม่?

ส่งแต่ละ URL เพียงครั้งเดียว หากลิสต์อาจมีรายการซ้ำ ให้ลบรายการซ้ำฝั่งคุณก่อน เพื่อให้ผลลัพธ์ตรงกับลิสต์ของคุณแบบหนึ่งต่อหนึ่ง

### การเรนเดอร์ JavaScript มีค่าใช้จ่ายเพิ่มหรือไม่?

ไม่มี เมื่อหน้าเว็บต้องใช้เบราว์เซอร์เพื่อแสดงข้อความ จะถูกเรนเดอร์โดยไม่มีค่าใช้จ่ายเพิ่ม

### extract อ่านหน้าที่ฉันเข้าสู่ระบบอยู่ได้หรือไม่?

ไม่ได้ ตัวอ่านจะไม่เข้าสู่ระบบบัญชีใด ๆ และไม่ส่งคุกกี้ของคุณ เมื่อเว็บไซต์ปิดกั้นตัวอ่านของเรา ผลลัพธ์จะกลับมาโดยไม่มีเนื้อหาและมีสถานะของเว็บไซต์: เราไม่แก้ CAPTCHA ไม่ลงชื่อเข้าใช้บัญชี และไม่หลบเลี่ยงการบล็อกหรือ paywall

---

LLMWebSearch: LLMWebSearch คือ web search API สำหรับ AI agents ที่คืนผลการค้นหาที่จัดอันดับแล้วพร้อมเนื้อหาของหน้าอันดับต้นๆ ในรูปแบบ Markdown จ่ายด้วยคริปโตโดยไม่ต้องอัปโหลดเอกสารยืนยันตัวตน เครดิตแบบเติมล่วงหน้าตั้งแต่ US$1.20/1K การค้นหา ไม่มีวันหมดอายุ ไม่ต้อง KYC — ไม่ต้องใช้บัตรประชาชน ไม่ต้องเซลฟี่ ไม่ต้องใช้เอกสาร จ่ายด้วยคริปโต
