track_changes
Simpan syot kilat sesebuah halaman, kemudian bandingkan halaman langsung dengannya bila-bila masa. Anda memperoleh sama ada sesuatu berubah, sebanyak mana, baris mana yang ditambah atau dibuang, dan satu skor persamaan struktur yang memberitahu sama ada penanda itu sendiri telah dibina semula.
Kes Penggunaan
Kesan scraper yang hampir rosak
structural_similarity yang rendah bermakna penanda halaman telah dibina semula, dan itulah yang sebenarnya merosakkan pemilih — kesannya sebelum saluran pengekstrakan anda mula memulangkan hasil kosong.
Pantau halaman harga pesaing
Hadkan skop kepada jadual harga dengan selector, bandingkan mengikut jadual anda sendiri, dan baca baris yang ditambah dan dibuang untuk melihat apa yang berubah.
Jejaki dokumen undang-undang dan dasar
Bandingkan Terma Perkhidmatan, dasar privasi atau halaman kawal selia, dan simpan rekod boleh audit tentang baris mana sebenarnya yang berubah.
Tangkap perubahan memecahkan dalam dokumentasi API
Tangkap garis dasar halaman rujukan atau changelog vendor, dan bandingkan sebelum setiap keluaran anda.
Sahkan penempatan hanya mengubah apa yang dijangka
Tangkap garis dasar sebelum menghantar, bandingkan selepas itu, dan sahkan bahawa perbezaannya sepadan dengan perubahan yang diniatkan.
Endpoint
/api/v1/tools/track_changesParameters
trackingOptions, monitoringOptions dan storageOptions — API REST terhos menerima kunci tersebut dan mengabaikannya, jadi menghantarnya tidak mengubah apa-apa. Kawalan setara wujud pada pelayan MCP CrawlForge.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | Halaman yang hendak ditangkap atau dibandingkan. Example: https://competitor.com/pricing |
operation | string | Optional | compare | Sama ada `"create_baseline"` atau `"compare"`. Menghantar `"monitor"` memulangkan 501 — pemantauan berjadual ialah ciri pelayan MCP. Sebarang nilai lain ditolak dengan 400. Example: compare |
selector | string | Optional | - | Pemilih CSS yang mengehadkan penjejakan kepada sebahagian halaman, contohnya `.pricing-table`. Garis dasar disimpan mengikut pasangan (url, selector), jadi URL yang sama boleh dijejaki pada beberapa skop secara berasingan. Memulangkan 422 jika pemilih tidak sepadan dengan apa-apa. Example: .pricing-table |
update_baseline | boolean | Optional | false | Untuk `compare` sahaja. Selepas membandingkan, tulis ganti garis dasar tersimpan dengan kandungan yang baru diambil. Gunakannya untuk perbandingan bergolek, di mana setiap panggilan melaporkan perubahan sejak panggilan sebelumnya dan bukan sejak tangkapan asal. Example: false |
respect_robots | boolean | Optional | true | Hormati robots.txt tapak sasaran. Dibiarkan pada `true`, laluan yang dilarang untuk `CrawlForge` ditolak dengan 403 sebelum apa-apa diambil dan tiada credits dicaj. Tetapkan kepada `false` hanya untuk sasaran yang anda mempunyai perjanjian sendiri dengannya — respons kemudiannya membawa entri `warnings` dan tindakan mengatasi itu direkodkan pada API key anda. Example: true |
Operasi
Cipta garis dasar sekali, kemudian bandingkan dengannya seberapa kerap yang anda mahu.
Cara membaca perbandingan
Kedua-dua skor menjawab soalan yang berbeza, dan gabungannya lebih berguna daripada mana-mana satu.
structural_similarity ialah null, bukan 0, apabila garis dasar tersimpan mendahului medan ini. Sifar ialah skor sebenar yang bermaksud tiada apa-apa struktur terselamat, jadi perbandingan yang tidak diukur melaporkan null sebaliknya. Jalankan semula create_baseline, atau hantar update_baseline sekali, untuk mula memberikannya skor.Contoh Permintaan
# Step 1: capture the baseline (once per url + selector, kept 90 days)
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://competitor.com/pricing",
"operation": "create_baseline",
"selector": ".pricing-table"
}'
# Step 2: compare against it, as often as you like
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://competitor.com/pricing",
"operation": "compare",
"selector": ".pricing-table"
}'
# Rolling comparison: diff against the previous call, not the original capture
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://competitor.com/pricing",
"operation": "compare",
"selector": ".pricing-table",
"update_baseline": true
}'Contoh Respons
{ "success": true, "data": { "operation": "compare", "url": "https://competitor.com/pricing", "selector": ".pricing-table", "changed": true, "change_percent": 12.5, "structural_similarity": 0.9713, "added_count": 4, "removed_count": 2, "added_samples": [ "Pro $79 / month", "Includes 50,000 credits", "Enterprise", "Contact sales" ], "removed_samples": [ "Pro $99 / month", "Includes 25,000 credits" ], "baseline_captured_at": "2026-08-01T12:00:00.000Z", "compared_at": "2026-08-26T14:30:00.000Z", "baseline_updated": false }, "credits_used": 3, "credits_remaining": 997, "processing_time": 1180}data.changedBenar apabila cincangan kandungan berbeza daripada garis dasar — pemeriksaan terpantas jika anda hanya perlukan ya atau tidak.data.change_percentBaris ditambah campur dibuang sebagai peratusan daripada dokumen yang lebih besar, 0-100.data.structural_similarityPersamaan penanda 0-1. Null apabila garis dasar mendahului medan ini.data.added_samplesSehingga 20 baris ditambah, setiap satu dipangkas kepada 500 aksara. Bukan perbezaan penuh — gunakan added_count untuk jumlah sebenar.data.removed_samplesSehingga 20 baris dibuang, had yang sama seperti added_samples.data.baseline_updatedSama ada panggilan ini menulis ganti garis dasar, mencerminkan parameter update_baseline.credits_used3 credits, dicaj bagi setiap panggilan berjaya. Panggilan gagal tidak dicaj.Pengendalian Ralat
Garis dasar tidak dijumpai (404 BASELINE_NOT_FOUND)
Anda memanggil compare sebelum menyimpan garis dasar, atau garis dasar 90 hari itu telah luput. Jalankan create_baseline untuk pasangan (url, selector) yang tepat itu dahulu.
Pemilih tidak sepadan dengan apa-apa (422 SELECTOR_NOT_FOUND)
Pemilih CSS itu tidak memulangkan sebarang elemen. Semaknya terhadap penanda langsung — pemilih yang berfungsi dalam alat pembangun selepas JavaScript berjalan mungkin tidak wujud dalam HTML mentah yang diambil oleh titik akhir ini.
Sasaran tidak boleh dicapai (502 FETCH_FAILED)
Halaman memulangkan status bukan 2xx. Laman yang mempunyai perlindungan bot lazimnya berakhir di sini — ambilnya dengan stealth_mode sebaliknya.
Pemantauan berjadual tidak tersedia (501 OPERATION_NOT_AVAILABLE)
operation: "monitor" tidak dilaksanakan pada API REST terhos. Panggil compare mengikut jadual anda sendiri, atau gunakan pelayan MCP CrawlForge.
Parameter tidak sah (400 VALIDATION_ERROR)
URL cacat, atau operation di luar create_baseline, compare dan monitor. Tatasusunan details dalam respons menamakan medan yang gagal.
Storan tidak tersedia (503 STORAGE_UNAVAILABLE)
Storan garis dasar tidak dapat dicapai. Cuba semula — tiada credits dicaj bagi panggilan yang gagal.
Disekat oleh robots.txt (403 Forbidden)
robots.txt tapak sasaran melarang laluan ini untuk CrawlForge. Tetapkan respect_robots: false untuk mengatasinya jika anda mempunyai perjanjian sendiri dengan sasaran — tindakan mengatasi itu direkodkan pada API key anda. Tindakan mengatasi itu tidak sampai kepada hos yang berada dalam senarai penarikan diri kekal CrawlForge, yang ditolak tanpa mengira nilai respect_robots.
selector dan bukannya menjejaki keseluruhan halaman. Garis dasar satu halaman penuh akan mengambil navigasi, pengaki, sepanduk kuki dan kandungan berputar, dan itulah biasanya yang menghasilkan perubahan pada setiap satu perbandingan.Kos credits
create_baseline dan compare berharga 3 credits. Panggilan gagal tidak dicaj. Tiada penjadual pada API REST, jadi kekerapan perbandingan anda — dan dengan itu kos anda — sepenuhnya di bawah kawalan anda.Pecahan Kos:
create_baseline: 3 credits, sekali bagi setiap pasangan (url, selector), sah 90 hari
compare: 3 credits setiap panggilan
Contoh Kos Tinjauan, setiap URL:
Setiap jam: 24 panggilan/hari = 72 credits/hari
Setiap 6 jam: 4 panggilan/hari = 12 credits/hari
Harian: 1 panggilan/hari = 3 credits/hari
Cadangan Pelan:
Pelan Free: 1,000 credits percubaan sekali sahaja = kira-kira 5 URL dibandingkan setiap 6 jam selama sebulan
Pelan Hobby: 5,000 credits/bulan = kira-kira 13 URL dibandingkan setiap 6 jam ($19/bulan)
Pelan Professional: 50,000 credits/bulan = kira-kira 138 URL dibandingkan setiap 6 jam ($99/bulan)