Доступ к API Google+ (Ruby) в публичном режиме - PullRequest
5 голосов
/ 10 января 2012

Я хочу сделать эквивалент, например, этого вызова API Explorer с помощью клиента Google ruby ​​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.

I не не хочет входить в систему;Я только хочу получить доступ к общедоступным данным.Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Я покопался в коде клиента и нашел пару вариантов.

Сначала вы можете создать клиент 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+:)

0 голосов
/ 10 января 2012

Единственное, что выглядит иначе, чем пример кода ruby ​​на https://developers.google.com/+/api/latest/people/listByActivity#examples, - это дополнительное поле «authenticated» => «false».

...