我正在尝试使用 ruby 对 Facebook fql.query 方法执行简单的 GET,但没有成功。
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: Name or service not known (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
最佳答案
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
请不要在 Ruby 的方法名称上使用驼峰式大小写。
如果要进行 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)
关于ruby-on-rails - 使用 Ruby 的 Facebook FQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7178590/