2012-01-09 51 views
5

Tôi muốn thực hiện tương đương với ví dụ: this API explorer call bằng cách sử dụng google ruby API client.Truy cập API Google+ (Ruby) ở chế độ công khai

Đó nên được đơn giản:

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

Tuy nhiên, đó execute kết quả cuộc gọi trong ArgumentError: Missing access token.

tôi không muốn đăng nhập người dùng trong; Tôi chỉ muốn truy cập công khai dữ liệu. Làm thế nào để tôi làm điều này?

Trả lời

3

Tôi chọc xung quanh trong mã máy khách và tìm thấy một vài tùy chọn.

Trước tiên, bạn có thể tạo ứng dụng khách API sẽ thực hiện tất cả các yêu cầu mà không cần mã thông báo truy cập. Các nhà xây dựng có lẽ là một chút tích cực hơn nó nên được về việc xác định một mặc định. Để giải quyết vấn đề này, bạn có thể nil out phương thức xác thực sau khi đã tạo máy khách. Mã của bạn sẽ trông giống như sau:

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

Hoặc, bạn có thể ghi đè phương pháp xác thực trên cơ sở theo yêu cầu. Bạn đã khá gần với điều này! Bạn có tùy chọn đúng, bạn chỉ cần vượt qua nó trong như là đối số thức như thế này:

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

Nhờ Allen vì đã mang cái này đến sự chú ý của tôi trên Google+ :)

+1

'@client.authorization = nil' hoạt động hoàn hảo cho nhu cầu của tôi. Tôi sẽ lưu ý rằng mặc dù 'execute' trả về một giá trị' Google :: APIClient :: Result' duy nhất, không phải là mảng 3 giá trị, do đó, trạng thái ', tiêu đề, body =' bit sai ('response.status',' response.headers' và 'response.body' làm việc mặc dù). Tôi sẽ gửi một lỗi cho điều đó. – Sai

+1

@Sai: Câu trả lời của Jenny là từ phiên bản alpha cũ hơn của khách hàng. Phiên bản hiện tại trả về một đối tượng 'Result', như bạn nói. –

Các vấn đề liên quan