主题
keywords_data/bing/search_volume_history/tasks_ready
GET /v3/keywords_data/bing/search_volume_history/tasks_ready
获取 Bing「搜索量历史」已完成任务
请求方式: GET
请求路径: /v3/keywords_data/bing/search_volume_history/tasks_ready
本接口用于获取已完成但尚未被收取的「搜索量历史」任务列表。使用标准任务提交方式且未设置 postback_url 时,可通过本接口获取所有已完成任务的 id,然后调用对应的任务结果接口获取详细结果。
注意事项
- 获取已完成任务列表不收取费用,参考价约 ¥0 / 次。
- 实扣费以响应头
X-SeerMarTech-Charge-CNY为准。 - 每个任务在被成功收取前都会保留在列表中。
- 每分钟最多调用 20 次。
- 每次调用最多返回过去 3 天完成的 1000 个任务。
- 已经被收取的任务不会再次出现在列表中。
- 任务完成后 3 天仍未被收取,也不会继续出现在列表中。
- 如果提交任务时设置了
postback_url,任务通常不会出现在本列表中。当向你的服务器推送失败,且服务器返回的 HTTP 状态码小于200或大于300时,任务才可能重新出现在列表中。 - 由于系统架构原因,已完成任务队列可能存在短暂更新延迟。若系统需要每分钟收取 1000 个任务,建议优使用 pingback/postback 机制,并将本接口用于获取推送失败任务的 ID。
请求参数
本接口为 GET 请求,无需请求体和查询参数。
认证方式
请求头使用 Bearer Token:
http
Authorization: Bearer smt_live_YOUR_KEY响应字段
接口返回 JSON 格式数据,顶层 tasks 数组。
顶层字段
| 字段名 | 类型 | 说明 |
|---|---|---|
version | string | 当前 API 版本 |
status_code | integer | 请求级状态码。完整错误码请参考 /v3/appendix/errors |
status_message | string | 请求级提示信息 |
time | string | 请求执行耗时,单位为秒 |
cost | float | 平台原始 USD 成本兼容字段;人民币实扣以 X-SeerMarTech-Charge-CNY 为准。 |
tasks_count | integer | tasks 数组中的任务数量 |
tasks_error | integer | tasks 数组中返回错误的任务数量 |
tasks | array | 已完成任务列表 |
tasks 数组字段
| 字段名 | 类型 | 说明 |
|---|---|---|
id | string | 任务唯一标识,UUID 格式 |
status_code | integer | 任务状态码,通常在 10000 至 60000 范围。完整错误码请参考 /v3/appendix/errors |
status_message | string | 任务状态说明 |
time | string | 任务执行耗时,单位为秒 |
cost | float | 平台原始 USD 成本兼容字段;人民币实扣以 X-SeerMarTech-Charge-CNY 为准。 |
result_count | integer | result 数组中的数量 |
path | array | 请求路径信息 |
data | object | 请求 URL 中传递的参数 |
result | array | 任务结果列表 |
tasks[].data 常见字段
| 字段名 | 类型 | 说明 |
|---|---|---|
api | string | API 模块名称,例如 keywords_data |
function | string | 任务类型,例如 search_volume_history |
se | string | 搜索引擎,例如 bing |
tasks[].result 字段
| 字段名 | 类型 | 说明 |
|---|---|---|
id | string | 已完成任务的唯一标识,UUID 格式 |
se | string | 创建任务时指定的搜索引擎 |
function | string | 任务类型 |
date_posted | string | 任务提交时间,使用 UTC 格式 |
endpoint | string | 用于收取任务结果的 URL 路径 |
curl 示例
bash
curl --location --request GET \
"https://api.seermartech.cn/v3/keywords_data/bing/search_volume_history/tasks_ready" \
--header "Authorization: Bearer smt_live_YOUR_KEY" \
--header "Content-Type: application/json"PHP 示例
php
<?php
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://api.seermartech.cn/v3/keywords_data/bing/search_volume_history/tasks_ready',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer smt_live_YOUR_KEY',
'Content-Type: application/json',
],
]);
$response = curl_exec($ch);
if ($response === false) {
echo '请求失败:' . curl_error($ch);
} else {
$result = json_decode($response, true);
if (($result['status_code'] ?? null) === 20000) {
print_r($result);
} else {
echo '错误码:' . ($result['status_code'] ?? '未知');
echo ',错误信息:' . ($result['status_message'] ?? '未知');
}
}
curl_close($ch);TypeScript 示例
typescript
import axios from 'axios';
axios({
method: 'get',
url: 'https://api.seermartech.cn/v3/keywords_data/bing/search_volume_history/tasks_ready',
headers: {
Authorization: 'Bearer smt_live_YOUR_KEY',
'Content-Type': 'application/json',
},
})
.then((response) => {
const result = response.data;
if (result.status_code === 20000) {
console.log('已完成任务:', result.tasks);
} else {
console.error(
`错误码:${result.status_code},错误信息:${result.status_message}`,
);
}
})
.catch((error) => {
console.error('请求失败:', error.message);
});Python 示例
python
import requests
url = (
"https://api.seermartech.cn/"
"v3/keywords_data/bing/search_volume_history/tasks_ready"
)
headers = {
"Authorization": "Bearer smt_live_YOUR_KEY",
"Content-Type": "application/json",
}
response = requests.get(url, headers=headers)
result = response.json()
if result.get("status_code") == 20000:
print("已完成任务:", result.get("tasks", []))
else:
print(
"错误码:%s,错误信息:%s"
% (result.get("status_code"), result.get("status_message"))
)C# 示例
csharp
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public static class ApiDemo
{
public static async Task GetTasksReady()
{
using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer",
"smt_live_YOUR_KEY"
);
var url =
"https://api.seermartech.cn/v3/keywords_data/" +
"bing/search_volume_history/tasks_ready";
var response = await httpClient.GetAsync(url);
var responseText = await response.Content.ReadAsStringAsync();
if (response.IsSuccessStatusCode)
{
Console.WriteLine(responseText);
}
else
{
Console.WriteLine(
$"HTTP 请求失败:{(int)response.StatusCode} {response.ReasonPhrase}"
);
}
}
}响应示例
json
{
"version": "0.1.20240626",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.1358 sec.",
"cost": 0,
"tasks_count": 1,
"tasks_error": 0,
"tasks": [
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.4210 sec.",
"cost": 0,
"result_count": 1,
"path": [
"v3",
"keywords_data",
"bing",
"search_volume_history",
"tasks_ready"
],
"data": {
"api": "keywords_data",
"function": "search_volume_history",
"se": "bing"
},
"result": [
{
"id": "98765432-10fe-dcba-9876-543210fedcba",
"se": "bing",
"function": "search_volume_history",
"date_posted": "2024-06-26 08:30:00 +00:00",
"endpoint": "/v3/keywords_data/bing/search_volume_history/task_get/98765432-10fe-dcba-9876-543210fedcba"
}
]
}
]
}状态码与异常处理
建议客户端至少处理以下:
status_code = 20000:请求成功。- 顶层
status_code非20000:请求级错误,应根据status_message和错误码进行处理。 tasks_error > 0:部分任务返回错误,应逐项检查tasks[].status_code。tasks为空数组:当前没有符合条件的未收取任务,或任务队列尚未完成更新。- HTTP 请求时或网络错误:建议使用有限次数的重试,并每分钟 20 次的调用限制。
实用场景
- 轮询未设置回调地址的已完成任务:定期获取任务 ID 并收取 Bing 搜索量历史结果,遗漏异步任务。
- 补偿推送失败的任务:识别未成功推送到业务服务器的任务,并通过任务结果接口进行补偿获取。
- 构建任务收取队列:任务完成状态批量拉取结果,提升搜索量数据处理的自动化程度。
- 监控异步任务处理延迟:结合
date_posted、time和轮询时间分析任务完成及收取延迟,优化数据管道调度。 - 同步 SEO 历史趋势:批量收取 Bing 历史搜索量,为规划、优级排序和市场趋势分析提供数据支持。