2012-04-16 5 views
7

Pude hacer que un usuario inicia sesión con Twitter a través de OmniAuth (seguí Railscast # 235-6 e hice una aplicación simple). Ahora estoy tratando de mostrar el feed de Twitter del usuario conectado. ¿Alguien puede decirme cómo se hace esto? ¿Cómo inicializo Twitter? ¿Cómo paso el nombre de usuario y la contraseña del usuario que inició sesión? Soy nuevo en Rails, así que sería útil si supiera exactamente dónde poner el código. GraciasMostrar un feed de Twitter desde la aplicación Rails

+0

Puede ser esto http://stackoverflow.com/questions/1665213/best-way-to-display-a-twitter-feed-with-history-on-a-rails -site ayuda. – gayavat

+0

@gayavat Vi esa página. No muestra ningún código. Lo que necesito es saber exactamente qué tengo que escribir para obtener información del usuario registrado de Twitter. – katherine

+0

El último comentario apunta a http://www.arctickiwi.com/blog/download-you-twitter-feed-using-ruby-on-rails-with-oauth donde está presente el ejemplo de código – gayavat

Respuesta

17

En primer lugar, no necesita credenciales de usuario para obtener un feed de Twitter si es público. Mira el Twitter gem. Una vez que instale la gema, todo lo que tiene que hacer es:

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

ensayamos IRB para empezar. Bastante fácil, ¿verdad?

Ahora, es probable que desee utilizar su clave API porque Twitter limita las solicitudes anónimas, y puede ser problemático desde un servidor compartido. Hacer eso en 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 

obtener los valores reales de su página de Twitter desarrollador.

Finalmente, para ser realmente elegante, si desea ampliar, puede realizar la solicitud en nombre del usuario, utilizando las credenciales de OAuth que obtuvo de OmniAuth (NO su nombre de usuario y contraseña; no tiene aquellos). Eso le permitirá hacer muchas más solicitudes por segundo, ya que provienen de diferentes usuarios. Simplemente inicie Twitter con los campos consumer_key y consumer_secret configurados con las cosas que obtuvo del hash OmniAuth (consulte here, busque debajo de "credenciales" para ver cómo obtenerlos de OmniAuth).

+0

Gracias. No necesito ser elegante por el momento, pero me quedé colgado aquí, porque todavía no sé cómo poner esas cosas en el inicializador lleva a buscar los tweets del usuario conectado. ¿Podría mostrarme cómo usar el código de ejemplo que proporcionó (Twitter.user_timeline ("logged_in_users_username")) para hacer eso? – katherine

+0

Además, ¿a qué te refieres con "solo iniciar Twitter ..."? – katherine

+0

No entiendo su primera pregunta: el inicializador solo configura la joya de Twitter para que pueda conectarse a Twitter como su cuenta de desarrollador. La cosa 'user_timeline' es lo que usas en tu código para obtener los tweets del usuario. Usted conoce el manejo de Twitter del usuario (¿verdad?) Y usted sabe cómo obtener tweets para un identificador, para que los junte y obtenga los tweets de los usuarios que han iniciado sesión. –

0

clase 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 
Cuestiones relacionadas