如何在Google API(Ruby)WebmastersV3(服务帐户访问)中使用身份验证令牌

如何在Google API(Ruby)WebmastersV3(服务帐户访问)中使用身份验证令牌,ruby,google-api,service-accounts,google-api-ruby-client,google-api-webmasters,Ruby,Google Api,Service Accounts,Google Api Ruby Client,Google Api Webmasters,我无法将这两部分连接在一起:我能够对我的服务帐户进行身份验证,并且我知道如何形成从API检索所需信息的请求,但我不知道如何使用令牌对该请求进行身份验证 这将根据我为服务帐户获取的凭据文件构建一个对象,并成功生成令牌: 需要“googleauth” require 'google/apis/webmasters_v3' website = "https://example.com" scope = 'https://www.googleapis.com/auth/webmasters' aut

我无法将这两部分连接在一起:我能够对我的服务帐户进行身份验证,并且我知道如何形成从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
但是我需要以一种经过身份验证的方式构建它,也就是使用令牌——但是如果我不能添加参数怎么办

如何使用令牌构建对象

=====

查德威克·伍德的回应解决了这个问题。有一个后续问题,因为谷歌API使用了不一致的变量名,所以我在下面粘贴完整的工作代码(将服务用户添加到域的webmaster tools用户列表后工作)


我想你只需要补充一下:

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 ...

文档中哪里说web master api支持服务帐户?这是客户端库而不是api,生成库的所有api都是相同的,即使它们不支持某些东西。在文档或谷歌网站管理员工具中,它在哪里声明它支持服务帐户?亲爱的@DalmTo,请您非常友好地告诉我一种从Ruby访问Google Webmasters API的方法,这种方法不涉及服务帐户?您如何将服务帐户访问权委托给您的帐户,以便它可以读取数据?这必须使用Google云平台来完成。我相信谷歌在帮助中有一些关于设置服务帐户的文档。据我所知,你不能将服务帐户的访问权委托给WEb master tools api,因此我希望你解释一下你是如何做到这一点的。因为即使文档中也没有提到您可以将服务帐户与此API一起使用。Google cloud console与设置服务帐户对web主工具中包含的用户数据的权限无关。你如何让它访问这些数据。这是一个多步骤的过程,但本质上,是的,正如我所说,你是通过谷歌云平台来实现的。创建一个项目。然后将Google搜索控制台API添加到该项目中(在库下)。然后转到凭据,单击创建凭据,创建服务帐户,并授予其访问搜索控制台API的权限。如果你有具体的问题,我会尽量回答,但至少在告诉我我错了之前先尝试一下如果您正在寻找搜索控制台访问以外的其他内容,我不知道具体情况。
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 ...