2015-05-08 38 views
1

我正在構建一個報告工具來幫助社交媒體代理收集他們管理的帳戶的統計信息。我正在使用Twitter gem通過Twitter搜索查詢結果循環 - Ruby on Rails gem

我想收集一週內收到的帳戶的數量。

由於存在大量帳戶(大約70個,我們假設),我希望該工具使用一個用戶上下文來收集數據,而不是以不同的帳戶重複登錄和註銷。

據我所知,這意味着我不能使用mentions_timeline請求,因爲它需要特定的用戶上下文。

相反,我這樣做:

twitter_mentions = twitter(twitter_token, twitter_secret).search("@{account.twitter_handle}", options = { since: from_date, until: to_date, count: 100 }).count 

def from_date 
    9.days.ago.strftime("%Y-%m-%d") 
end 

def to_date 
    2.days.ago.strftime("%Y-%m-%d") 
end 

def twitter(token, secret) 
    Twitter::REST::Client.new do |config| 
    config.consumer_key  = ENV["twitter_api_key"] 
    config.consumer_secret  = ENV["twitter_api_secret"] 
    config.access_token  = token 
    config.access_token_secret = secret 
    end 
end 

唯一的問題是,返回鳴叫的最大數量限制爲100。我知道從the documentation,我可以使用max_id來也許會讓幾個單獨的調用,然後我可以總結一下,但是我在Ruby中優雅地構造它時遇到了困難。

任何幫助表示讚賞。

回答

0

我完全記不起我是如何處理這件事的,但可以用twitter live-streaming API直接「聆聽」twitter現場直播。

我已經使用tweetstream gem完成了我的一個項目。它實時接收tweets,並依次在每個tweets上運行一段代碼。從理論上講,只要不會一秒鐘返回多個結果,就可以刪除數據庫中的行。

下面是從我的項目(https://github.com/AJFaraday/Text-to-music/blob/master/scripts/twitter-search.rb)一些相關的代碼:(該get_twitter_auth方法是https://github.com/AJFaraday/Text-to-music/blob/master/lib/twitter-auth.rb,它存儲在twitter.yml文件最初的Twitter授權)

consumer_key, consumer_secret, oauth_token, oauth_token_secret = get_twitter_auth(config) 

TweetStream.configure do |config| 
    config.consumer_key  = consumer_key 
    config.consumer_secret = consumer_secret 
    config.oauth_token  = oauth_token 
    config.oauth_token_secret = oauth_token_secret 
    config.auth_method  = :oauth 
end 

# Set up new TweetStream client 
ts = TweetStream::Client.new 

ts.track("@username") do |status| 
    puts "[#{status.user.screen_name}] - #{status.source}" 
    puts status.text 
end 

希望這幫助。