Gemini Scraper API
提交独立 Gemini 问题,立即获取任务 ID,随后查询回答与引用。
采集 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_-].
| 参数 | 类型 | 约束与默认值 | 说明 |
|---|---|---|---|
prompt | string | maxLength=4000 | 必填问题,每条输入独立处理。 |
country | string | 可选的两位大写国家/地区代码,必须在下方支持列表内;省略或空字符串为自动位置。 | |
index | integer | minimum=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,并使用同一账户鉴权,其他账户无法查询你的任务。查询和重复获取结果免费。
查询响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
code | string | 查询请求处理成功时为 ok;任务执行失败不改变此值。 |
message | string | 查询请求的说明,成功为 ok。任务失败原因在 results[].error 中。 |
data.task_id | string | 提交返回的任务 ID;ChatGPT 为 cgs_ 前缀,Gemini 为 gms_ 前缀。 |
data.status | string | queued / running / succeeded / failed,详见状态表。 |
data.created_at | string (ISO 8601) | 任务创建时间,UTC。 |
data.expires_at | string (ISO 8601) | 结果保留截止时间,UTC;完成后保留 30 天。 |
data.input_count | integer | 提交的问题数量。 |
data.credits_reserved | integer | 提交时已扣除的预扣积分总额,按创建时的配置计算。 |
data.credits_refunded | integer | 已退还的积分总额;失败问题退还对应积分。 |
data.credits_used | integer | 终态实际结算积分,即预扣减已退回;queued/running 时为 0,不表示未预扣。 |
data.poll_after_seconds | integer (optional) | 未完成时返回,当前为 5;终态省略,停止轮询。 |
data.results | array (optional) | 完成后的逐问题结果;未完成时通常省略。顺序不应替代 index 进行关联。 |
data.results[].index | integer | 对应输入的追踪编号;未传时按顺序从 1 自动分配。 |
data.results[].status | string | succeeded 或 failed;批次 succeeded 仍可能存在失败项。 |
data.results[].result | object (optional) | 仅成功项返回,字段因接口而异,见结果字段表。 |
data.results[].error | object (optional) | 仅失败项返回。 |
data.results[].error.code | string | 当前问题处理失败时为 collection_failed。 |
data.results[].error.message | string | 可公开展示的失败原因,不包含内部连接信息。 |
data.expired | boolean (optional) | 兼容字段,存在且为 true 时表示已过保留期。正常查询过期任务返回 HTTP 410,清理后为 404。 |
任务状态
| 字段 | 类型 | 说明 |
|---|---|---|
queued | string | 已受理,等待处理;继续轮询。 |
running | string | 处理中;继续轮询。 |
succeeded | string | 至少一个问题成功;停止轮询并逐条检查结果。 |
failed | string | 所有问题失败;停止轮询,查看 error 与退款。 |
result 回答字段
以下字段都可能缺失、为 null 或为空;空字段本身不构成失败。
| 字段 | 类型 | 说明 |
|---|---|---|
url | string / null | 回答页面地址。 |
prompt | string / null | 本条输入的问题。 |
answer_text | string / null | 回答纯文本。 |
country | string / null | 结果对应的国家/地区。 |
index | integer / null | 本问题的追踪编号;关联时优先使用外层 index。 |
answer_text_markdown | string / null | Markdown 格式回答。 |
answer_section_html | string / null | 回答正文 HTML,用于 Gemini 页面预览。 |
model | string / null | 实际返回的模型名称,不代表可指定模型。 |
answer_text_raw | string / null | 保留原始空白与换行的回答文本。 |
links_attached | array / null | 回答附带的链接。 |
citations | array / 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。