Google Organic 异步任务
异步模式适合批量抓取:先提交任务(Task Post),再轮询获取结果(Task Get)。Standard Queue 单价约为 Live 的 1/3,适合每日定时跑数百个关键词。
参考价:约 ¥0.0096 / 次(实际以请求返回为准)
工作流
- Task Post — 提交一批关键词,获得
task_id - 等待 — Standard Queue 通常 1–5 分钟完成
- Task Get Advanced — 用
task_id拉取完整 SERP 结果
Step 1:提交任务
POST
/v3/serp/google/organic/task_post| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| keyword | string | 是 | 搜索关键词 |
| location_code | integer | 是 | 地理位置代码 |
| language_code | string | 是 | 语言代码 |
| device | string | 否 | desktop 或 mobile |
| priority | integer | 否 | 1=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`);
}计费说明
- Task Post 提交时可能产生少量费用
- Task Get 成功返回结果时按实际
cost扣费 - 批量 100 词 × Standard Queue ≈ ¥0.86(参考),详见 实时 vs 批量选型