2011-08-24 68 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解決了問題:) –