由于 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 提供给您的身份验证数据相对应的环境变量:
- GOOGLE_SERVICE_EMAIL,与您在 JSON 对象中的客户端电子邮件相同。
- GOOGLE_PRIVATE_KEY_PATH,它指向您应该能够同时下载的
.p12 文件。
- 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)
祝你好运!