changeset 137:00dc9346dfaa

Skip self retweets
author nanaya <me@nanaya.pro>
date Wed, 13 Dec 2017 03:44:43 +0900
parents 59991d10f8a3
children 7907fe886675
files app/models/tweet.rb
diffstat 1 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/app/models/tweet.rb	Wed Dec 13 02:52:22 2017 +0900
+++ b/app/models/tweet.rb	Wed Dec 13 03:44:43 2017 +0900
@@ -1,4 +1,11 @@
 class Tweet
+  TIMELINE_OPTIONS = {
+    :count => 100,
+    :exclude_replies => false,
+    :include_rts => true,
+    :tweet_mode => :extended,
+  }
+
   def initialize(twitter_id)
     @clients = {}
     @twitter_id = twitter_id
@@ -14,7 +21,13 @@
     @timeline ||=
       Rails.cache.fetch({ :timeline => @twitter_id }, :expires_in => cache_expires_time) do
         begin
-          client.user_timeline(@twitter_id, :count => 100, :exclude_replies => false, :include_rts => true, :tweet_mode => :extended)
+          client.user_timeline(@twitter_id, TIMELINE_OPTIONS).select do |tweet|
+            tweet.retweeted_status.nil? || tweet.user.id != tweet.retweeted_status.user.id
+          end.map do |tweet|
+            # Fails when there's Twitter::NullObject initiated somewhere in previous select
+            # Reference: https://github.com/sferik/twitter/issues/892
+            tweet.to_h
+          end
         rescue Twitter::Error::TooManyRequests
           @client_config_id += 1
 
@@ -24,6 +37,8 @@
             retry
           end
         end
+      end.map do |tweet_hash|
+        Twitter::Tweet.new(tweet_hash)
       end
   end