t 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/t/cli.rb +22 -51
- data/lib/t/collectable.rb +13 -13
- data/lib/t/delete.rb +6 -6
- data/lib/t/list.rb +2 -2
- data/lib/t/printable.rb +18 -18
- data/lib/t/search.rb +33 -33
- data/lib/t/stream.rb +18 -18
- data/lib/t/version.rb +2 -2
- data/spec/cli_spec.rb +883 -1004
- data/spec/delete_spec.rb +51 -43
- data/spec/fixtures/following.json +1 -0
- data/spec/fixtures/not_following.json +1 -0
- data/spec/fixtures/search.json +1 -456
- data/spec/fixtures/statuses.json +1 -1285
- data/spec/helper.rb +5 -0
- data/spec/list_spec.rb +165 -158
- data/spec/search_spec.rb +318 -245
- data/spec/set_spec.rb +14 -14
- data/spec/stream_spec.rb +307 -0
- data/t.gemspec +2 -2
- metadata +12 -6
data/README.md
CHANGED
@@ -44,7 +44,7 @@ Once you've verified that Ruby is installed:
|
|
44
44
|
|
45
45
|
## Configuration
|
46
46
|
|
47
|
-
Twitter requires OAuth for
|
47
|
+
Twitter API v1.1 requires OAuth for all of its functionality, so you'll need a
|
48
48
|
registered Twitter application. If you've never registered a Twitter
|
49
49
|
application before, it's easy! Just sign-in using your Twitter account and the
|
50
50
|
fill out the short form at <http://dev.twitter.com/apps/new>. If you've
|
data/lib/t/cli.rb
CHANGED
@@ -319,10 +319,10 @@ module T
|
|
319
319
|
end
|
320
320
|
end
|
321
321
|
count = options['number'] || DEFAULT_NUM_RESULTS
|
322
|
-
|
322
|
+
tweets = collect_with_count(count) do |opts|
|
323
323
|
client.favorites(user, opts)
|
324
324
|
end
|
325
|
-
|
325
|
+
print_tweets(tweets)
|
326
326
|
end
|
327
327
|
map %w(faves favourites) => :favorites
|
328
328
|
|
@@ -491,10 +491,10 @@ module T
|
|
491
491
|
method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
|
492
492
|
def mentions
|
493
493
|
count = options['number'] || DEFAULT_NUM_RESULTS
|
494
|
-
|
494
|
+
tweets = collect_with_count(count) do |opts|
|
495
495
|
client.mentions(opts)
|
496
496
|
end
|
497
|
-
|
497
|
+
print_tweets(tweets)
|
498
498
|
end
|
499
499
|
map %w(replies) => :mentions
|
500
500
|
|
@@ -516,25 +516,6 @@ module T
|
|
516
516
|
end
|
517
517
|
end
|
518
518
|
|
519
|
-
desc "rate_limit", "Returns information related to Twitter API rate limiting."
|
520
|
-
method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
|
521
|
-
def rate_limit
|
522
|
-
rate_limit_status = client.rate_limit_status
|
523
|
-
if options['csv']
|
524
|
-
require 'csv'
|
525
|
-
require 'fastercsv' unless Array.new.respond_to?(:to_csv)
|
526
|
-
say ["Hourly limit", "Remaining hits", "Reset time"].to_csv
|
527
|
-
say [rate_limit_status.hourly_limit, rate_limit_status.remaining_hits, csv_formatted_time(rate_limit_status, :reset_time)].to_csv
|
528
|
-
else
|
529
|
-
array = []
|
530
|
-
array << ["Hourly limit", number_with_delimiter(rate_limit_status.hourly_limit)]
|
531
|
-
array << ["Remaining hits", number_with_delimiter(rate_limit_status.remaining_hits)]
|
532
|
-
array << ["Reset time", "#{ls_formatted_time(rate_limit_status, :reset_time)} (#{time_from_now_in_words(rate_limit_status.reset_time)} from now)"]
|
533
|
-
print_table(array)
|
534
|
-
end
|
535
|
-
end
|
536
|
-
map %w(ratelimit rl) => :rate_limit
|
537
|
-
|
538
519
|
desc "reply STATUS_ID MESSAGE", "Post your Tweet as a reply directed at another person."
|
539
520
|
method_option "all", :aliases => "-a", :type => "boolean", :default => false, :desc => "Reply to all users mentioned in the Tweet."
|
540
521
|
method_option "location", :aliases => "-l", :type => :boolean, :default => false
|
@@ -588,7 +569,7 @@ module T
|
|
588
569
|
method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
|
589
570
|
def retweets(user=nil)
|
590
571
|
count = options['number'] || DEFAULT_NUM_RESULTS
|
591
|
-
|
572
|
+
tweets = if user
|
592
573
|
require 't/core_ext/string'
|
593
574
|
user = if options['id']
|
594
575
|
user.to_i
|
@@ -603,7 +584,7 @@ module T
|
|
603
584
|
client.retweeted_by_me(opts)
|
604
585
|
end
|
605
586
|
end
|
606
|
-
|
587
|
+
print_tweets(tweets)
|
607
588
|
end
|
608
589
|
map %w(rts) => :retweets
|
609
590
|
|
@@ -654,28 +635,6 @@ module T
|
|
654
635
|
end
|
655
636
|
end
|
656
637
|
|
657
|
-
desc "suggest [USER]", "Returns a listing of Twitter users' accounts you might enjoy following."
|
658
|
-
method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
|
659
|
-
method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
|
660
|
-
method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
|
661
|
-
method_option "number", :aliases => "-n", :type => :numeric, :default => DEFAULT_NUM_RESULTS, :desc => "Limit the number of results."
|
662
|
-
method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
|
663
|
-
method_option "sort", :aliases => "-s", :type => :string, :enum => %w(favorites followers friends listed screen_name since tweets tweeted), :default => "screen_name", :desc => "Specify the order of the results.", :banner => "ORDER"
|
664
|
-
method_option "unsorted", :aliases => "-u", :type => :boolean, :default => false, :desc => "Output is not sorted."
|
665
|
-
def suggest(user=nil)
|
666
|
-
if user
|
667
|
-
require 't/core_ext/string'
|
668
|
-
user = if options['id']
|
669
|
-
user.to_i
|
670
|
-
else
|
671
|
-
user.strip_ats
|
672
|
-
end
|
673
|
-
end
|
674
|
-
limit = options['number'] || DEFAULT_NUM_RESULTS
|
675
|
-
users = client.recommendations(user, :limit => limit)
|
676
|
-
print_users(users)
|
677
|
-
end
|
678
|
-
|
679
638
|
desc "timeline [USER]", "Returns the #{DEFAULT_NUM_RESULTS} most recent Tweets posted by a user."
|
680
639
|
method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
|
681
640
|
method_option "id", :aliases => "-i", :type => "boolean", :default => false, :desc => "Specify user via ID instead of screen name."
|
@@ -691,15 +650,15 @@ module T
|
|
691
650
|
else
|
692
651
|
user.strip_ats
|
693
652
|
end
|
694
|
-
|
653
|
+
tweets = collect_with_count(count) do |opts|
|
695
654
|
client.user_timeline(user, opts)
|
696
655
|
end
|
697
656
|
else
|
698
|
-
|
657
|
+
tweets = collect_with_count(count) do |opts|
|
699
658
|
client.home_timeline(opts)
|
700
659
|
end
|
701
660
|
end
|
702
|
-
|
661
|
+
print_tweets(tweets)
|
703
662
|
end
|
704
663
|
map %w(tl) => :timeline
|
705
664
|
|
@@ -716,10 +675,22 @@ module T
|
|
716
675
|
method_option "csv", :aliases => "-c", :type => :boolean, :default => false, :desc => "Output in CSV format."
|
717
676
|
method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
|
718
677
|
method_option "reverse", :aliases => "-r", :type => :boolean, :default => false, :desc => "Reverse the order of the sort."
|
678
|
+
method_option "sort", :aliases => "-s", :type => :string, :enum => %w(country name parent type woeid), :default => "name", :desc => "Specify the order of the results.", :banner => "ORDER"
|
719
679
|
method_option "unsorted", :aliases => "-u", :type => :boolean, :default => false, :desc => "Output is not sorted."
|
720
680
|
def trend_locations
|
721
681
|
places = client.trend_locations
|
722
|
-
places =
|
682
|
+
places = case options['sort']
|
683
|
+
when 'country'
|
684
|
+
places.sort_by{|places| places.country.downcase}
|
685
|
+
when 'parent'
|
686
|
+
places.sort_by{|places| places.parent_id.to_i}
|
687
|
+
when 'type'
|
688
|
+
places.sort_by{|places| places.place_type.downcase}
|
689
|
+
when 'woeid'
|
690
|
+
places.sort_by{|places| places.woeid.to_i}
|
691
|
+
else
|
692
|
+
places.sort_by{|places| places.name.downcase}
|
693
|
+
end unless options['unsorted']
|
723
694
|
places.reverse! if options['reverse']
|
724
695
|
if options['csv']
|
725
696
|
require 'csv'
|
data/lib/t/collectable.rb
CHANGED
@@ -12,19 +12,19 @@ module T
|
|
12
12
|
|
13
13
|
def collect_with_cursor(collection=[], cursor=-1, &block)
|
14
14
|
object = retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
|
15
|
-
yield
|
15
|
+
yield(cursor)
|
16
16
|
end
|
17
17
|
collection += object.collection
|
18
18
|
object.last? ? collection.flatten : collect_with_cursor(collection, object.next_cursor, &block)
|
19
19
|
end
|
20
20
|
|
21
21
|
def collect_with_max_id(collection=[], max_id=nil, &block)
|
22
|
-
|
23
|
-
yield
|
22
|
+
tweets = retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
|
23
|
+
yield(max_id)
|
24
24
|
end
|
25
|
-
return collection if
|
26
|
-
collection +=
|
27
|
-
|
25
|
+
return collection if tweets.nil?
|
26
|
+
collection += tweets
|
27
|
+
tweets.empty? ? collection.flatten : collect_with_max_id(collection, tweets.last.id - 1, &block)
|
28
28
|
end
|
29
29
|
|
30
30
|
def collect_with_number(number, key, &block)
|
@@ -34,9 +34,9 @@ module T
|
|
34
34
|
opts[:max_id] = max_id unless max_id.nil?
|
35
35
|
opts[key] = number unless number >= MAX_NUM_RESULTS
|
36
36
|
if number > 0
|
37
|
-
|
38
|
-
number -=
|
39
|
-
|
37
|
+
tweets = yield opts
|
38
|
+
number -= tweets.length
|
39
|
+
tweets
|
40
40
|
end
|
41
41
|
end.flatten.compact
|
42
42
|
end
|
@@ -50,12 +50,12 @@ module T
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def collect_with_page(collection=[], page=1, &block)
|
53
|
-
|
53
|
+
tweets = retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do
|
54
54
|
yield page
|
55
55
|
end
|
56
|
-
return collection if
|
57
|
-
collection +=
|
58
|
-
|
56
|
+
return collection if tweets.nil?
|
57
|
+
collection += tweets
|
58
|
+
tweets.empty? ? collection.flatten.uniq : collect_with_page(collection, page + 1, &block)
|
59
59
|
end
|
60
60
|
|
61
61
|
end
|
data/lib/t/delete.rb
CHANGED
@@ -58,8 +58,8 @@ module T
|
|
58
58
|
require 't/core_ext/string'
|
59
59
|
status_ids.map!(&:to_i)
|
60
60
|
if options['force']
|
61
|
-
|
62
|
-
|
61
|
+
tweets = client.unfavorite(status_ids)
|
62
|
+
tweets.each do |status|
|
63
63
|
say "@#{@rcfile.active_profile[0]} unfavorited @#{status.from_user}'s status: \"#{status.full_text}\""
|
64
64
|
end
|
65
65
|
else
|
@@ -96,16 +96,16 @@ module T
|
|
96
96
|
require 't/core_ext/string'
|
97
97
|
status_ids.map!(&:to_i)
|
98
98
|
if options['force']
|
99
|
-
|
100
|
-
|
101
|
-
say "@#{@rcfile.active_profile[0]} deleted the
|
99
|
+
tweets = client.status_destroy(status_ids, :trim_user => true)
|
100
|
+
tweets.each do |status|
|
101
|
+
say "@#{@rcfile.active_profile[0]} deleted the Tweet: \"#{status.full_text}\""
|
102
102
|
end
|
103
103
|
else
|
104
104
|
status_ids.each do |status_id|
|
105
105
|
status = client.status(status_id, :include_my_retweet => false, :trim_user => true)
|
106
106
|
return unless yes? "Are you sure you want to permanently delete @#{status.from_user}'s status: \"#{status.full_text}\"? [y/N]"
|
107
107
|
client.status_destroy(status_id, :trim_user => true)
|
108
|
-
say "@#{@rcfile.active_profile[0]} deleted the
|
108
|
+
say "@#{@rcfile.active_profile[0]} deleted the Tweet: \"#{status.full_text}\""
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
data/lib/t/list.rb
CHANGED
@@ -116,10 +116,10 @@ module T
|
|
116
116
|
def timeline(list)
|
117
117
|
owner, list = extract_owner(list, options)
|
118
118
|
per_page = options['number'] || DEFAULT_NUM_RESULTS
|
119
|
-
|
119
|
+
tweets = collect_with_per_page(per_page) do |opts|
|
120
120
|
client.list_timeline(owner, list, opts)
|
121
121
|
end
|
122
|
-
|
122
|
+
print_tweets(tweets)
|
123
123
|
end
|
124
124
|
map %w(tl) => :timeline
|
125
125
|
|
data/lib/t/printable.rb
CHANGED
@@ -11,9 +11,9 @@ module T
|
|
11
11
|
[list.id, ls_formatted_time(list), "@#{list.user.screen_name}", list.slug, list.member_count, list.subscriber_count, list.mode, list.description]
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def build_long_tweet(tweet)
|
15
15
|
require 'htmlentities'
|
16
|
-
[
|
16
|
+
[tweet.id, ls_formatted_time(tweet), "@#{tweet.from_user}", HTMLEntities.new.decode(tweet.full_text).gsub(/\n+/, ' ')]
|
17
17
|
end
|
18
18
|
|
19
19
|
def build_long_user(user)
|
@@ -42,11 +42,11 @@ module T
|
|
42
42
|
say [list.id, csv_formatted_time(list), list.user.screen_name, list.slug, list.member_count, list.subscriber_count, list.mode, list.description].to_csv
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def print_csv_tweet(tweet)
|
46
46
|
require 'csv'
|
47
47
|
require 'fastercsv' unless Array.new.respond_to?(:to_csv)
|
48
48
|
require 'htmlentities'
|
49
|
-
say [
|
49
|
+
say [tweet.id, csv_formatted_time(tweet), tweet.from_user, HTMLEntities.new.decode(tweet.full_text)].to_csv
|
50
50
|
end
|
51
51
|
|
52
52
|
def print_csv_user(user)
|
@@ -124,24 +124,24 @@ module T
|
|
124
124
|
say
|
125
125
|
end
|
126
126
|
|
127
|
-
def
|
128
|
-
|
127
|
+
def print_tweets(tweets)
|
128
|
+
tweets.reverse! if options['reverse']
|
129
129
|
if options['csv']
|
130
130
|
require 'csv'
|
131
131
|
require 'fastercsv' unless Array.new.respond_to?(:to_csv)
|
132
|
-
say STATUS_HEADINGS.to_csv unless
|
133
|
-
|
134
|
-
|
132
|
+
say STATUS_HEADINGS.to_csv unless tweets.empty?
|
133
|
+
tweets.each do |tweet|
|
134
|
+
print_csv_tweet(tweet)
|
135
135
|
end
|
136
136
|
elsif options['long']
|
137
|
-
array =
|
138
|
-
|
137
|
+
array = tweets.map do |tweet|
|
138
|
+
build_long_tweet(tweet)
|
139
139
|
end
|
140
140
|
format = options['format'] || STATUS_HEADINGS.size.times.map{"%s"}
|
141
141
|
print_table_with_headings(array, STATUS_HEADINGS, format)
|
142
142
|
else
|
143
|
-
|
144
|
-
print_message(
|
143
|
+
tweets.each do |tweet|
|
144
|
+
print_message(tweet.user.screen_name, tweet.full_text)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
end
|
@@ -149,17 +149,17 @@ module T
|
|
149
149
|
def print_users(users)
|
150
150
|
users = case options['sort']
|
151
151
|
when 'favorites'
|
152
|
-
users.sort_by{|user| user.favourites_count}
|
152
|
+
users.sort_by{|user| user.favourites_count.to_i}
|
153
153
|
when 'followers'
|
154
|
-
users.sort_by{|user| user.followers_count}
|
154
|
+
users.sort_by{|user| user.followers_count.to_i}
|
155
155
|
when 'friends'
|
156
|
-
users.sort_by{|user| user.friends_count}
|
156
|
+
users.sort_by{|user| user.friends_count.to_i}
|
157
157
|
when 'listed'
|
158
|
-
users.sort_by{|user| user.listed_count}
|
158
|
+
users.sort_by{|user| user.listed_count.to_i}
|
159
159
|
when 'since'
|
160
160
|
users.sort_by{|user| user.created_at}
|
161
161
|
when 'tweets'
|
162
|
-
users.sort_by{|user| user.statuses_count}
|
162
|
+
users.sort_by{|user| user.statuses_count.to_i}
|
163
163
|
when 'tweeted'
|
164
164
|
users.sort_by{|user| user.status.created_at rescue Time.at(0)}
|
165
165
|
else
|
data/lib/t/search.rb
CHANGED
@@ -29,28 +29,28 @@ module T
|
|
29
29
|
method_option "number", :aliases => "-n", :type => :numeric, :default => DEFAULT_NUM_RESULTS
|
30
30
|
def all(query)
|
31
31
|
rpp = options['number'] || DEFAULT_NUM_RESULTS
|
32
|
-
|
32
|
+
tweets = collect_with_rpp(rpp) do |opts|
|
33
33
|
client.search(query, opts).results
|
34
34
|
end
|
35
|
-
|
35
|
+
tweets.reverse! if options['reverse']
|
36
36
|
require 'htmlentities'
|
37
37
|
if options['csv']
|
38
38
|
require 'csv'
|
39
39
|
require 'fastercsv' unless Array.new.respond_to?(:to_csv)
|
40
|
-
say STATUS_HEADINGS.to_csv unless
|
41
|
-
|
42
|
-
say [
|
40
|
+
say STATUS_HEADINGS.to_csv unless tweets.empty?
|
41
|
+
tweets.each do |tweet|
|
42
|
+
say [tweet.id, csv_formatted_time(tweet), tweet.from_user, HTMLEntities.new.decode(tweet.full_text)].to_csv
|
43
43
|
end
|
44
44
|
elsif options['long']
|
45
|
-
array =
|
46
|
-
[
|
45
|
+
array = tweets.map do |tweet|
|
46
|
+
[tweet.id, ls_formatted_time(tweet), "@#{tweet.from_user}", HTMLEntities.new.decode(tweet.full_text).gsub(/\n+/, ' ')]
|
47
47
|
end
|
48
48
|
format = options['format'] || STATUS_HEADINGS.size.times.map{"%s"}
|
49
49
|
print_table_with_headings(array, STATUS_HEADINGS, format)
|
50
50
|
else
|
51
|
-
say unless
|
52
|
-
|
53
|
-
print_message(
|
51
|
+
say unless tweets.empty?
|
52
|
+
tweets.each do |tweet|
|
53
|
+
print_message(tweet.from_user, tweet.full_text)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -70,20 +70,20 @@ module T
|
|
70
70
|
else
|
71
71
|
user.strip_ats
|
72
72
|
end
|
73
|
-
|
73
|
+
tweets = collect_with_max_id do |max_id|
|
74
74
|
opts[:max_id] = max_id unless max_id.nil?
|
75
75
|
client.favorites(user, opts)
|
76
76
|
end
|
77
77
|
else
|
78
|
-
|
78
|
+
tweets = collect_with_max_id do |max_id|
|
79
79
|
opts[:max_id] = max_id unless max_id.nil?
|
80
80
|
client.favorites(opts)
|
81
81
|
end
|
82
82
|
end
|
83
|
-
|
84
|
-
/#{query}/i.match(
|
83
|
+
tweets = tweets.select do |tweet|
|
84
|
+
/#{query}/i.match(tweet.full_text)
|
85
85
|
end
|
86
|
-
|
86
|
+
print_tweets(tweets)
|
87
87
|
end
|
88
88
|
map %w(faves) => :favorites
|
89
89
|
|
@@ -94,14 +94,14 @@ module T
|
|
94
94
|
def list(list, query)
|
95
95
|
owner, list = extract_owner(list, options)
|
96
96
|
opts = {:count => MAX_NUM_RESULTS}
|
97
|
-
|
97
|
+
tweets = collect_with_max_id do |max_id|
|
98
98
|
opts[:max_id] = max_id unless max_id.nil?
|
99
99
|
client.list_timeline(owner, list, opts)
|
100
100
|
end
|
101
|
-
|
102
|
-
/#{query}/i.match(
|
101
|
+
tweets = tweets.select do |tweet|
|
102
|
+
/#{query}/i.match(tweet.full_text)
|
103
103
|
end
|
104
|
-
|
104
|
+
print_tweets(tweets)
|
105
105
|
end
|
106
106
|
|
107
107
|
desc "mentions QUERY", "Returns Tweets mentioning you that match the specified query."
|
@@ -109,14 +109,14 @@ module T
|
|
109
109
|
method_option "long", :aliases => "-l", :type => :boolean, :default => false, :desc => "Output in long format."
|
110
110
|
def mentions(query)
|
111
111
|
opts = {:count => MAX_NUM_RESULTS}
|
112
|
-
|
112
|
+
tweets = collect_with_max_id do |max_id|
|
113
113
|
opts[:max_id] = max_id unless max_id.nil?
|
114
114
|
client.mentions(opts)
|
115
115
|
end
|
116
|
-
|
117
|
-
/#{query}/i.match(
|
116
|
+
tweets = tweets.select do |tweet|
|
117
|
+
/#{query}/i.match(tweet.full_text)
|
118
118
|
end
|
119
|
-
|
119
|
+
print_tweets(tweets)
|
120
120
|
end
|
121
121
|
map %w(replies) => :mentions
|
122
122
|
|
@@ -135,20 +135,20 @@ module T
|
|
135
135
|
else
|
136
136
|
user.strip_ats
|
137
137
|
end
|
138
|
-
|
138
|
+
tweets = collect_with_max_id do |max_id|
|
139
139
|
opts[:max_id] = max_id unless max_id.nil?
|
140
140
|
client.retweeted_by_user(user, opts)
|
141
141
|
end
|
142
142
|
else
|
143
|
-
|
143
|
+
tweets = collect_with_max_id do |max_id|
|
144
144
|
opts[:max_id] = max_id unless max_id.nil?
|
145
145
|
client.retweeted_by_me(opts)
|
146
146
|
end
|
147
147
|
end
|
148
|
-
|
149
|
-
/#{query}/i.match(
|
148
|
+
tweets = tweets.select do |tweet|
|
149
|
+
/#{query}/i.match(tweet.full_text)
|
150
150
|
end
|
151
|
-
|
151
|
+
print_tweets(tweets)
|
152
152
|
end
|
153
153
|
map %w(rts) => :retweets
|
154
154
|
|
@@ -167,20 +167,20 @@ module T
|
|
167
167
|
else
|
168
168
|
user.strip_ats
|
169
169
|
end
|
170
|
-
|
170
|
+
tweets = collect_with_max_id do |max_id|
|
171
171
|
opts[:max_id] = max_id unless max_id.nil?
|
172
172
|
client.user_timeline(user, opts)
|
173
173
|
end
|
174
174
|
else
|
175
|
-
|
175
|
+
tweets = collect_with_max_id do |max_id|
|
176
176
|
opts[:max_id] = max_id unless max_id.nil?
|
177
177
|
client.home_timeline(opts)
|
178
178
|
end
|
179
179
|
end
|
180
|
-
|
181
|
-
/#{query}/i.match(
|
180
|
+
tweets = tweets.select do |tweet|
|
181
|
+
/#{query}/i.match(tweet.full_text)
|
182
182
|
end
|
183
|
-
|
183
|
+
print_tweets(tweets)
|
184
184
|
end
|
185
185
|
map %w(tl) => :timeline
|
186
186
|
|