快速回答
如何用 curl 查询 SERP API?
运行 curl -sG "https://serpcrypto.com/api/v1/search" -H "Authorization: Bearer $KEY" --data-urlencode "q=your query" 并将 JSON 传给 jq。使用 SerpCrypto 时,每次成功查询消耗 1 积分,起价 US$0.30/千次搜索,错误免费。-G 将数据标志转换为查询字符串。积分用加密货币支付,无需 KYC。
这里哪些 curl 标志重要?
在每个 shell 里用 export SERPCRYPTO_API_KEY=… 设置一次 API 密钥。如果没有安装 jq,请从你的包管理器安装。
| 标志 | 原因 |
|---|---|
-s | 静默:不与 JSON 混在一起显示进度条。 |
-G | 在 GET 请求中将 -d 和 --data-urlencode 的值作为查询字符串发送。 |
--data-urlencode | 对 q 和 location 中的空格、引号和重音符号进行编码。 |
-H "Authorization: Bearer …" | 你的 API 密钥。请保存在环境变量中。 |
-w '%{http_code}' | 打印 HTTP 状态码,当调用失败时很有用。 |
如何打印某个关键词的前 10 条链接?
请求自然搜索结果,让 jq 打印每条的排名和链接,用制表符分隔。当某个区块不存在时,[]? 形式会什么都不打印而不是报错,这样脚本在异常页面上也能保持安静。
# Top 10 organic links, one per line
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=kubernetes cost monitoring" -d gl=us -d hl=en \
| jq -r '.organic_results[]? | "\(.position)\t\(.link)"'如何列出 People Also Ask 问题?
读取 people_also_ask[].question。问题会跟随 hl 的语言,并随 gl 的国家而变化,所以要在你写作的每个市场都跑同一条查询。内容团队会把这份列表直接贴进 brief。
# People Also Ask questions, ready for a content brief
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=how to brew cold brew" -d gl=gb -d hl=en \
| jq -r '.people_also_ask[]?.question'如何查看 AI Overview 引用了哪些来源?
读取 ai_overview.references。只有当 Google 在该查询和该地区显示 AI Overview 时,这个区块才存在,因此该 recipe 在其他情况下会打印一条明确的提示。长期跟踪这些来源,可以判断你的页面是否被 Google 的生成式回答引用。
# Sources cited by the AI Overview, if the page shows one
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=what is a heat pump" -d gl=us -d hl=en \
| jq -r 'if .ai_overview then .ai_overview.references[] | "\(.index)\t\(.source)\t\(.link)" else "no AI Overview for this query" end'如何获取本地包和 Google Maps 列表?
用 location 做网页搜索会返回结果页上显示的本地包,通常只有几家商户。engine=google_maps 会返回更长的 Google Maps 列表,包含地址、评分和评论数,@tsv 会把它转成适合放进电子表格的行。两者各消耗 1 积分。
# Local pack in a city, then the full Maps list for the same query
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=vegan restaurant" \
--data-urlencode "location=Toronto, Ontario, Canada" -d gl=ca -d hl=en \
| jq -r '.local_results[]? | "\(.position)\t\(.title)\t\(.rating // "-")"'
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
-d engine=google_maps --data-urlencode "q=vegan restaurant Toronto" -d gl=ca -d hl=en \
| jq -r '.local_results[]? | [.title, .address, .rating, .reviews] | @tsv'调用失败时如何查看错误?
加上 -w '\nHTTP %{http_code}\n' 在响应体之后打印状态码。错误响应体是一个小的 JSON,包含 code 和 message;错误页面 列出了全部六个错误码。第二条命令读取你的积分,不消耗积分。
# Print the body, then the HTTP status on its own line
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=test" -w '\nHTTP %{http_code}\n'
# Credits left (free call)
curl -s "https://serpcrypto.com/api/v1/credits" -H "Authorization: Bearer $SERPCRYPTO_API_KEY" | jq .Windows 上的 PowerShell 等价写法是什么?
Invoke-RestMethod 会发送请求并把 JSON 解析成对象,所以不需要 jq。把参数作为哈希表传入 -Body:在 GET 请求中,PowerShell 会把它们编码进查询字符串。然后 Format-Table 会打印排名、标题和链接。
# Windows PowerShell 5.1 or PowerShell 7
$headers = @{ Authorization = "Bearer $env:SERPCRYPTO_API_KEY" }
$query = @{ q = "kubernetes cost monitoring"; gl = "us"; hl = "en" }
$data = Invoke-RestMethod -Uri "https://serpcrypto.com/api/v1/search" -Headers $headers -Body $query -Method Get
$data.organic_results | Select-Object position, title, link | Format-Table -AutoSize什么时候应该从 curl 换成代码?
当你用一长串关键词重复执行命令时就可以换了。shell 循环能应付几十次搜索,但重试、并发和存储用 Python 或 Node.js 更省事。请求本身是一样的,所以在这里测试通过的 recipe 可以原样沿用。每次搜索仍然是 1 积分,在 10,000 次搜索 积分包上是 US$0.75/千次搜索。
curl 问题
为什么我的查询在 curl 里返回 400 错误?
通常是因为 q 用 -d 发送,并且包含了需要编码的字符。查询参数和 location 请用 --data-urlencode "q=…";gl=us 这类纯代码可以继续搭配 -d。
可以把完整的 JSON 保存到文件吗?
可以:加上 -o result.json 而不是管道传给 jq。保存原始响应能让你之后重新解析,而不用再次付费搜索。
Windows 上的 curl 工作方式一样吗?
Windows 10 和 11 自带 curl.exe,参数标志也一样。cmd.exe 中的引号处理不同,所以在那边用 PowerShell 搭配 Invoke-RestMethod 通常更简单。