2012-01-09 11 views
5

Chcę zrobić odpowiednik np. this API explorer call przy użyciu google ruby API client.Uzyskiwanie dostępu do interfejsu API Google+ (Ruby) w trybie publicznym

To powinno być po prostu:

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]) 

jednak, że execute wyniki rozmów w ArgumentError: Missing access token.

ja nie chcą użytkowników zalogować; Chcę tylko uzyskać dostęp do danych publicznych. Jak mam to zrobic?

Odpowiedz

3

Sprawdziłem kod klienta i znalazłem kilka opcji.

Najpierw można utworzyć klienta API, który będzie wykonywał wszystkie żądania bez tokenu dostępu. Konstruktor jest prawdopodobnie nieco bardziej agresywny niż powinien określać domyślny. Aby obejść ten problem, możesz wykreślić metodę uwierzytelniania po utworzeniu klienta. Twój kod będzie wyglądać następująco:

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]) 

Alternatywnie, można zastąpić metodę uwierzytelniania na podstawie na żądanie. Byłeś bardzo blisko tego! Miałeś odpowiednią opcję, wystarczy przekazać go jako ostatecznego argumentu jak poniżej:

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]) 

Dzięki Allen do wniesienia tego jednego do mojej uwagi na Google+ :)

+1

'@client.authorization = nil' działało idealnie dla moich potrzeb. Chciałbym jednak zauważyć, że 'execute' zwraca pojedynczą wartość' Google :: APIClient :: Result', a nie tablicę 3-wartościową, więc bit 'status, headers, body =' jest niepoprawny ('response.status',' response.headers' i 'response.body' działają jednak). Złożę na to błąd. – Sai

+1

@Sai: Odpowiedź Jenny pochodzi ze starszej wersji alfa klienta. Obecna wersja zwraca obiekt 'Result', jak mówisz. –