5

我想使用google ruby​​ 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])

感谢Allen在 Google+ 上让我注意到这一点 :)

于 2012-01-10T02:11:42.060 回答
0

唯一看起来与https://developers.google.com/+/api/latest/people/listByActivity#examples上的示例 ruby​​ 代码不同的是额外字段 'authenticated' => 'false'。

于 2012-01-10T00:03:49.100 回答