无法获取另一个数组中不存在的前25个值

时间:2015-04-01 10:32:37

标签: ruby-on-rails twitter

嘿所以我知道我能做到

(array - array 2).first(25)

并获得比较两个数组时不存在的前25个值,但是我的情况有点困难。

我有一个Twitter应用程序,用于存储搜索查询。我每小时运行一次后台作业,有时如果查询不那么受欢迎,我可能会保存相同的查询。但是我特别希望得到第一个25.有时候我只得到18,因为我有一个模型验证,推文ID必须是用户唯一的。

我所知道的是,twitter搜索会为您提供最近100条结果的推文。因此,为了对抗这种情况,我想做的是映射当前的推文ID,并在查询中使用它,然后获得前25个结果。

问题是我需要存储更多信息,而不仅仅是推文ID,如果没有,它会像显示的代码一样简单。所以这就是我目前所拥有的:

def save_keyword
    active_campaigns = campaigns.where(live: true)
    total_keywords = active_campaigns.count.to_i
    tweet_amount = (get_tweets_per_hour / total_keywords).to_f.floor rescue 0
    begin
      active_campaigns.each do |campaign|
        self.twitter.search(campaign.keyword, result_type: 'recent').take(tweet_amount).map do |tweet|
          favorites.create do |favorite|
            favorite.tweet_id     = tweet.id
            favorite.owner_id     = tweet.user.id
            favorite.campaign_id  = campaign.id
          end
        end
      end
    rescue Twitter::Error::TooManyRequests => error
      sleep error.rate_limit.reset_in + 1
      retry
    rescue Twitter::Error::Unauthorized => error
      logger.error 'Unauthorized access'
    rescue => error
      logger.error 'save_keyword error'
    end
end

正如我所说,我存储了诸如owner_id,tweet_id和广告系列ID之类的信息。所以我需要创建一个给我的代码,或者继续保存关键字,直到它为25。

1 个答案:

答案 0 :(得分:0)

您可以通过查询Favorite并使用推文ID过滤结果来实现此目的:

old_tweets = Favorite.where( campaign_id: campaign.id ).pluck(:tweet_id)
tweets = self.twitter.search(campaign.keyword, result_type: 'recent')
new_tweets = tweets.reject { |t| old_tweets.include?(t.id) }.take(tweet_amount)