我在App Engine上运行了Golang应用,我想调用Analytics API来处理一些指标。 App Engine和开发服务器上都有。
This page describes the overall procedure使用服务帐户进行服务器到服务器通信并使用OAuth2获取访问令牌。我想避免自己这样做,所以我找到Google APIs for Go以及描述how to do it for App Engine的以下内容。
我已将App Engine应用程序的服务帐户电子邮件添加到Google Analytics以供读取访问。
我使用Query Explorer进行了查询,效果很好。我甚至使用了来自此处的API查询URI,其中包含正确的访问令牌,并且工作正常。这适用于cURL或通过App Engine上的urlfetch调用它。
我需要的是在App Engine上以及使用开发服务器时自动获取访问令牌。
这里是一个URL缩短器的示例,已经过修改以使用Analytics API。
client := http.Client{
Transport: &oauth2.Transport{
Source: google.AppEngineTokenSource(c, analytics.AnalyticsScope),
Base: &urlfetch.Transport{Context: c},
},
}
svc, err := analytics.New(&client)
if err != nil {
return nil, err
}
data, err := svc.Data.Ga.Get("...")
开发服务器中的响应是 401 Invalid Credentials,authError。
这应该是这样的,还是我错过了什么?
更新
所以,问题已经解决了一半。当我传入服务帐户的电子邮件和.pem
文件时,它现在可以正常使用开发服务器。但是,App Engine中的同一个服务帐户无法使用上述代码!
googleapi: Error 403: User does not have any Google Analytics account., insufficientPermissions
用户应该是我已经在开发服务器上成功使用的服务帐户,因此我不太了解这个问题。它与App Engine和开发服务器上的代码完全相同。
Google Analytics设置为具有读取权限,我使用只读API。它已经在开发服务器上工作,所以应该没问题。
问题可能有什么不同?
答案 0 :(得分:1)
可以在开始时为开发服务器提供必要的信息,如here。
$ dev_appserver.py --appidentity_email_address email --appidentity_private_key_path file.pem
对于App Engine,您不需要使用此服务帐户,而是使用应用程序名称的服务帐户:
app_name@appspot.gserviceaccount.com