我想通过谷歌的API获取谷歌分析帐户的数据,并在我的某个仪表板上显示一些值。如果可能的话,我想使用Ruby。
google-api-ruby-client似乎是一个很好的起点,我甚至发现了一些帮助很多的useful sample code,但我正在努力正确授权我的请求。
在相同的示例代码中,有一部分shows how to do it,但我不知道从哪里获得必要的密钥。
到目前为止我所做的事情:
根据向导,我创建并下载了一个服务帐户密钥,如下所示:
{
"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"
}
但是,我无法弄清楚如何使用它。也许我犯了一个错误,我需要从谷歌那里取一些其他类型的密钥?
答案 0 :(得分:1)
由于Google API的性质和企业安全要求,这比一般的RESTful硅谷API要复杂一些。我需要在过去的项目中这样做,我认为这会有所帮助。
首先,为了更轻松地查询我需要的数据,我使用了Legato,它自我描述为“Google Analytics核心报告和管理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为您提供的身份验证数据相对应的环境变量:
.p12
文件。您可以像这样使用legato服务:
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)
祝你好运!