2012-07-11 13 views
6

私はtwitterを通してユーザーを認証するためにomniauth-twitter gemを使用しています。私は自分のサイトのアバターとして自分のTwitterプロフィール画像を使用しています。しかし、私がTwitterから取得する画像は低解像度です。私はTwitterがより良い解像度の写真を利用できることを知っている。どうすれば入手できますか?omniauth-twitterでTwitterから中規模または大規模のプロフィール画像を取得する

ここに私が現在行っていることがあります。これはユーザーモデルのメソッドです。それはちょうど私に良い品質の写真を取得していない、動作します:

user.rb

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

は、私は多分、私が何とかその上にサイズオプションを渡すことができると思ったが、良い解決策を見つけるように見えることはできません。

答えて

16

私はomniauth-twitter gemも使用しています。私のUserモデルのapply_omniauth方法では、私は_normal接尾辞を剥ぎ取り、このようなTwitterの画像パスを保存:

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

それから私はサイズ引数を受け入れ肖像画と呼ばれるヘルパーメソッドを持っています。テレンス・エデンが示唆するように、あなただけのthe different image sizes that Twitter providesにアクセスするには、ファイル名の _sizeサフィックスを置き換えることができます。

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 
+0

サブメソッドで "_normal"を取り除くためのソリューションとともに、より詳細で有用な答えを示します。ありがとう! –

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

+0

実際には、変更を加えたURLを保存するのではなく、.subメソッドを使用してビューに画像を読み込むときにurlを変更することにしました。user.picture.sub( "normal"、 "reasonably_small") – thatdankent

関連する問題