嘿所以我知道我能做到
(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。
答案 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)