2012-04-16 11 views
7

Sono stato in grado di consentire a un utente di accedere con Twitter tramite OmniAuth (ho seguito Railscast n. 235-6 e ho creato una semplice applicazione). Ora sto cercando di visualizzare il feed Twitter dell'utente che ha effettuato l'accesso. Qualcuno può dirmi come è fatto? Come inizializzare Twitter? Come posso passare il nome utente e la password dell'utente connesso? Sono nuovo di Rails quindi sarebbe utile se sapessi esattamente dove mettere il codice. GrazieVisualizzazione di un feed Twitter da un'app Rails

+0

Può essere questo http://stackoverflow.com/questions/1665213/best-way-to-display-a-twitter-feed-with-history-on-a-rails -site aiuta. – gayavat

+0

@gayavat Ho visto quella pagina. Non mostra alcun codice. Quello di cui ho bisogno è sapere esattamente cosa devo digitare per recuperare le informazioni dal Twitter dell'utente che ha effettuato l'accesso. – katherine

+0

Ultimo commento punta a http://www.arctickiwi.com/blog/download-you-twitter-feed-using-ruby-on-rails-with-oauth dove è presente l'esempio di codice – gayavat

risposta

17

In primo luogo, non è necessario disporre delle credenziali dell'utente per ottenere un feed Twitter se è pubblico. Guarda lo Twitter gem. Una volta installato il gioiello, tutto quello che dovete fare è:

require 'twitter' 
Twitter.user_timeline("icambron") 

Prova ora a IRB per iniziare. Abbastanza facile, vero?

Ora, probabilmente si desidera utilizzare la chiave API perché Twitter limita le richieste anonime e può essere problematico da un server condiviso. Farlo in un initializer:

Twitter.configure do |config| 
    config.consumer_key = YOUR_CONSUMER_KEY 
    config.consumer_secret = YOUR_CONSUMER_SECRET 
    config.oauth_token = YOUR_OAUTH_TOKEN 
    config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET 
end 

ottenere i valori reali dalla tua pagina sviluppatore Twitter.

Infine, per essere davvero fantasioso, se si desidera scalare, è possibile effettuare la richiesta per conto dell'utente, utilizzando le credenziali OAuth ottenute da OmniAuth (NON il nome utente e la password, non si dispone quelli). Ciò ti consentirà di fare molte più richieste al secondo, perché provengono da utenti diversi. Basta inizializzare Twitter con i campi consumer_key e consumer_secret impostati su quello che hai ottenuto dall'hash OmniAuth (vedi here, guarda sotto "credenziali" per vedere come ottenerli da OmniAuth).

+0

Grazie. Non ho ancora bisogno di essere sofisticato, ma sono rimasto un po 'in sospeso qui, perché ancora non so come mettere quell'inizializzatore a riportare i tweet dell'utente connesso. Potresti mostrarmi come usare il codice di esempio che hai fornito (Twitter.user_timeline ("logged_in_users_username")) per farlo? – katherine

+0

Inoltre, cosa intendi con "Basta inizializzare Twitter ..."? – katherine

+0

Non capisco la tua prima domanda: l'inizializzatore configura semplicemente la gemma di Twitter in modo che tu possa collegarti a Twitter come account del tuo sviluppatore. La cosa 'user_timeline' è ciò che usi nel tuo codice per ottenere i tweet dell'utente. Conosci l'handle di Twitter dell'utente (giusto?) E sai come ottenere i tweet per un handle, quindi li metti insieme e ottieni i tweet dell'utente connesso. –

0

classe Tweet

BASE_URL = "http://api.twitter.com/1.1/statuses/user_timeline.json" 
    SCREEN_NAME = "OMGFacts" 
    MAX_TWEETS = 10000 

    CONSUMER_KEY = "PMiAyrY5cASMnmbd1tg" 
    CONSUMER_SECRET = "0TYRYg0hrWBsr1YZrEJvS5txfA9O9aWhkEqcRaVtoA" 

    class << self 
     def base_url 
     BASE_URL 
     end 

     def screen_name 
     SCREEN_NAME 
     end 

     def url(count = MAX_TWEETS) 
     params = {:screen_name => screen_name, :count => count} 
     [base_url, params.to_param].join('?') 
     end 

     def prepare_access_token(oauth_token, oauth_token_secret) 
     consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, 
      { :site => "http://api.twitter.com", 
      :scheme => :header, 
      }) 
     # now create the access token object from passed values 
     token_hash = { :oauth_token => oauth_token, 
         :oauth_token_secret => oauth_token_secret, 
         :open_timeout => 500000000 
        } 
     access_token = OAuth::AccessToken.from_hash(consumer, token_hash) 
     return access_token 
     end 

     def get(count = MAX_TWEETS) 
     count = Preference.get(:2000).to_i 
     access_token = prepare_access_token("178394859-cJlRaiQvqVusPAPjqC2Nn7r3Uc7wWsGua7sGHzs","3T8LCZTYXzuPLGzmWX1yRnKs1JFpfJLKemoo59Piyl8") 
     response = JSON.parse access_token.request(:get, url).body 

     response[0...count] 
     end 

    end 

    end 
Problemi correlati