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版本的客户端。正如您所说,当前版本返回一个结果
对象。