2012-07-20 18 views

risposta

8

Guardando la documentazione di quel gioiello, suona come è necessario una chiave API prima di poter eseguire il metodo esiste:

fine, ma come su il resto dell'API come pubblicizzato su en.gravatar.com/site/implement/xmlrpc? Beh, per questo è necessario sia la password Gravatar dell'utente, o la loro chiave API:

api = Gravatar.new ("[email protected]",: api_key => "AbCdEfG1234")

api.exists ? ("[email protected]") # => vero o falso, a seconda se l'email specificata esiste.

Se l'utente non ha un gravatar, verrà generata un'immagine per loro basata sull'e-mail (almeno questa è stata la mia esperienza). Ho utilizzato la gemma gravatar_image_tag - http://rubygems.org/gems/gravatar_image_tag che ti consente di modificare l'immagine gravatar predefinita.

+0

Questo è forse un altro approccio da provare: http://stackoverflow.com/questions/2103620/gravatar-how-do-i-know-if-a-user-has- a-real-picture? rq = 1 – someoneinomaha

+0

beh, io non ho preso la gemma della politica vs gravatar. Come scritto nella documentazione di gravatar puoi passare facilmente d = parametro a una richiesta di immagine: 404: non caricare alcuna immagine se non è associato all'hash email, invece restituisce una risposta HTTP 404 (File non trovata) .Che stavo cercando nella gemma menzionata –

38

Nel caso in cui la gente vorrebbe sapere come farlo senza gemme:

Il trucco è quello di ottenere un'immagine gravatar un'immagine predefinita falsa con e quindi controllare la risposta di intestazione. È realizzato con la libreria rubino Net :: HTTP.

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

Ma se l'e-mail non esiste, non risponde con 404, ma con il gravatar predefinito , quindi, come hai potuto restituire falso? –

+0

Ok, funziona con '? d = 404' che non ho inserito all'inizio! –

+0

Sì, questo è esattamente ciò che ti permette di ottenere un errore se non c'è gravatar, perché tu fornire un'immagine falsa predefinita –

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

Invece di tutto il blocco, utilizzare solo questo (come ultima riga):

response.code.to_i != 404 
Problemi correlati