You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何使用CURL结合OAuth或API密钥认证Google Search Console API并获取网站月度数据

我之前也踩过这个坑!Search Console API的searchAnalytics.query接口根本不支持用API密钥认证——这是很多新手容易误解的点。API密钥只适用于那些不需要访问用户私有数据的公开API,而这个接口要读取你自己站点的搜索数据,必须用OAuth 2.0来做身份验证。下面我一步步给你讲怎么用curl搞定整个流程:

为什么API密钥会报错?

首先得明确:Google Search Console的searchAnalytics.query属于需要用户授权的私有数据接口,API密钥仅能用于无需用户权限的公开服务(比如部分Google Maps接口)。所以你用API密钥请求必然会收到Request is missing required authentication credential错误,这是接口的设计限制,不是操作问题。

用OAuth 2.0 + CURL实现认证的完整步骤

假设你已经在Google Cloud控制台有了项目,并且启用了Search Console API,接下来按下面的步骤操作:

1. 创建OAuth客户端ID

  • 打开Google Cloud控制台的「API和服务」→「凭据」页面
  • 点击「创建凭据」→「OAuth客户端ID」
  • 应用类型选择桌面应用(因为是用curl这类本地工具调用),随便填个名称(比如“CURL-Search-Console”),然后点击创建
  • 保存生成的客户端ID客户端密钥,后面会频繁用到

2. 获取授权码

首先构造授权URL,把你的客户端ID填进去:

https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/webmasters.readonly
  • 替换YOUR_CLIENT_ID为你刚生成的客户端ID
  • 复制这个URL到浏览器打开,用你验证过域名的Google账号登录,授权这个应用访问你的Search Console数据
  • 授权成功后,页面会显示一个授权码,复制它(注意这个码只能用一次)

3. 换取访问令牌和刷新令牌

用curl发送POST请求,把授权码换成可用于调用接口的令牌(访问令牌有效期仅1小时,刷新令牌可以长期用来换新的访问令牌):

curl -X POST "https://oauth2.googleapis.com/token" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "code=YOUR_AUTHORIZATION_CODE" \
  -d "grant_type=authorization_code" \
  -d "redirect_uri=urn:ietf:wg:oauth:2.0:oob"

替换里面的YOUR_CLIENT_IDYOUR_CLIENT_SECRETYOUR_AUTHORIZATION_CODE为对应的值。

请求成功后,你会得到类似这样的JSON响应:

{
  "access_token": "ya29.a0AfH6SM...",
  "expires_in": 3599,
  "refresh_token": "1//0g...",
  "scope": "https://www.googleapis.com/auth/webmasters.readonly",
  "token_type": "Bearer"
}

务必保存好access_tokenrefresh_token,尤其是refresh_token,以后可以用它直接换新的访问令牌,不用再走授权流程。

4. 用访问令牌调用Search Analytics接口

现在用curl发送POST请求,带上访问令牌来获取你需要的页面和关键词数据:

curl -X POST "https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fwww.example.com%2F/searchAnalytics/query" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": "2021-04-01",
    "endDate": "2021-04-30",
    "dimensions": ["PAGE","QUERY"]
  }'
  • 替换YOUR_ACCESS_TOKEN为你刚拿到的访问令牌
  • 替换https%3A%2F%2Fwww.example.com%2F为你自己的站点URL(要和Search Console里的站点地址完全一致,必须是URL编码后的格式)

5. 用刷新令牌获取新的访问令牌(当旧令牌过期时)

访问令牌1小时后就会失效,不用重新走授权流程,直接用刷新令牌换:

curl -X POST "https://oauth2.googleapis.com/token" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "refresh_token=YOUR_REFRESH_TOKEN" \
  -d "grant_type=refresh_token"

替换对应的值,就能得到新的access_token,继续用来调用接口。

注意事项
  • 确保你的Google账号已经验证了目标站点,并且在Search Console里正式添加了该站点
  • 权限范围用webmasters.readonly就足够了,不需要写权限,更安全
  • 刷新令牌只要不主动在Google账号的「第三方应用权限」里撤销授权,就可以长期使用,所以要妥善保存,不要泄露

内容的提问来源于stack exchange,提问作者user2470281

火山引擎 最新活动