从Twitter检索中或大简介的图片与omniauth-叽叽喳喳(Retrieving Medium

2019-07-30 09:09发布

我使用omniauth,叽叽喳喳的宝石通过Twitter来验证用户身份。 我也使用自己的Twitter个人资料图片作为他们的头像在我的网站。 但是,我从Twitter获得的图像是低分辨率。 我知道Twitter已经提供更好的分辨率的照片。 如何获得呢?

这是我目前在做什么。 它是在用户模型的方法。 它的工作原理,只是没有得到我的好品质图:

user.rb

  def update_picture(omniauth)
    self.picture   = omniauth['info']['image'] 
  end

我想也许我可以一个大小选项转嫁到它在某种程度上,但似乎无法找到一个很好的解决方案。

Answer 1:

我使用的是omniauth,叽叽喳喳的宝石为好。 在我的用户模型apply_omniauth方法,我保存这样的Twitter图片路径,剥_normal后缀:

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

然后,我有所谓的肖像一个helper方法接受一个尺寸参数。 至于特伦斯·伊登建议,您只需更换文件名来访问的_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


Answer 2:

一旦你有图片的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

一个简单的正则表达式应该足够了。

请记住,图像的大小是不可预知的 - 所以你可能希望在您的网站显示之前调整其大小。



Answer 3:

一个更好的办法来做到这一点是通过的配置选项omniauth-twitter的宝石。

provider :twitter, "API_KEY", "API_SECRET", :image_size => 'original'

https://github.com/arunagw/omniauth-twitter



文章来源: Retrieving Medium or Large Profile Image from Twitter with omniauth-twitter