2012-07-20 18 views
7

usando esta gema https://github.com/sinisterchipmunk/gravatar ¿cómo puedo verificar si existe o no gravatar para el correo electrónico especificado? Creo que me falta alguna opción de fuerza por defecto? Debido a que este¿Cómo debo verificar si existe Gravatar?

url = Gravatar.new("[email protected]").image_url 

siempre devuelven una imagen

+0

¿Has probado con una dirección de correo electrónico no válida que no sea 'genérica @ example.com'? –

+0

Sí, lo intenté, el mismo resultado :-( –

Respuesta

8

En cuanto a la documentación de la gema, que suena como que necesita una clave de API antes de poder ejecutar el existe método:

Bien, pero ¿qué tal el resto de la API tal como se publicita en es.gravatar.com/site/implement/xmlrpc? Bueno, para eso se necesita contraseña, ya sea Gravatar del usuario o su clave de API:

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

api.exists ? ("[email protected]") # => verdadero o falso, según exista el correo electrónico especificado.

Si el usuario no tiene un gravatar, se generará una imagen para ellos basada en el correo electrónico (al menos esa ha sido mi experiencia). He usado la gema gravatar_image_tag - http://rubygems.org/gems/gravatar_image_tag que le permite cambiar la imagen predeterminada de Gravatar.

+0

Este es quizás otro enfoque para probar: http://stackoverflow.com/questions/2103620/gravatar-how-do-i-know-if-a-user-has- a-real-picture? rq = 1 – someoneinomaha

+0

bueno, simplemente no capté la gema política vs gravatar. Como en la documentación de gravatar puedes pasar fácilmente d = parámetro a una solicitud de imagen: 404: no cargar ninguna imagen si no hay ninguna está asociado con el hash del correo electrónico, en su lugar devuelve una respuesta HTTP 404 (Archivo no encontrado). Lo que estaba buscando en la gema mencionada –

38

En caso de personas les gustaría saber cómo hacerlo sin ningún tipo de gemas:

El truco es conseguir que la imagen gravatar una imagen predeterminada con falsa y luego comprobar la respuesta de cabecera. Se logra con la biblioteca 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

Pero si el correo electrónico no existe, no responde con 404, pero con el gravatar predeterminado Entonces, ¿cómo podría devolver el resultado falso? –

+0

Ok, funciona con '? d = 404' que no puse al principio! –

+0

Sí, eso es exactamente lo que le permite obtener un error si no hay gravatar, porque usted proporcionar una imagen predeterminada falsa. –

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

En lugar de todo el bloque, utilice sólo esto (como la última línea):

response.code.to_i != 404 
Cuestiones relacionadas