我该如何检查是否存在gravatar?

时间:2012-07-20 15:29:11

标签: ruby-on-rails gravatar

使用这个宝石 https://github.com/sinisterchipmunk/gravatar 我如何检查指定电子邮件的格式是否存在?我想我错过了一些强制默认选项?因为这个

url = Gravatar.new("generic@example.com").image_url

总是返回图片

3 个答案:

答案 0 :(得分:41)

如果人们想知道怎么做而没有任何宝石:

诀窍是使用假默认图像获取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

答案 1 :(得分:8)

看一下gem的文档,听起来你需要一个API密钥才能运行exists方法:

  

很好,但是如en.gravatar.com/site/implement/xmlrpc所宣传的其他API怎么样?那么,你需要用户的Gravatar密码或他们的API密钥:

     

api = Gravatar.new(“generic@example.com”,:api_key =>“AbCdEfG1234”)

     

api.exists?(“another@example.com”)#=> true或false,具体取决于指定的电子邮件是否存在。

如果用户没有gravatar,将根据电子邮件为他们生成图像(至少这是我的经验)。我使用了gem gravatar_image_tag - http://rubygems.org/gems/gravatar_image_tag,可以让你更改默认的重力图像。

答案 2 :(得分:1)

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

而不是整个块,只使用它(作为最后一行):

response.code.to_i != 404