2015-05-25 33 views
0

我想通过用户的access_token在Facebook上获取用户详细信息。 HTTPS需要启用。如何在ruby中处理'HTTP会话已经打开'错误?

get '/fbdetails' do 
uri = URI('https://graph.facebook.com/me?access_token=CAACEdEose0cBAMF7kse5oFQyygDDgOZCMQFvddZBEskIdxiNlmWd2Mzx3lLWZCoZCJZCjXnMN08NLe8Ts8UJoOd9XjNrJ9QG5BsZC9ahB0h9NcdSDZA0LDdjfmtiXnmimyNZBTTxv7UT1ZBcz2vbKj2DYZAAGdoy7woJEcu1ZAoFpzcpaa47mz0DLwgNPY6PZA0Vrc7ZAT9snEZC6XdiUZAkgUZARvhBIxlltqEEelAZD') 
Net::HTTP.start(uri.host, uri.port, 
:use_ssl => uri.scheme == 'https').start do |http| 
    request = Net::HTTP::Get.new uri.request_uri 
    response = http.request 
    end 
    return response 
end 

这里,IOError即HTTP会话已经打开。这种格式

需要JSON响应:

{ 
    "id": "10206515808233150", 
    "first_name": "Ashutosh", 
    "gender": "male", 
    "last_name": "Jha", 
    "link": "https://www.facebook.com/app_scoped_user_id/10206515808233150/", 
    "locale": "en_US", 
    "name": "Ashutosh Jha", 
    "timezone": 5.5, 
    "updated_time": "2015-02-17T16:38:08+0000", 
    "verified": true 
} 
+0

如何使用宝石考拉 - https://github.com/arsduo/koala – emaillenin

+0

雅这是一个简单的方法。谢谢 –

回答

2

有你的代码的两个错误。

(1)您使用了两次start方法,以至于发现“HTTP会话已经打开”错误。

Net::HTTP.start(uri.host, uri.port, 
:use_ssl => uri.scheme == 'https').start do |http|.... 

(2),错过http.request

response = http.request 

的参数,以便你的代码应该是:

uri = URI('https://graph.facebook.com/me?access_token=CAACEdEose0cBAMF7kse5oFQyygDDgOZCMQFvddZBEskIdxiNlmWd2Mzx3lLWZCoZCJZCjXnMN08NLe8Ts8UJoOd9XjNrJ9QG5BsZC9ahB0h9NcdSDZA0LDdjfmtiXnmimyNZBTTxv7UT1ZBcz2vbKj2DYZAAGdoy7woJEcu1ZAoFpzcpaa47mz0DLwgNPY6PZA0Vrc7ZAT9snEZC6XdiUZAkgUZARvhBIxlltqEEelAZD') 
Net::HTTP.start(uri.host, uri.port, 
:use_ssl => uri.scheme == 'https') do |http| 
    request = Net::HTTP::Get.new uri.request_uri 
    response = http.request request 
    #puts response.body 
    end 

您可以从ruby net/http library doc找到更多有用的信息。

+0

谢谢,这对我很有用。 –