Google api 访问谷歌&x2B;公共模式下的(Ruby)API

Google api 访问谷歌&x2B;公共模式下的(Ruby)API,google-api,google-plus,google-api-client,Google Api,Google Plus,Google Api Client,我想做与使用相同的操作 这应该是简单的: 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

我想做与使用相同的操作

这应该是简单的:

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:缺少访问令牌。


我不想让用户登录;我只想访问公共数据。如何做到这一点?

唯一与示例ruby代码不同的是额外的字段“authenticated”=>“false”。

我在客户端代码中找到了几个选项

首先,您可以创建一个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])
或者,您可以基于每个请求覆盖身份验证方法。你离这个很近!您有正确的选项,只需将其作为最终参数传入,如下所示:

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+上提醒我注意这一点:)

没有指定
authenticated
@client.authorization=nil
的相同结果非常适合我的需要。不过我要注意的是,
execute
返回一个
Google::APIClient::Result
值,而不是一个3值数组,因此
状态、标题、正文=
位是错误的(
响应.status
响应.headers
响应.body
确实有效)。我将为此提交一个bug。@Sai:Jenny的答案来自于旧的alpha版本的客户端。正如您所说,当前版本返回一个
结果
对象。