2012-07-11 15 views
6

Sto utilizzando omniauth-twitter gem per autenticare gli utenti tramite Twitter. Sto anche usando la loro immagine del profilo Twitter come avatar per il mio sito. Tuttavia, l'immagine che ricevo da Twitter è a bassa risoluzione. So che Twitter ha a disposizione foto con risoluzione migliore. Come lo ottengo?Recupero dell'immagine di profilo medio o grande da Twitter con omniauth-twitter

Ecco cosa sto facendo attualmente. È un metodo nel modello utente. Funziona, semplicemente non mi ottenere una buona qualità pic:

user.rb

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

ho pensato che forse avrei potuto passare un opzione di dimensione su di esso in qualche modo, ma non riesco a trovare una buona soluzione .

risposta

16

Sto usando anche la gemma omniauth-twitter. Nel metodo apply_omniauth del mio modello d'uso, risparmio il percorso dell'immagine Twitter come questo, spogliando il suffisso _normal:

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

poi ho un metodo di supporto chiamato ritratto che accetta un argomento dimensioni. Come suggerisce Terence Eden, si può semplicemente sostituire il _size suffisso del nome del file per l'accesso the different image sizes that Twitter provides:

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

Questa risposta fornisce una risposta più dettagliata e utile, insieme alla soluzione per rimuovere "_normal" con il metodo sub. Grazie! –

8

Una volta ottenuto l'URL dell'immagine, è piuttosto semplice. È necessario rimuovere "_normal" dalla fine dell'URL.

Ecco il mio avatar immagine

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

Ecco la versione più grande

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

Una semplice espressione regolare dovrebbe essere sufficiente.

Ricorda che la dimensione dell'immagine è imprevedibile, quindi potresti voler ridimensionarla prima di visualizzarla sul tuo sito.

+1

mi persi a "Una semplice espressione regolare" :) Ci proverò fuori. Qualche raccomandazione su come aggiungere il regex al metodo che ho io? Grazie. – thatdankent

+0

In realtà, invece di salvare l'url con le modifiche, ho deciso di modificare l'url durante il caricamento dell'immagine nella vista con il metodo .sub in questo modo: user.picture.sub ("normal", "reasonably_small") – thatdankent

Problemi correlati