2012-04-16 31 views
7

Tôi đã có thể có người dùng đăng nhập bằng Twitter qua OmniAuth (tôi đã theo dõi Railscast # 235-6 và tạo một ứng dụng đơn giản). Bây giờ tôi đang cố gắng hiển thị nguồn cấp dữ liệu Twitter của người dùng đã đăng nhập. Bất cứ ai có thể cho tôi biết làm thế nào điều này được thực hiện? Làm thế nào để khởi tạo Twitter? Làm cách nào để chuyển tên người dùng và mật khẩu của người dùng đã đăng nhập? Tôi mới sử dụng Rails nên sẽ rất hữu ích nếu tôi biết chính xác vị trí đặt mã. Cảm ơnHiển thị nguồn cấp dữ liệu Twitter từ ứng dụng Rails

+0

Có thể này http://stackoverflow.com/questions/1665213/best-way-to-display-a-twitter-feed-with-history-on-a-rails -site giúp. – gayavat

+0

@gayavat Tôi đã xem trang đó. Nó không hiển thị bất kỳ mã nào. Những gì tôi cần là biết chính xác những gì tôi phải nhập vào để lấy thông tin từ Twitter của người dùng đã đăng nhập. – katherine

+0

Điểm nhận xét cuối cùng về http://www.arctickiwi.com/blog/download-you-twitter-feed-using-ruby-on-rails-with-oauth trong đó ví dụ về mã hiện diện – gayavat

Trả lời

17

Trước tiên, bạn không cần thông tin đăng nhập của người dùng để nhận nguồn cấp dữ liệu Twitter nếu công khai. Nhìn vào số Twitter gem. Khi bạn cài đặt đá quý, tất cả những gì bạn cần làm là:

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

Hãy dùng thử trong IRB để bắt đầu. Khá dễ, phải không?

Bây giờ, bạn có thể muốn sử dụng khóa API của mình vì Twitter giới hạn các yêu cầu ẩn danh và có thể có vấn đề với máy chủ được chia sẻ. Làm điều đó trong một số 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 

Lấy giá trị thực tế từ trang nhà phát triển Twitter của bạn.

Cuối cùng, để thực sự ưa thích, nếu bạn muốn mở rộng quy mô, bạn có thể yêu cầu thay mặt người dùng bằng thông tin xác thực OAuth mà bạn nhận được từ OmniAuth (KHÔNG phải tên người dùng và mật khẩu của họ; những, cái đó). Điều đó sẽ cho phép bạn thực hiện nhiều yêu cầu hơn mỗi giây, bởi vì chúng đến từ những người dùng khác nhau. Chỉ cần khởi tạo Twitter với các trường consumer_keyconsumer_secret được đặt thành nội dung bạn nhận được từ băm OmniAuth (xem here, xem trong "thông tin đăng nhập" để xem cách tải chúng từ OmniAuth).

+0

Cảm ơn. Tôi không cần phải có được ưa thích chỉ được nêu ra, nhưng tôi là loại trái treo ở đây, bởi vì tôi vẫn không biết làm thế nào đặt công cụ đó trong initializer dẫn đến lấy tweets của người dùng đăng nhập. Bạn có thể vui lòng chỉ cho tôi cách sử dụng mã ví dụ bạn đã cung cấp (Twitter.user_timeline ("logged_in_users_username")) để làm điều đó không? – katherine

+0

Ngoài ra, ý bạn là gì "Chỉ cần khởi tạo Twitter ..."? – katherine

+0

Tôi không hiểu câu hỏi đầu tiên của bạn - trình khởi tạo chỉ định cấu hình đá quý Twitter để bạn có thể kết nối với Twitter làm tài khoản nhà phát triển của mình. Điều 'user_timeline' là thứ bạn sử dụng trong mã của mình để nhận các tweet của người dùng. Bạn biết xử lý Twitter của người dùng (phải không?) Và bạn biết cách để có được tweets cho một xử lý, vì vậy bạn đặt chúng lại với nhau và bạn nhận được tweet của người dùng đã đăng nhập. –

0

lớp 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 
Các vấn đề liên quan