· 6 years ago · Jul 19, 2019, 03:24 AM
1require "rubygems"
2require "twitter"
3require "json"
4
5# things you must configure
6TWITTER_USER = "your_username"
7MAX_AGE_IN_DAYS = 1 # anything older than this is deleted
8
9# get these from dev.twitter.com
10CONSUMER_KEY = "your_consumer_key"
11CONSUMER_SECRET = "your_consumer_secret"
12OAUTH_TOKEN = "your_oauth_token"
13OAUTH_TOKEN_SECRET = "your_oauth_secret"
14
15# any special favorites?
16IDS_TO_SAVE_FOREVER = [369855688836538368] # my panini tweet
17
18### you shouldn't have to change anything below this line ###
19
20MAX_AGE_IN_SECONDS = MAX_AGE_IN_DAYS*24*60*60
21NOW_IN_SECONDS = Time.now
22
23TWEETS_PER_REQUEST = 200
24
25### A METHOD ###
26
27def delete_from_twitter(tweet, client)
28 begin
29 client.destroy_status(tweet.id)
30 rescue StandardError => e
31 puts e.inspect
32 puts "Error deleting #{tweet.id}; exiting"
33 exit
34 else
35 puts "Deleted #{tweet.id}"
36 end
37end
38
39### WE BEGIN ###
40
41client = Twitter::REST::Client.new do |config|
42 config.consumer_key = CONSUMER_KEY
43 config.consumer_secret = CONSUMER_SECRET
44 config.access_token = OAUTH_TOKEN
45 config.access_token_secret = OAUTH_TOKEN_SECRET
46end
47
48puts ""
49puts "What's that sound...?"
50puts ""
51
52tweets = []
53got_tweets = true
54oldest_tweet_id = 9000000000000000000
55
56while got_tweets do
57 begin
58 new_tweets = client.user_timeline(TWITTER_USER, {:count => TWEETS_PER_REQUEST,
59 :max_id => oldest_tweet_id,
60 :include_entities => false,
61 :include_rts => true})
62
63 if (new_tweets.length > 0) then
64 puts "Got #{new_tweets.length} more tweets, latest is #{new_tweets.last.id}"
65 oldest_tweet_id = new_tweets.last.id - 1
66 tweets += new_tweets
67 else
68 got_tweets = false
69 end
70
71 rescue Twitter::Error::TooManyRequests => e
72 puts "Hit the rate limit; pausing for #{e.rate_limit.reset_in} seconds"
73 sleep e.rate_limit.reset_in
74 retry
75
76 rescue StandardError => e
77 puts e.inspect
78 exit
79 end
80end
81
82puts ""
83puts "Got #{tweets.length} tweets total"
84puts ""
85
86tweets.each do |tweet|
87 begin
88 tweet_age = NOW_IN_SECONDS - tweet.created_at
89 tweet_age_in_days = (tweet_age/(24*60*60)).round
90 if (tweet_age < MAX_AGE_IN_SECONDS) then
91 puts "Ignored a tweet #{tweet_age_in_days} days old"
92 elsif IDS_TO_SAVE_FOREVER.include?(tweet.id) then
93 puts "Ignored a tweet that is to be saved forever"
94 else
95 puts "Deleting a tweet #{tweet_age_in_days} days old"
96 delete_from_twitter(tweet, client)
97 end
98
99 puts " #{tweet.text}"
100 puts ""
101
102 rescue Twitter::Error::TooManyRequests => e
103 puts "Hit the rate limit; pausing for #{e.rate_limit.reset_in} seconds"
104 sleep e.rate_limit.reset_in
105 retry
106
107 rescue StandardError => e
108 puts e.inspect
109 exit
110 end
111end