2012-07-11 7 views
6

Estoy usando omniauth-twitter gem para autenticar usuarios a través de twitter. También estoy usando su imagen de perfil de Twitter como su avatar para mi sitio. Sin embargo, la imagen que obtengo de Twitter es de baja resolución. Sé que Twitter tiene mejores fotos de resolución disponibles. ¿Como lo consigo?Recuperando Imagen de Perfil Medio o Grande de Twitter con omniauth-twitter

Esto es lo que estoy haciendo actualmente. Es un método en el modelo de usuario. Funciona, simplemente no me conseguir una buena calidad de imagen:

user.rb

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

pensé que tal vez podría pasar a una opción de tamaño en él de alguna manera, pero parece que no puede encontrar una buena solución .

Respuesta

16

Estoy usando la gema omniauth-twitter también. En el método apply_omniauth de mi modelo de usuario, ahorro el recorrido de la imagen Twitter como este, pelar el _normal sufijo:

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

entonces tengo un método de ayuda llamado retrato que acepta un argumento de tamaño. Como Terence Eden sugiere, puede simplemente reemplazar la _size sufijo del nombre de archivo para el acceso 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

Esta respuesta proporciona una respuesta más detallada y útil, junto con la solución para eliminar el "_normal" con el submétodo. ¡Gracias! –

8

Una vez que tenga la URL de la imagen, es bastante simple. Debe eliminar el "_normal" del final de la URL.

aquí está mi imagen de avatar

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

Aquí está la versión más grande

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

debería ser suficiente una expresión regular simple.

Recuerde que el tamaño de la imagen es impredecible, por lo que le recomendamos cambiar el tamaño antes de mostrarla en su sitio.

+1

me perdieron en "Una simple expresión regular" :) Voy a probarlo. ¿Alguna recomendación sobre la mejor forma de agregar la expresión regular al método que tengo? Gracias. – thatdankent

+0

En realidad, en lugar de guardar la url con las modificaciones, decidí modificar la url al cargar la imagen en la vista con el método .sub como lo siguiente: user.picture.sub ("normal", "reasonable_small") – thatdankent

Cuestiones relacionadas