我只是想向google的托管model sample.movement发送一个请求。我不知道如何通过google授权oauth 2.0,而且我得到的时间是无限的。如果你能提供我的代码,这将是有帮助的。这就是我的工作。
client = Google::APIClient.new({:application_name => "CCE",:application_version => "1.0"} )
plus = client.discovered_api('prediction')
# Initialize OAuth 2.0 client
client.authorization.client_id = 'my client id'
client.authorization.client_secret = 'my client secret'
client.authorization.redirect_uri = 'my callback url'
client.authorization.scope = 'https://www.googleapis.com/auth/prediction'
# Request authorization
redirect_uri = client.authorization.authorization_uri
# Wait for authorization code then exchange for token
client.authorization.code = '....'
client.authorization.fetch_access_token!
# Make an API call
result = client.execute(
:api_method => plus.activities.list,
:parameters => {'hostedModelName' => 'sample.sentiment', 'userId' => ''})
`
最佳答案
好吧,web上的示例可能有点混乱,但是如果您想利用服务器-服务器通信—这意味着不涉及最终用户和浏览器,那么下面的代码应该对您有用:
先决条件:
您应该在google api控制台中生成一个“服务帐户”密钥。它会提示您下载一个私钥,您应该将其存储在磁盘的某个位置,例如client.p12
(或者使用原始名称,但为了清楚起见,我将使用较短的名称)。
client = Google::APIClient.new(
:application_name => "CCE",
:application_version => "1.0"
)
prediction = client.discovered_api('prediction', 'v1.5')
key = Google::APIClient::KeyUtils.load_from_pkcs12('client.p12', 'notasecret')
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/prediction',
:issuer => '..put here your developer email address from Google API Console..',
:signing_key => key,
)
client.authorization.fetch_access_token!
# Now you can make the API calls
result = client.execute(...
值得注意的是
client.discovered_api
调用似乎需要版本号。否则,它可能会引发异常“notfound”。密码短语实际上是字符串“notasecret”!
另一件事:在api调用中,请确保调用了正确的方法-对于托管模型,我相信您只能调用
:api_method => prediction.hostedmodels.predict
或类似的方法。我还没有使用托管模型。(see the API docs for details)result
调用返回的client.execute
的可能感兴趣的字段是:result.status
result.data['error']['errors'].map{|e| e['message']} # if they exist
JSON.parse(result.body)
如果您检查它们,它们可能会极大地帮助您调试任何问题。
关于ruby - 如何在Ruby中使用OAuth 2.0授权Google的预测性API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14391685/