2012-07-20 64 views

回答

8

望着那寶石的文檔,這聽起來像你需要一個API密鑰,然後才能運行存在的方法:

很好,但如何在en.gravatar.com/site/implement/xmlrpc上公佈的API的其餘部分?嗯,你需要或者用戶的Gravatar密碼,或他們的API密鑰:

API = Gravatar.new( 「[email protected]」:API_KEY => 「AbCdEfG1234」)

api.exists ?(「[email protected]」)#=> true或false,取決於指定的電子郵件是否存在。

如果用戶沒有gravatar,將根據電子郵件爲他們生成一個圖像(至少這是我的經驗)。我使用了gem gravatar_image_tag - http://rubygems.org/gems/gravatar_image_tag,它允許您更改默認的gravatar圖像。

+0

這也許是另一種嘗試的方法:http://stackoverflow.com/questions/2103620/gravatar-how-do-i-know-if-a-user-has- a-real-picture?rq = 1 – someoneinomaha 2012-07-20 21:54:59

+0

好吧,我只是沒有抓住政治寶石vs gravatar。正如在gravatar文檔中所寫的,你可以很容易地將d =參數傳遞給圖像請求:404:如果沒有任何圖像,則不加載任何圖像是與電子郵件散列相關聯,而是返回一個HTTP 404(文件未找到)響應。我在尋找在提到的寶石 – 2012-07-21 16:06:02

38

如果人們想知道如何做到這一點沒有任何寶石:

關鍵是要獲得的gravatar圖像與虛假的默認圖像,然後檢查頭部響應。這是用Net :: HTTP ruby​​庫實現的。

require 'net/http' 

def gravatar?(user) 
    gravatar_check = "http://gravatar.com/avatar/#{Digest::MD5.hexdigest(user.gravatar_email.downcase)}.png?d=404" 
    uri = URI.parse(gravatar_check) 
    http = Net::HTTP.new(uri.host, uri.port) 
    request = Net::HTTP::Get.new(uri.request_uri) 
    response = http.request(request) 
    response.code.to_i != 404 # from d=404 parameter 
end 
+0

但是,如果電子郵件不存在,它不會回覆404,但與默認gravatar ,所以你怎麼能返回false? – 2013-10-13 22:51:54

+0

好吧,它可以在我最初沒有放過的'?d = 404'上工作! – 2013-10-13 22:55:51

+0

是的,如果沒有gravatar,那麼你會得到一個錯誤,因爲你提供虛假的默認圖片。 – 2014-02-17 16:43:26

1
if (response.code.to_i == 404) 
    return false 
else 
    return true 
end 

而是整塊的,只能使用這個(作爲最後一行):

response.code.to_i != 404 
相關問題