2011-08-24 73 views
2

我想做一个简单的GET与红宝石到Facebook的fql.query方法没有成功。Facebook FQL查询与红宝石

URL是基本的结构是这样的:

https://api.facebook.com/method/fql.query?query=SELECT total_count FROM link_stat WHERE url = "http://twitter.com/"&format=json 

我在这里的几个帖子StackOverflow上关于如何使这些要求阅读,但即使寿我不断收到:

的/ usr /lib/ruby/1.8/net/http.rb:560:in`initialize':getaddrinfo:名称或服务未知(SocketError)

在http_get函数的第一行。

def http_get(domain,path,params) 
    return Net::HTTP.get(domain, "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&'))) if not params.nil? 
    return Net::HTTP.get(domain, path) 
end 

def getFacebookStats(url) 

    params = { 
     :query => 'SELECT total_count FROM link_stat WHERE url = "' + url + '"', 
     :format => 'json' 
    } 

    http = http_get('https://api.facebook.com', '/method/fql.query', params) 
    puts http 

end 
+0

你已经采取了看看[考拉(https://github.com/arsduo/koala)? – Serabe

回答

1

HTTP调用接受主机,而不是一个URL:

def http_get(domain,path,params) 
    path = unless params.blank 
     path + "?" + params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&') 
     else 
     path 
    end 
    request = Net::HTTP.get(domain, path) 

end 

def get_facebook_stats(url) 

    params = { 
     :query => 'SELECT total_count FROM link_stat WHERE url = "' + url + '"', 
     :format => 'json' 
    } 

    http = http_get('api.facebook.com', '/method/fql.query', params) 
    puts http 

end 

不要在方法名上红宝石使用骆驼情况

如果你想HTTPS电话,你将不得不使用不同的电话:

require 'net/http' 
require 'net/https' 

http = Net::HTTP.new('somehost.com', 443) 
http.use_ssl = true 
path = '/login.html' 

resp, data = http.get(path, nil) 
+0

Thx,Maurício! 我会考虑笔记。 从URL中删除https解决了问题:) –