2012-07-20 70 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