2011-11-23 282 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