2012-07-11 12 views
6

मैं ट्विटर के माध्यम से उपयोगकर्ताओं को प्रमाणीकृत करने के लिए omniauth-twitter मणि का उपयोग कर रहा हूं। मैं अपनी साइट प्रोफाइल छवि का उपयोग अपनी साइट के लिए उनके अवतार के रूप में भी कर रहा हूं। हालांकि, ट्विटर से प्राप्त छवि कम संकल्प है। मुझे पता है कि ट्विटर में बेहतर रिज़ॉल्यूशन चित्र उपलब्ध हैं। मैं इसे कैसे लूं?ट्विटर से मध्यम या बड़ी प्रोफ़ाइल छवि को पुनर्प्राप्त करना omniauth-twitter

यह वही है जो मैं वर्तमान में कर रहा हूं। यह उपयोगकर्ता मॉडल में एक विधि है। यह काम करता है, बस मुझे एक अच्छी गुणवत्ता पिक नहीं प्राप्त करता है:

user.rb

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

मैं शायद सोचा था कि मैं किसी भी तरह यह पर एक आकार विकल्प दे सकते हैं, लेकिन एक अच्छी समाधान खोजने के लिए नहीं कर पा रहे ।

उत्तर

16

मैं omniauth-twitter मणि का भी उपयोग कर रहा हूं। मेरे उपयोगकर्ता मॉडल की apply_omniauth विधि में, मैं इस तरह ट्विटर छवि पथ बचाने के लिए, _normal प्रत्यय अलग करना:

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

यह उत्तर उप विधि के साथ "असामान्य" को हटाने के समाधान के साथ, एक और विस्तृत और उपयोगी उत्तर देता है। धन्यवाद! –

8

एक बार जब आपके पास छवि का 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 

एक साधारण regex पर्याप्त होना चाहिए है।

याद रखें, छवि का आकार अप्रत्याशित है - इसलिए आप इसे अपनी साइट पर प्रदर्शित करने से पहले इसे आकार बदलना चाहेंगे।

+1

तुम मुझे "एक साधारण रेगुलर एक्सप्रेशन" में खो :) मैं इसे बाहर की कोशिश करेंगे। मेरे पास विधि में रेगेक्स को सबसे अच्छा कैसे जोड़ना है इस पर कोई सिफारिशें? धन्यवाद। – thatdankent

+0

दरअसल, संशोधनों के साथ यूआरएल को सहेजने के बजाय, मैंने .sub विधि के साथ दृश्य में छवि लोड करते समय यूआरएल को संशोधित करने का निर्णय लिया: user.picture.sub ("normal", "reasonably_small") – thatdankent

2

यह करने के लिए एक बेहतर तरीका omniauth-twitter मणि की config विकल्पों के माध्यम से है।

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

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