2

Google のホストされているモデル sample.sentiment にリクエストを単純に送信しようとしています。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' => ''})

`

4

1 に答える 1

6

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」がスローされる可能性があります。

パスフレーズは実際には文字列 ' notasesecret ' です!

別のこと:API呼び出しでは、適切なメソッドを呼び出すことを確認してください-ホストされたモデルの場合、呼び出すことができる唯一のメソッドは:api_method => prediction.hostedmodels.predict、またはこのようなものだと思います。ホストされたモデルはまだ使用していません。(詳細については、API ドキュメントを参照してください)

呼び出しresultによって返される興味深いフィールドは次のとおりです。client.execute

result.status
result.data['error']['errors'].map{|e| e['message']} # if they exist
JSON.parse(result.body)

それらを調べると、問題のデバッグに大いに役立つでしょう。

于 2013-03-18T18:53:06.303 に答える