需要帮助显示用户的个人资料照片而不保存它们

时间:2012-11-06 16:15:05

标签: ruby-on-rails facebook facebook-graph-api

我的应用使用omniaauth和omniauth-facebook gem与facebook连接。我可以下载我需要的所有数据,但是我无法渲染个人资料图片。

我想通过使用pic的URL显示用户的个人资料图片,而不是将其保存到磁盘。

我试过这个:

<%= image_tag "#{@user.facebook.info.image}" %>

以及:

<img src="http://graph.facebook.com/<UID>?fields=picture" > 

但两者都没有效果。

我在facebook文档中没有找到任何禁止我使用URL而不是保存到磁盘的内容。我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

使用:

<img src="http://graph.facebook.com/<UID>/picture" />

此端点返回301重定向到图片。使用?fields=返回一个json对象。

答案 1 :(得分:1)

您可以使用提供以下网址格式的Avatars.io服务:

http://avatars.io/facebook/:id
http://avatars.io/facebook/:username

这种方法的一个好处是它也适用于其他服务。

答案 2 :(得分:0)

这是解决方案。我必须利用CURB宝石,我通过this post了解到这一点。

最终,我将此方法放在我的应用程序助手中。

def redirect_location_for(url)
  uri_str = URI.encode(url)

  result = Curl::Easy.http_get(uri_str) do |curl|
    curl.follow_location = false
  end

  result.header_str.split('Location: ')[1].split(' ')[0]
end

然后我能够在我看来有这个。

<%= image_tag redirect_location_for("https://graph.facebook.com/<nickname>/picture?type=square"), :size => "60x60" %>

请注意,该解决方案要求我使用“https”而不是“http”作为图表网址。这最终将我重定向到与http不同的URL,并且出于某种原因,如果您使用HTTPS提取图片,Facebook不会限制您下载和渲染图片的方式。