SeerMarTech 文档控制台

Google Organic 异步任务

异步模式适合批量抓取:先提交任务(Task Post),再轮询获取结果(Task Get)。Standard Queue 单价约为 Live 的 1/3,适合每日定时跑数百个关键词。

参考价:¥0.0096 / 次(实际以请求返回为准)

工作流

  1. Task Post — 提交一批关键词,获得 task_id
  2. 等待 — Standard Queue 通常 1–5 分钟完成
  3. Task Get Advanced — 用 task_id 拉取完整 SERP 结果

Step 1:提交任务

POST/v3/serp/google/organic/task_post
参数类型必填说明
keywordstring搜索关键词
location_codeinteger地理位置代码
language_codestring语言代码
devicestringdesktop 或 mobile
priorityinteger1=Standard(默认),2=Priority

curl

curl -X POST "https://api.seermartech.cn/v3/serp/google/organic/task_post" \ -H "Authorization: Bearer smt_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '[{ "keyword": "数据分析平台", "location_code": 2156, "language_code": "zh", "priority": 1 }]'

响应中记录 tasks[0].id,例如 "06123456-1535-0066-0000-abc123"

Step 2:获取结果

GET/v3/serp/google/organic/task_get/advanced/{task_id}

任务未完成时 status_code 可能为 40602(任务进行中),需间隔轮询。

curl

curl -X GET "https://api.seermartech.cn/v3/serp/google/organic/task_get/advanced/06123456-1535-0066-0000-abc123" \ -H "Authorization: Bearer smt_live_YOUR_KEY"

完整 Python 轮询示例

import time import requests API_KEY = "smt_live_YOUR_KEY" BASE = "https://api.seermartech.cn/v3" HEADERS = {"Authorization": f"Bearer {API_KEY}"} def submit_and_wait(keyword: str, location_code: int = 2156) -> dict: # 1. 提交任务 post_resp = requests.post( f"{BASE}/serp/google/organic/task_post", headers={**HEADERS, "Content-Type": "application/json"}, json=[{"keyword": keyword, "location_code": location_code, "language_code": "zh"}], timeout=30, ) post_resp.raise_for_status() task_id = post_resp.json()["tasks"][0]["id"] # 2. 轮询结果(最多 30 次,间隔 10 秒) for _ in range(30): get_resp = requests.get( f"{BASE}/serp/google/organic/task_get/advanced/{task_id}", headers=HEADERS, timeout=30, ) data = get_resp.json() if data["tasks"][0]["status_code"] == 20000: return data time.sleep(10) raise TimeoutError(f"Task {task_id} not ready") result = submit_and_wait("数据分析平台") print("cost:", result["cost"]) print("items:", len(result["tasks"][0]["result"][0]["items"]))

TypeScript

const API_KEY = "smt_live_YOUR_KEY"; const BASE = "https://api.seermartech.cn/v3"; async function submitAndWait(keyword: string, locationCode = 2156) { const postResp = await fetch(`${BASE}/serp/google/organic/task_post`, { method: "POST", headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify([{ keyword, location_code: locationCode, language_code: "zh" }]), }); const postData = await postResp.json(); const taskId = postData.tasks[0].id; for (let i = 0; i < 30; i++) { const getResp = await fetch( `${BASE}/serp/google/organic/task_get/advanced/${taskId}`, { headers: { Authorization: `Bearer ${API_KEY}` } } ); const data = await getResp.json(); if (data.tasks[0].status_code === 20000) return data; await new Promise((r) => setTimeout(r, 10_000)); } throw new Error(`Task ${taskId} timeout`); }

计费说明

相关文档