使用omniauth-twitter从Twitter获取中等或大型个人资料图片

6
我将使用omniauth-twitter gem来通过Twitter认证用户。我还将使用他们的Twitter个人资料图片作为我的网站上的头像。然而,我从Twitter获取的图片分辨率很低。我知道Twitter有更好的分辨率图片可用。我该怎么办?
以下是我目前正在做的事情。这是用户模型中的一个方法。它可以工作,但无法获得高质量的图片: user.rb
  def update_picture(omniauth)
    self.picture   = omniauth['info']['image'] 
  end

我认为或许可以通过某种方式传递一个大小选项,但似乎找不到一个好的解决方案。

3个回答

16

我也在使用omniauth-twitter宝石。在我的用户模型的apply_omniauth方法中,我这样保存Twitter图像路径,去除了_normal后缀:

if omniauth['provider'] == 'twitter'
    self.image = omniauth['info']['image'].sub("_normal", "")
end

然后我有一个名为portrait的辅助方法,该方法接受一个大小参数。如Terence Eden建议的那样,您可以只需替换文件名的_size后缀以访问Twitter提供的不同图片尺寸

def portrait(size)

    # Twitter
    # mini (24x24)                                                                  
    # normal (48x48)                                            
    # bigger (73x73)                                                
    # original (variable width x variable height)

    if self.image.include? "twimg"

        # determine filetype        
        case 
        when self.image.downcase.include?(".jpeg")
            filetype = ".jpeg"
        when self.image.downcase.include?(".jpg")
            filetype = ".jpg"
        when self.image.downcase.include?(".gif")
            filetype = ".gif"
        when self.image.downcase.include?(".png")
            filetype = ".png"
        else
            raise "Unable to read filetype of Twitter image for User ##{self.id}"
        end

        # return requested size
        if size == "original"
            return self.image
        else
            return self.image.gsub(filetype, "_#{size}#{filetype}")
        end

    end

end

这个答案提供了更详细和有用的解决方案,包括使用sub方法删除“_normal”。谢谢! - Brett Chalupa

8

一旦您获得图像的URL,就非常简单了。您需要从URL末尾删除“_normal”。

这是我的头像图像

https://si0.twimg.com/profile_images/2318692719/7182974111_ec8e1fb46f_s_normal.jpg

这是更大的版本。

https://si0.twimg.com/profile_images/2318692719/7182974111_ec8e1fb46f_s.jpg

一个简单的正则表达式就可以解决问题。

请注意,图片的尺寸是不可预测的 - 因此在在网站上显示之前,您可能希望将其调整大小。


1
你说的“一个简单的正则表达式”我没听懂,我会尝试一下。您有任何关于如何最好将正则表达式添加到我的方法的建议吗?谢谢。 - thatdankent
实际上,我决定在将图像加载到视图中时使用.sub方法修改url,而不是保存带有修改的url,如下所示:user.picture.sub("normal", "reasonably_small")。 - thatdankent

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接