繁体   English   中英

如何使用Google API Ruby客户端进行授权?

[英]How to authorize with the Google API Ruby client?

我想通过Google API从我的Google Analytics(分析)帐户中获取数据,并在我的一个仪表板上显示一些值。 如果可能,我想为此使用Ruby。

google-api-ruby-client似乎是一个不错的起点,我什至找到了一些有用的示例代码 ,这些代码对您有很大帮助,但是我无法正确授权我的请求。

在相同的示例代码中,有一部分显示了如何执行此操作,但是我不确定从哪里获取必要的密钥。

到目前为止,我已经做过的事情:

  1. https://console.developers.google.com上创建了一个项目
  2. 启用Analytics API
  3. 基于向导,我创建并下载了一个服务帐户密钥,如下所示:

     { "type": "service_account", "project_id": "xxx" "provate_key_id": "xxx", "private_key": "xxx", "client_email": "xxx", "client_id": "xxx", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "xxx" } 

但是,我不知道如何使用它。 也许我犯了一个错误,我需要从Google那里获取其他类型的密钥吗?

由于Google API的性质和企业安全性要求,这比普通的RESTful硅谷API稍微复杂一些。 我需要在过去的项目中执行此操作,我认为这会有所帮助。

首先,为了简化查询所需数据的过程,我使用了Legato ,它自称为“ Google Analytics Core Reporting and Management API的Ruby客户端”。

为了使Legato正常工作,您需要从Google获取OAuth令牌,该令牌会在一段时间后失效。

class AuthToken
  def self.retrieve
    new.retrieve
  end

  def retrieve(expires_in = 1.hour)
    client = Google::APIClient.new(application_name: 'YOUR APP NAME', application_version: '0.1')
    client.authorization = service_account('https://www.googleapis.com/auth/analytics.readonly', private_key).authorize
    OAuth2::AccessToken.new(oauth_client, client.authorization.access_token, expires_in: expires_in )
  end

private

  def oauth_client
    OAuth2::Client.new('', '', {
      authorize_url: authorize_url,
      token_url: token_url
    })
  end

  def service_account(scope, key)
    Google::APIClient::JWTAsserter.new(ENV['GOOGLE_SERVICE_EMAIL'], scope, key)
  end

  def private_key
    @private_key ||= Google::APIClient::PKCS12.load_key(
      ENV['GOOGLE_PRIVATE_KEY_PATH'],
      ENV['GOOGLE_PRIVATE_KEY_PASSPHRASE']
    )
  end

  def authorize_url
    'https://accounts.google.com/o/oauth2/auth'
  end

  def token_url
    'https://accounts.google.com/o/oauth2/token'
  end
end

假设您具有三个与Google提供的身份验证数据相对应的环境变量:

  1. GOOGLE_SERVICE_EMAIL,与JSON对象中的客户电子邮件相同。
  2. GOOGLE_PRIVATE_KEY_PATH,它指向您应该可以同时下载的.p12文件。
  3. GOOGLE_PRIVATE_KEY_PASSPHRASE,字面上应为“ notasecret”。

您可以像以下这样用连奏来使用该服务:

class ArticlePageviews
  extend Legato::Model
  metrics :pageviews
  dimensions :page_path
  filter(:only_articles) { contains :page_path, '/articles/' }
end

ga_user = Legato::User.new(AuthToken.retrieve)
ga_profile = ga_user.profiles.first

ArticlePageviews.only_articles.results(ga_profile)

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM