【问题标题】:How to use auth token in Google API (Ruby) WebmastersV3 (service account access)如何在 Google API (Ruby) WebmastersV3 中使用身份验证令牌(服务帐户访问)
【发布时间】:2019-12-26 10:19:27
【问题描述】:

我无法将这两个部分连接在一起:我能够验证我的服务帐户,并且我知道如何形成对我需要从 API 检索的信息的请求,但我不知道如何使该请求通过身份验证令牌。

这会根据我为服务帐户获取的凭据文件构建一个对象并成功生成令牌:

需要“googleauth”

require 'google/apis/webmasters_v3'

website = "https://example.com"

scope = 'https://www.googleapis.com/auth/webmasters'
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open('service-account.json'),
 scope: scope)
token = authorizer.fetch_access_token!

最终的请求是这样的

wt_service.query_search_analytics(website, {
  "startDate"=> "2019-12-01",
  "endDate"=> "2019-12-02",
  "dimensions"=> [
    "query"
  ]
})

但网站管理员工具 API 端点的对象不接受任何参数:

wt_service = Google::Apis::WebmastersV3::WebmastersService.new

但是我需要以某种经过身份验证的方式构建它,即使用令牌 - 但是如果我不能添加参数怎么办?!

如何使用令牌构建对象?

=====

Chadwick Wood 的回应解决了这个问题。由于 Google API 使用的变量名称不一致,因此出现了后续问题,因此我将完整的工作代码粘贴在下面(将服务用户添加到域的网站管理员工具用户列表后工作)

require 'googleauth'
require 'google/apis/webmasters_v3'

website = "https://example.com"

scope = 'https://www.googleapis.com/auth/webmasters'
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: File.open('service-account.json'),scope: scope)
token = authorizer.fetch_access_token!
wt_service = Google::Apis::WebmastersV3::WebmastersService.new
wt_service.authorization = authorizer
wt_service.authorization.apply(token)

request_object = {
  start_date: "2019-02-01",
  end_date: "2020-02-28",
  dimensions: ["query"]
}
params = Google::Apis::WebmastersV3::SearchAnalyticsQueryRequest.new(request_object)

res = wt_service.query_search_analytics(website, params)

【问题讨论】:

  • 文档中哪里说web master api支持服务账户?
  • 那是客户端库而不是 API,即使它们不支持某些内容,所有 api 的库都是相同的。它在文档或 Google 网站管理员工具中的哪个位置声明它支持服务帐户?
  • 亲爱的@DalmTo,您能不能非常好心地告诉我一种不涉及服务帐户的方式从 Ruby 访问 Google Webmasters API 的方法?

标签: ruby google-api service-accounts google-api-ruby-client google-api-webmasters


【解决方案1】:

我认为你只需要添加:

wt_service.authorization = authorizer

... 在您创建服务之后,在您进行查询之前。所以:

authorizer = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: File.open('service-account.json'), scope: scope)
wt_service = Google::Apis::WebmastersV3::WebmastersService.new
wt_service.authorization = authorizer
wt_service.query_search_analytics ...

【讨论】:

  • 如何将服务帐户的访问权限委托给您的帐户,以便它可以读取数据?
  • 这必须使用谷歌云平台来完成。 console.cloud.google.comGoogle 在帮助中有一些关于设置服务帐户的文档,我相信。
  • 据我所知,您不能将服务帐户的访问权限委托给 WEB 主工具 api,所以我希望您解释一下您是如何做到这一点的。由于甚至文档都没有提到您可以使用此 API 的服务帐户。谷歌云控制台与设置服务帐户与网站管理员工具中包含的用户数据的关联无关。您如何授予它访问该数据的权限。
  • 这是一个多步骤的过程,但本质上,是的,正如我所说,您是通过 Google Cloud Platform 完成的。创建一个项目。然后将 Google Search Console API 添加到该项目(在库下)。然后转到凭据并单击创建凭据,创建一个服务帐户,并为其授予对 Search Console API 的访问权限。如果您有具体问题,我会尝试回答,但至少在告诉我我错了之前尝试一下。 ;)
  • 如果您要寻找的不是 Search Console 访问权限,我不知道具体情况。
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2022-01-06
  • 2013-09-23
  • 1970-01-01
相关资源
最近更新 更多