从Facebook图片网址获取图片名称

时间:2011-11-23 07:09:50

标签: ruby-on-rails ruby facebook open-uri

当用户通过Facebook登录时,我想使用Facebook个人资料图片作为我网站的个人资料图片。我正在使用omniauth gem进行Facebook登录。登录后,omniauth以Hash的形式给出了Facebook响应,如下所示:

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

在这里,我可以使用request.omniauth["user_info"]["image"]访问图片网址,并可以使用

保存
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网址不包含名称(这是一个重定向到其网址包含图片名称的另一个网页的链接)。如何从网址解析图像名称?

1 个答案:

答案 0 :(得分:1)

我认为您无法从网址获取最终图片名称。图像存储在内容传送网络(CDN)中,该网络不是通过facebook id传送图像,而是通过其他索引传送图像。

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

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

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

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