如何使用服务账户无客户端库调用Google Analytics Core Reporting API获取数据
Google Analytics Core Reporting API 直接发起HTTP请求方案
可行性说明
这种实现方式完全可行。谷歌服务账户的身份验证本质是遵循OAuth 2.0的JWT授权流程,官方的各类语言客户端库只是对这个流程做了封装,你完全可以手动实现整个流程,无需依赖第三方库。
具体实现步骤
1. 生成符合要求的JWT签名
你下载的JSON格式密钥文件中,client_email和private_key是核心字段,需要用这两个字段生成JWT:
- JWT头部固定为如下格式:
{ "alg": "RS256", "typ": "JWT" }
- JWT载荷需要包含以下字段:
iss:填入密钥文件中的client_email字段值scope:填入https://www.googleapis.com/auth/analytics.readonly,只读权限足够拉取页面浏览量数据aud:填入https://oauth2.googleapis.com/tokenexp:令牌过期时间,取值为当前Unix时间戳加3600,令牌最长有效期为1小时iat:当前Unix时间戳
- 先对头部和载荷分别做Base64Url编码,用
.拼接两个编码结果后,使用密钥文件中的private_key通过RS256算法签名,最后将「头部编码.载荷编码.签名」拼接得到完整的JWT字符串。
2. 用JWT换取访问令牌(access_token)
向地址https://oauth2.googleapis.com/token发起POST请求,请求体格式为application/x-www-form-urlencoded,携带两个参数:
grant_type:固定取值为urn:ietf:params:oauth:grant-type:jwt-bearerassertion:填入上一步生成的完整JWT字符串
请求成功后会返回包含access_token的响应,该令牌有效期为1小时,过期后需要重新生成JWT换取新的令牌。
3. 携带令牌调用API拉取page views数据
向Core Reporting API接口发起GET请求,在请求头中添加Authorization: Bearer {替换为你获取到的access_token},请求参数根据你的查询需求设置,拉取页面浏览量的核心必填参数示例:
ids:格式为ga:{你的GA视图ID}start-date:统计开始日期,可填相对时间如7daysAgo,也可填固定日期如2024-01-01end-date:统计结束日期,格式同start-datemetrics:填ga:pageviews即可返回页面浏览量指标
其他可选参数如dimensions、sort、filters可根据实际查询需求自行添加。
注意事项
- 提前将服务账户的
client_email添加到你的Google Analytics账号的用户列表中,赋予只读权限,否则会返回权限不足的错误 - JWT签名必须使用RS256算法,使用其他算法会导致验证失败
- 不要长期缓存access_token,建议每次执行拉取任务前重新生成令牌,避免过期导致请求失败
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

