API 文档

Gemini Scraper API

提交独立 Gemini 问题,立即获取任务 ID,随后查询回答与引用。

测试 API

采集 Gemini 回答文本、Markdown、回答正文 HTML 和引用。提交接口立即返回任务 ID,通过查询接口等待并获取结果。

打开产品页面与 API Tester

提交任务

POST https://api.goanyapi.com/api/v1/gemini-scraper/tasks

使用 Authorization: Bearer YOUR_GOANYAPI_API_KEY 鉴权,提交 JSON。inputs 是独立问题数组,idempotency_key 是本批任务的幂等键。新任务使用新键;响应丢失时,用原键和完全相同的输入重试。同键不同输入返回 HTTP 409。

目标 URL 固定,无需传入。每条输入只接受 prompt、country、index,不支持补充问题、坐标、模型选择、联网搜索或请求来源开关。页面只提交一个问题,API 支持批量输入。

inputs: 1–20. idempotency_key: 8–128, [A-Za-z0-9_-].

参数类型约束与默认值说明
promptstringmaxLength=4000必填问题,每条输入独立处理。
countrystring可选的两位大写国家/地区代码,必须在下方支持列表内;省略或空字符串为自动位置。
indexintegerminimum=1; maximum=2147483647可选的批次内唯一追踪编号,默认按顺序自动分配。
{
  "idempotency_key": "gemini_research_001",
  "inputs": [
    { "prompt": "首次去日本旅行,推荐三个城市并简要说明原因", "country": "US", "index": 1 },
    { "prompt": "对比常见的项目管理工具", "index": 2 }
  ]
}

新请求在校验、预扣积分和保存任务后立即返回 HTTP 202。保存 data.task_id,受理成功不代表回答已完成。相同键和相同输入返回原任务,不重复扣费;已完成任务可能返回 HTTP 200。保留期结束后不要复用旧键。

{
  "code": "ok",
  "message": "ok",
  "data": {
    "task_id": "gms_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "status": "queued",
    "input_count": 2,
    "poll_after_seconds": 5
  }
}

示例为便于阅读省略了部分时间和计费字段。实际响应还包含 created_at、expires_at、credits_reserved、credits_refunded 和 credits_used。

支持的国家与地区

country 只接受下方列表中的大写代码,省略或传 "" 表示自动位置。国家设置不限制问题语言。不支持的代码在预扣前返回 HTTP 400。此列表专用于 Gemini,与其他接口可能不同。

完整支持的国家/地区 (222)
代码国家/地区
AE阿拉伯联合酋长国
AF阿富汗
AG安提瓜和巴布达
AL阿尔巴尼亚
AM亚美尼亚
AO安哥拉
AR阿根廷
AS美属萨摩亚
AU澳大利亚
AZ阿塞拜疆
BA波斯尼亚和黑塞哥维那
BB巴巴多斯
BD孟加拉国
BH巴林
BI布隆迪
BJ贝宁
BN文莱
BO玻利维亚
BR巴西
BS巴哈马
BT不丹
BW博茨瓦纳
BZ伯利兹
CA加拿大
CD刚果(金)
CF中非共和国
CG刚果(布)
CI科特迪瓦
CM喀麦隆
CO哥伦比亚
CR哥斯达黎加
CV佛得角
DJ吉布提
DM多米尼克
DO多米尼加共和国
DZ阿尔及利亚
EC厄瓜多尔
EG埃及
ET埃塞俄比亚
FJ斐济
FM密克罗尼西亚
FO法罗群岛
GA加蓬
GD格林纳达
GE格鲁吉亚
GH加纳
GM冈比亚
GN几内亚
GQ赤道几内亚
GT危地马拉
GU关岛
GW几内亚比绍
GY圭亚那
HN洪都拉斯
HT海地
KE肯尼亚
KG吉尔吉斯斯坦
KH柬埔寨
KM科摩罗
KN圣基茨和尼维斯
KR韩国
KW科威特
KZ哈萨克斯坦
LA老挝
LS莱索托
LC圣卢西亚
LK斯里兰卡
LR利比里亚
LY利比亚
MA摩洛哥
MD摩尔多瓦
ME黑山
MG马达加斯加
MH马绍尔群岛
MK北马其顿
ML马里
MM缅甸
MN蒙古
MP北马里亚纳群岛
MR毛里塔尼亚
MU毛里求斯
MV马尔代夫
MW马拉维
MX墨西哥
MY马来西亚
MZ莫桑比克
NA纳米比亚
NE尼日尔
NG尼日利亚
NI尼加拉瓜
NP尼泊尔
NZ新西兰
OM阿曼
PA巴拿马
PE秘鲁
PG巴布亚新几内亚
PH菲律宾
PK巴基斯坦
PY巴拉圭
QA卡塔尔
RS塞尔维亚
RW卢旺达
SA沙特阿拉伯
SB所罗门群岛
SC塞舌尔
SG新加坡
SN塞内加尔
SO索马里
SR苏里南
SS南苏丹
ST圣多美和普林西比
SV萨尔瓦多
SZ斯威士兰
TD乍得
TG多哥
TH泰国
TJ塔吉克斯坦
TL东帝汶
TN突尼斯
TO汤加
TR土耳其
TT特立尼达和多巴哥
TW台湾
TZ坦桑尼亚
UA乌克兰
UG乌干达
UY乌拉圭
UZ乌兹别克斯坦
VC圣文森特和格林纳丁斯
VE委内瑞拉
VI美属维尔京群岛
VN越南
VU瓦努阿图
WS萨摩亚
XK科索沃
YE也门
ZA南非
ZM赞比亚
ZW津巴布韦
JP日本
IN印度
US美国
AX奥兰群岛
AD安道尔
AI安圭拉
AW阿鲁巴
AT奥地利
JE泽西岛
BM百慕大
BQ荷属加勒比区
BG保加利亚
BF布基纳法索
CL智利
CK库克群岛
HR克罗地亚
CW库拉索
CY塞浦路斯
DK丹麦
EE爱沙尼亚
FK福克兰群岛(马尔维纳斯群岛)
FI芬兰
FR法国
GF法属圭亚那
PF法属波利尼西亚
DE德国
GB英国
GR希腊
GL格陵兰
GG根西岛
HU匈牙利
IS冰岛
ID印度尼西亚
IO英属印度洋领地
IE爱尔兰
IM马恩岛
IL以色列
IT意大利
JM牙买加
KI基里巴斯
LV拉脱维亚
LI列支敦士登
LT立陶宛
LU卢森堡
MT马耳他
MQ马提尼克
YT马约特
JO约旦
MC摩纳哥
NR瑙鲁
NL荷兰
NO挪威
PW帕劳
PM圣皮埃尔和密克隆群岛
PT葡萄牙
PR波多黎各
RE留尼汪
RO罗马尼亚
BL圣巴泰勒米
NC新喀里多尼亚
SH圣赫勒拿
SI斯洛文尼亚
SK斯洛伐克
SX荷属圣马丁
CH瑞士
TM土库曼斯坦
VG英属维尔京群岛
MF法属圣马丁
TV图瓦卢
TC特克斯和凯科斯群岛
SL塞拉利昂
ES西班牙
BE比利时
KY开曼群岛
CZ捷克
GP瓜德罗普
GI直布罗陀
HK香港
MO澳门
SE瑞典
SM圣马力诺
PL波兰
WF瓦利斯和富图纳

查询状态与结果

GET https://api.goanyapi.com/api/v1/gemini-scraper/tasks/{task_id}

将 {task_id} 替换为提交返回的任务 ID,并使用同一账户鉴权,其他账户无法查询你的任务。查询和重复获取结果免费。

查询响应字段

字段类型说明
codestring查询请求处理成功时为 ok;任务执行失败不改变此值。
messagestring查询请求的说明,成功为 ok。任务失败原因在 results[].error 中。
data.task_idstring提交返回的任务 ID;ChatGPT 为 cgs_ 前缀,Gemini 为 gms_ 前缀。
data.statusstringqueued / running / succeeded / failed,详见状态表。
data.created_atstring (ISO 8601)任务创建时间,UTC。
data.expires_atstring (ISO 8601)结果保留截止时间,UTC;完成后保留 30 天。
data.input_countinteger提交的问题数量。
data.credits_reservedinteger提交时已扣除的预扣积分总额,按创建时的配置计算。
data.credits_refundedinteger已退还的积分总额;失败问题退还对应积分。
data.credits_usedinteger终态实际结算积分,即预扣减已退回;queued/running 时为 0,不表示未预扣。
data.poll_after_secondsinteger (optional)未完成时返回,当前为 5;终态省略,停止轮询。
data.resultsarray (optional)完成后的逐问题结果;未完成时通常省略。顺序不应替代 index 进行关联。
data.results[].indexinteger对应输入的追踪编号;未传时按顺序从 1 自动分配。
data.results[].statusstringsucceeded 或 failed;批次 succeeded 仍可能存在失败项。
data.results[].resultobject (optional)仅成功项返回,字段因接口而异,见结果字段表。
data.results[].errorobject (optional)仅失败项返回。
data.results[].error.codestring当前问题处理失败时为 collection_failed。
data.results[].error.messagestring可公开展示的失败原因,不包含内部连接信息。
data.expiredboolean (optional)兼容字段,存在且为 true 时表示已过保留期。正常查询过期任务返回 HTTP 410,清理后为 404。

任务状态

字段类型说明
queuedstring已受理,等待处理;继续轮询。
runningstring处理中;继续轮询。
succeededstring至少一个问题成功;停止轮询并逐条检查结果。
failedstring所有问题失败;停止轮询,查看 error 与退款。

result 回答字段

以下字段都可能缺失、为 null 或为空;空字段本身不构成失败。

字段类型说明
urlstring / null回答页面地址。
promptstring / null本条输入的问题。
answer_textstring / null回答纯文本。
countrystring / null结果对应的国家/地区。
indexinteger / null本问题的追踪编号;关联时优先使用外层 index。
answer_text_markdownstring / nullMarkdown 格式回答。
answer_section_htmlstring / null回答正文 HTML,用于 Gemini 页面预览。
modelstring / null实际返回的模型名称,不代表可指定模型。
answer_text_rawstring / null保留原始空白与换行的回答文本。
links_attachedarray / null回答附带的链接。
citationsarray / null回答引用。

数组可包含字符串、数字、布尔值、null 或对象。对象仅保留 position、text、title、url、description、domain、icon、cited、name、price、currency、rating、address、latitude、longitude;这些字段也允许缺失或为空。

查询响应 JSON 示例

以下均为 HTTP 200 的结构示例,不代表真实任务。计费数字使用当前配置;任务实际费率锁定于创建时。

排队中

{  "code": "ok",  "message": "ok",  "data": {    "task_id": "gms_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",    "status": "queued",    "created_at": "2026-11-10T00:00:00.000Z",    "expires_at": "2026-12-10T00:00:00.000Z",    "input_count": 1,    "credits_reserved": 3,    "credits_refunded": 0,    "credits_used": 0,    "poll_after_seconds": 5  }}

处理中

{  "code": "ok",  "message": "ok",  "data": {    "task_id": "gms_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",    "status": "running",    "created_at": "2026-11-10T00:00:00.000Z",    "expires_at": "2026-12-10T00:00:00.000Z",    "input_count": 1,    "credits_reserved": 3,    "credits_refunded": 0,    "credits_used": 0,    "poll_after_seconds": 5  }}

全部成功

{  "code": "ok",  "message": "ok",  "data": {    "task_id": "gms_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",    "status": "succeeded",    "created_at": "2026-11-10T00:00:00.000Z",    "expires_at": "2026-12-10T00:00:00.000Z",    "input_count": 1,    "credits_reserved": 3,    "credits_refunded": 0,    "credits_used": 3,    "results": [      {        "index": 1,        "status": "succeeded",        "result": {          "index": 1,          "prompt": "Example question",          "answer_text": "Example answer.",          "citations": [],          "answer_section_html": "<p>Example answer.</p>"        }      }    ]  }}

全部失败

{  "code": "ok",  "message": "ok",  "data": {    "task_id": "gms_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",    "status": "failed",    "created_at": "2026-11-10T00:00:00.000Z",    "expires_at": "2026-12-10T00:00:00.000Z",    "input_count": 1,    "credits_reserved": 3,    "credits_refunded": 3,    "credits_used": 0,    "results": [      {        "index": 1,        "status": "failed",        "error": {          "code": "collection_failed",          "message": "Unable to deliver a result for this question"        }      }    ]  }}

部分失败

{  "code": "ok",  "message": "ok",  "data": {    "task_id": "gms_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",    "status": "succeeded",    "created_at": "2026-11-10T00:00:00.000Z",    "expires_at": "2026-12-10T00:00:00.000Z",    "input_count": 2,    "credits_reserved": 6,    "credits_refunded": 3,    "credits_used": 3,    "results": [      {        "index": 1,        "status": "succeeded",        "result": {          "index": 1,          "prompt": "Example question",          "answer_text": "Example answer.",          "citations": [],          "answer_section_html": "<p>Example answer.</p>"        }      },      {        "index": 2,        "status": "failed",        "error": {          "code": "collection_failed",          "message": "Unable to deliver a result for this question"        }      }    ]  }}

轮询示例

const headers = { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' };
const submission = await fetch(`${apiBase}/api/v1/gemini-scraper/tasks`, {
  method: 'POST', headers,
  body: JSON.stringify({ inputs: [{ prompt: '对比常见的项目管理工具' }], idempotency_key: crypto.randomUUID() })
});
const accepted = await submission.json();
if (!submission.ok) throw new Error(accepted.message);
const taskId = accepted.data.task_id;
for (;;) {
  await new Promise(resolve => setTimeout(resolve, 5000));
  const response = await fetch(`${apiBase}/api/v1/gemini-scraper/tasks/${taskId}`, { headers });
  const payload = await response.json();
  if (!response.ok) throw new Error(payload.message);
  if (['succeeded', 'failed'].includes(payload.data.status)) {
    console.log(payload.data); // 检查每条 results[].status,包含部分失败的情况。
    break;
  }
}

计费、重试与保留期

每个问题 3 积分,提交时扣除,失败部分自动退回;查询免费。

提交时按问题数及数据库当前费率预扣积分,余额不足不创建任务。成功问题无论是否查看结果都计费,失败问题自动退还对应积分;字段或引用为空不单独构成失败。查询免费。响应丢失后使用原幂等键和完全相同的输入重试,新键会创建独立计费任务。

关闭页面后仍可通过后台执行和回调继续处理。最长处理 24 小时,逾期任务在后续处理或查询时关闭并退款,没有后续活动时退款可能延迟。完成结果保留 30 天。下载 JSON 上限 20 MB,含元数据的任务存储上限为 1.8 MB;过大而无法保存或交付的结果自动退款。

HTTP 错误

400:JSON、参数、国家或任务 ID 不合法;401:缺失或无效 API Key;402:积分不足;404:任务不存在或不属于当前账户;409:幂等冲突;410:任务已过期;429:请求限流;503:服务未配置或暂不可用。任务执行失败通过 HTTP 200 的任务正文返回,终态为 failed。