t 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|