2011-11-23 281 views
1

当用户通过Facebook登录时,我想使用Facebook个人资料图像作为我的网站的个人资料图像。我使用omniauth gem进行Facebook登录。登录后,omniauth给出了一个Hash的形式,看起来像这样Facebook的回应:从Facebook获取图像名称image url

{ 
    "user_info" => { 
        "last_name" => "..........", 
        "image" => "http://graph.facebook.com/100002356868026/picture?type=square", 
        "first_name" => "........", 
        "email" => "[email protected]" 
        }, 
    "uid" => "..........." 
} 

在这里,我可以使用request.omniauth["user_info"]["image"]访问图像的URL,可以使用保存

require 'open-uri' 
image_url = request.omniauth["user_info"]["image"] 
image_data = open(image_url).read 
File.open("image.png", "wb") { |file| file << image_data } 

我想从网址获取图片名称。但是,Facebook的网址不包含名称(它是一个链接,重定向到另一个网址,其网址包含图像名称)。我如何解析url的图像名称?

回答

1

我不认为你可以从网址获得最终的图像名称。该图像存储在内容分发网络(CDN)上,该网络不是通过Facebook标识来传递图像,而是通过其他索引来传递图像。

为什么你想要最终的图像名称呢?您可以按照您引用的图像参数获取图像,它将直接返回用户的图像数据(如果可用,则返回一个虚拟图像)。

如果要将图像存储在服务器上,很可能会选择自己的命名方案。

重要提示:请仔细查看Facebook开发人员的条款!将用户图像存储在服务器上可能违反了这些条款。

如果可能的话,我会建议您不要在您的服务器上处理图像,而只是将图像参数包含在您的html图像标记中。

+0

yea ...我的担心是我想用这个图像作为个人资料图片..在一些地方,图像正在调整大小和显示..所以,如果我得到的图像,我可以调整图像大小..但我意识到这是一个坏主意..我应该在html图像标记中使用图像参数,并在html中指定宽度和高度。 – rubyprince

+1

我会建议这个。 facebook提供四种不同尺寸的用户图像,因此您可能会获得适当大小的图像。在你的问题中你使用了“type = square”。而不是“方块”,你可以使用“小”,“正常”或“大”。 – user562529