[英]How to authorize with the Google API Ruby client?
I want to fetch data from my google analytics account via google's API, and to display some values on one of my dashboards. 我想通过Google API从我的Google Analytics(分析)帐户中获取数据,并在我的一个仪表板上显示一些值。 I want to use Ruby for this, if possible. 如果可能,我想为此使用Ruby。
The google-api-ruby-client seems like a good place to start, and I have even found some useful sample code that helps out a lot, but I am faling to properly authorize my requests. google-api-ruby-client似乎是一个不错的起点,我什至找到了一些有用的示例代码 ,这些代码对您有很大帮助,但是我无法正确授权我的请求。
In the same sample code, there is a part that shows how to do it but I am not sure where to get the necessary keys. 在相同的示例代码中,有一部分显示了如何执行此操作,但是我不确定从哪里获取必要的密钥。
Things that I've done so far: 到目前为止,我已经做过的事情:
Based on a wizard, I have created and downloaded a service account key that looks like: 基于向导,我创建并下载了一个服务帐户密钥,如下所示:
{ "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" }
But, I can't figure out how to use it. 但是,我不知道如何使用它。 Maybe I've made a mistake, and I need to fetch some other kind of key from Google? 也许我犯了一个错误,我需要从Google那里获取其他类型的密钥吗?
Due to the nature of Google's API and the enterprise security requirements, this is a little more complicated than your average RESTful, Silicon Valley API. 由于Google API的性质和企业安全性要求,这比普通的RESTful硅谷API稍微复杂一些。 I needed to do this on a past project, and I think this will help. 我需要在过去的项目中执行此操作,我认为这会有所帮助。
First, to make querying for the data I needed easier, I used Legato , which self-describes as a “Ruby Client for the Google Analytics Core Reporting and Management API”. 首先,为了简化查询所需数据的过程,我使用了Legato ,它自称为“ Google Analytics Core Reporting and Management API的Ruby客户端”。
In order to get Legato working, you need to obtain an OAuth token from Google, which expires after a while. 为了使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
This assumes you have three environment variables corresponding to the authentication data that Google provided you: 假设您具有三个与Google提供的身份验证数据相对应的环境变量:
.p12
file you should have been able to download at the same time. GOOGLE_PRIVATE_KEY_PATH,它指向您应该可以同时下载的.p12
文件。 You can utilize the service with legato like so: 您可以像以下这样用连奏来使用该服务:
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)
Best of luck! 祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.