get_batch_results
Dapatkan hasil berhalaman bagi kerja batch_scrape. Hantar kelompok itu sekali, kemudian tinjau endpoint ini dengan batchId yang dikembalikan untuk menyemak status dan menelusuri hasil ketika ia siap.
Kes Penggunaan
Tinjau Kelompok yang Sedang Berjalan
Semak status kerja dan tarik halaman yang telah siap sementara baki kelompok masih berjalan.
Telusuri Kerja Besar
Telusuri hasil 25 pada satu masa (sehingga 100 setiap halaman) tanpa menyimpan keseluruhan kelompok dalam memori.
Sambung Semula Selepas Mula Semula
batchId kekal lebih lama daripada proses anda — worker yang terhenti boleh menyambung tepat di tempat ia berhenti.
Semakan Status yang Murah
Pada 1 credit setiap panggilan, tinjauan berkos sepersekian daripada menjalankan semula kelompok yang sudah anda bayar.
Endpoint
/api/v1/tools/get_batch_resultsParameters
batchId datang daripada respons batch_scrape — alat ini tidak pernah memulakan kerja, ia hanya membacanya semula.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
batchId | string | Required | - | Pengecam kerja kelompok yang dikembalikan oleh `batch_scrape`. Example: batch_1700000000000_abc123def |
page | number | Optional | 1 | Nombor halaman yang hendak diambil (bermula dari 1). Example: 1 |
limit | number | Optional | 25 | Bilangan hasil setiap halaman (1-100). Example: 50 |
Contoh Permintaan
cURL
curl -X POST https://crawlforge.dev/api/v1/tools/get_batch_results \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"batchId": "batch_1700000000000_abc123def",
"page": 1,
"limit": 25
}'TypeScript
async function getPage(batchId: string, page: number) {
const response = await fetch('https://crawlforge.dev/api/v1/tools/get_batch_results', {
method: 'POST',
headers: {
'X-API-Key': process.env.CRAWLFORGE_API_KEY!,
'Content-Type': 'application/json',
},
body: JSON.stringify({ batchId, page, limit: 25 }),
});
return response.json();
}
// Read total_pages from the first response, then loop — one fewer call than
// incrementing until you get an empty array.
const first = await getPage('batch_1700000000000_abc123def', 1);
if (first.success) {
const all = [...first.data.results];
for (let page = 2; page <= first.data.total_pages; page++) {
const next = await getPage(first.data.batch_id, page);
all.push(...next.data.results);
}
console.log(`Batch ${first.data.status}: ${all.length} of ${first.data.total} results`);
console.log('Credits remaining:', first.credits_remaining);
} else {
console.error('Error:', first.error);
}Python
import requests
import os
def get_page(batch_id, page):
response = requests.post(
'https://crawlforge.dev/api/v1/tools/get_batch_results',
headers={
'X-API-Key': os.environ['CRAWLFORGE_API_KEY'],
'Content-Type': 'application/json',
},
json={'batchId': batch_id, 'page': page, 'limit': 25}
)
return response.json()
# Read total_pages from the first response, then loop — one fewer call than
# incrementing until you get an empty list.
first = get_page('batch_1700000000000_abc123def', 1)
if first['success']:
all_results = list(first['data']['results'])
for page in range(2, first['data']['total_pages'] + 1):
nxt = get_page(first['data']['batch_id'], page)
all_results.extend(nxt['data']['results'])
print(f"Batch {first['data']['status']}: {len(all_results)} of {first['data']['total']} results")
print(f"Credits remaining: {first['credits_remaining']}")
else:
print(f"Error: {first['error']}")Contoh Respons
{ "success": true, "data": { "batch_id": "batch_1700000000000_abc123def", "status": "completed", "page": 1, "limit": 25, "total": 3, "total_pages": 1, "results": [ { "url": "https://example.com/page-1", "status": "completed", "data": { "title": "Example page 1" } }, { "url": "https://example.com/page-2", "status": "completed", "data": { "title": "Example page 2" } } ] }, "credits_used": 1, "credits_remaining": 999, "processing_time": 96}data.batch_idKerja kelompok yang anda tanya, dikembalikan semuladata.statusStatus kelompok secara keseluruhandata.totalJumlah keseluruhan hasil merentas semua halamandata.total_pagesBerapa banyak halaman wujud pada `limit` semasadata.resultsSatu entri bagi setiap URL dalam halaman ini, masing-masing dengan `status` tersendiricredits_usedCredits yang ditolak bagi permintaan ini (1 setiap pengambilan)credits_remainingBaki credits andaPengendalian Ralat
Input Tidak Sah (400 Bad Request)
batchId kosong, page kurang daripada 1, atau limit berada di luar julat 1-100.
Pengambilan Gagal (500 Internal Server Error)
Kelompok tidak dapat dibaca semula — selalunya kerana batchId yang tidak dikenali atau telah luput. Credits tidak ditolak bagi pengambilan yang gagal.
Credits Tidak Mencukupi (402 Payment Required)
Akaun anda tidak mempunyai credits yang mencukupi. Beli lebih banyak credits atau naik taraf pelan anda.
Had Kadar Dilampaui (429 Too Many Requests)
Anda telah melampaui had kadar pelan anda. Tunggu sebentar atau naik taraf pelan anda untuk had yang lebih tinggi.
total_pages daripada respons pertama dan gelung sehingga semuanya diambil, dan bukannya menambah page sehingga anda menerima array kosong — ia menjimatkan satu panggilan bagi setiap kelompok.Kos Credits
batch_scrape.Pelan Free: 1,000 credits sekali sahaja = 1,000 permintaan
Pelan Hobby: 5,000 credits/bulan = 5,000 permintaan (USD 19/bulan)
Pelan Professional: 50,000 credits/bulan = 50,000 permintaan (USD 99/bulan)
Pelan Business: 250,000 credits/bulan = 250,000 permintaan (USD 399/bulan)