2012-04-16 5 views
7

Ich konnte einen Benutzer mit Twitter über OmniAuth anmelden (ich folgte Railscast # 235-6 und machte eine einfache Anwendung). Jetzt versuche ich den Twitter-Feed des angemeldeten Benutzers anzuzeigen. Kann mir jemand sagen, wie das gemacht wird? Wie initialisiere ich Twitter? Wie gebe ich den Benutzernamen und das Passwort des angemeldeten Benutzers ein? Ich bin neu bei Rails, daher wäre es hilfreich, wenn ich genau wüsste, wo ich den Code ablegen soll. DankeEinen Twitter-Feed von einer Rails-App anzeigen

+0

dies auch sein mag http://stackoverflow.com/questions/1665213/best-way-to-display-a-twitter-feed-with-history-on-a-rails -Seite hilft. – gayavat

+0

@gayavat Ich habe diese Seite gesehen. Es zeigt keinen Code an. Was ich brauche, ist genau zu wissen, was ich eingeben muss, um Informationen vom Twitter des angemeldeten Benutzers abzurufen. – katherine

+0

Letzter Kommentar verweist auf http://www.arctickiwi.com/blog/download-you-twitter-feed-using-ruby-on-rails-with-oauth wo Code Beispiel vorhanden ist – gayavat

Antwort

17

Zuerst benötigen Sie keine Benutzeranmeldeinformationen, um einen Twitter-Feed zu erhalten, wenn es öffentlich ist. Schauen Sie sich die Twitter gem. Sobald Sie den Edelstein installiert haben, ist alles, was Sie tun müssen:

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

Versuchen Sie es in IRB, um loszulegen. Ziemlich einfach, oder?

Jetzt möchten Sie wahrscheinlich Ihren API-Schlüssel verwenden, da Twitter anonyme Anfragen einschränkt und dies von einem gemeinsam genutzten Server problematisch sein kann. Tun Sie das in einem 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 

die tatsächlichen Werte von Ihrer Twitter-Entwickler-Seite.

Schließlich, um wirklich schick zu werden, wenn Sie erweitern möchten, können Sie die Anfrage im Auftrag des Benutzers mit den OAuth-Anmeldeinformationen, die Sie von OmniAuth erhalten haben (nicht ihren Benutzernamen und ihr Passwort; Sie haben nicht jene). Dadurch können Sie viel mehr Anfragen pro Sekunde durchführen, weil sie von verschiedenen Benutzern kommen. Initialisiere Twitter einfach mit den Feldern consumer_key und consumer_secret, die auf die Sachen eingestellt sind, die du vom OmniAuth-Hash erhalten hast (siehe here, schau unter "credentials", um zu sehen, wie man sie von OmniAuth erhält).

+0

Danke. Ich muss jetzt noch nicht auf den Geschmack kommen, aber ich bleibe irgendwie hier hängen, weil ich immer noch nicht weiß, wie das Einbringen des Zeugs in den Initialisierer dazu führt, die Tweets des angemeldeten Benutzers zu holen. Könnten Sie mir bitte zeigen, wie Sie den Beispielcode verwenden, den Sie angegeben haben (Twitter.user_timeline ("logged_in_users_username")), um das zu tun? – katherine

+0

Also, was meinst du mit "Just initialize Twitter ..."? – katherine

+0

Ich verstehe Ihre erste Frage nicht - der Initialisierer konfiguriert nur das Twitter-Juwel, sodass Sie sich mit Twitter als Ihr Entwicklerkonto verbinden können. Die "user_timeline" -Ding ist, was Sie in Ihrem Code verwenden, um die Tweets des Benutzers zu erhalten. Sie kennen das Twitter-Handle des Benutzers (richtig?) Und Sie wissen, wie Sie Tweets für ein Handle bekommen, also fügen Sie sie zusammen und Sie erhalten die Tweets des eingeloggten Benutzers. –

0

Klasse 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 
Verwandte Themen