5

たとえば、グーグルルビーAPIクライアントを使用してこのAPIエクスプローラー呼び出しと同等のことをしたいと思います。

それは単純なはずです:

require 'rubygems'
require 'google/api_client'
require 'httpadapter/adapters/net_http'

@client = Google::APIClient.new(
  :key => MY_SIMPLE_API_SERVER_KEY,
  :host => 'www.googleapis.com',
  :http_adapter => HTTPAdapter::NetHTTPAdapter.new, 
  :pretty_print => false
)
@plus = @client.discovered_api('plus', 'v1')

status, headers, body = @client.execute(
  @plus.people.list_by_activity,
  'activityId' => 'z12nspyxxufislit423eex442zqpdtqnk',
  'collection' => 'plusoners',
  'maxResults' => '100',
  'authenticated' => 'false'
)
public_activity = JSON.parse(body[0])

ただし、そのexecute呼び出しは結果としてArgumentError: Missing access token.

ユーザーをログインさせたくありません。公開データにアクセスしたいだけです。どうすればよいですか?

4

2 に答える 2

3

私はクライアントコードをざっと見て、いくつかのオプションを見つけました。

まず、アクセストークンなしですべてのリクエストを行うAPIクライアントを作成できます。コンストラクターは、デフォルトを指定する場合よりも、おそらく少し積極的です。これを回避するには、クライアントを作成した後で認証方法を無効にすることができます。コードは次のようになります。

require 'rubygems'
require 'google/api_client'
require 'httpadapter/adapters/net_http'

@client = Google::APIClient.new(
  :key => 'SOME_KEY',
  :host => 'www.googleapis.com',
  :http_adapter => HTTPAdapter::NetHTTPAdapter.new, 
  :pretty_print => false
)
@client.authorization = nil

@plus = @client.discovered_api('plus', 'v1')

status, headers, body = @client.execute(
  @plus.people.list_by_activity,
  'activityId' => 'z12nspyxxufislit423eex442zqpdtqnk',
  'collection' => 'plusoners',
  'maxResults' => '100'
)
public_activity = JSON.parse(body[0])

または、リクエストごとに認証方法を上書きすることもできます。あなたはこれにかなり近かったです!正しいオプションがありました。次のような最後の引数として渡す必要があります。

require 'rubygems'
require 'google/api_client'
require 'httpadapter/adapters/net_http'

@client = Google::APIClient.new(
  :key => 'SOME_KEY',
  :host => 'www.googleapis.com',
  :http_adapter => HTTPAdapter::NetHTTPAdapter.new, 
  :pretty_print => false
)
@plus = @client.discovered_api('plus', 'v1')

status, headers, body = @client.execute(
  @plus.people.list_by_activity,
  {'activityId' => 'z12nspyxxufislit423eex442zqpdtqnk',
  'collection' => 'plusoners',
  'maxResults' => '100'}, '', [], {:authenticated => false}
)
puts status
puts body
public_activity = JSON.parse(body[0])

これをGoogle+で注目してくれたAllenに感謝します:)

于 2012-01-10T02:11:42.060 に答える
0

https://developers.google.com/+/api/latest/people/listByActivity#examplesにあるサンプルのrubyコードとは異なるように見えるのは、追加のフィールド「認証済み」=>「false」だけです。

于 2012-01-10T00:03:49.100 に答える