0

我的应用程序使用omniaauth 和omniauth-facebook gem 来连接facebook。我可以提取我需要的所有数据,但我无法呈现个人资料图片。

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

我试过这个:

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

还有这个:

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

但两者都没有奏效。

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

4

3 回答 3

1

您可以使用像Avatars.io这样的服务,它提供以下 URL 模式:

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

这种方法的优点之一是它也适用于其他服务。

于 2012-11-06T18:56:33.323 回答
1

利用:

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

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

于 2012-11-06T16:24:58.480 回答
0

这是解决方案。我不得不利用我通过这篇文章了解到的 CURB gem 。

最终,我把这个方法放在了我的应用程序助手中。

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" %>

请注意,该解决方案要求我对图形 URL 使用“https”而不是“http”。这最终将我重定向到与 http 不同的 URL,并且由于某种原因,如果您使用 HTTPS 拉取图片,Facebook 不会限制您下载和呈现图片的方式。

于 2012-11-06T18:35:07.017 回答