twords 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/twords.rb +71 -17
- data/lib/twords/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d9a3acb581e8d88cccecaa1f81755b24ccae3d8
|
4
|
+
data.tar.gz: e537d3ea87fec86ae57d06f3902b9b27a2ddfa89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4adc74dfeb9c6aae7897aca0a8daf5eb519d3ac53cb826fee954b3ead3a38c462a5fc010c88ca28199012456759739ca0f3c1c544137e0558ca349b19fad53d
|
7
|
+
data.tar.gz: 2838be4f9d6f6a83fb8aab1cdee4c201d1665a545c595cd64e3fddde6a7c2e53bc263a44544ada42b531caaa12f94f8b5c1772d4f8d72cd13f8f89c3bdffad07
|
data/README.md
CHANGED
@@ -24,8 +24,8 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
```ruby
|
26
26
|
Twords.config do |config|
|
27
|
-
config.rejects
|
28
|
-
config.range
|
27
|
+
config.rejects = %w[the for and a i of if]
|
28
|
+
config.range = 14
|
29
29
|
config.up_to { Time.now } # A time object to be lazy evaluated. The range is counted backward from here.
|
30
30
|
|
31
31
|
config.twitter_client do |twitter|
|
data/lib/twords.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'date'
|
4
3
|
require 'twitter'
|
4
|
+
require 'uri'
|
5
5
|
|
6
6
|
require 'twords/version'
|
7
7
|
|
@@ -27,10 +27,11 @@ require 'twords/version'
|
|
27
27
|
# # => { "butts"=>35, "poo"=>32, "pups"=>28, ... }
|
28
28
|
class Twords
|
29
29
|
class << self
|
30
|
-
attr_reader :rejects, :range, :client, :up_to_block
|
30
|
+
attr_reader :rejects, :range, :client, :up_to_block, :include_hashtags, :include_uris,
|
31
|
+
:include_mentions
|
31
32
|
|
32
|
-
def config
|
33
|
-
|
33
|
+
def config
|
34
|
+
yield self
|
34
35
|
end
|
35
36
|
|
36
37
|
def twitter_client(&block)
|
@@ -41,12 +42,35 @@ class Twords
|
|
41
42
|
@rejects = args.flatten
|
42
43
|
end
|
43
44
|
|
45
|
+
def include_hashtags=(boolean)
|
46
|
+
not_a_boolean_error(boolean)
|
47
|
+
@include_hashtags = boolean
|
48
|
+
end
|
49
|
+
|
50
|
+
def include_uris=(boolean)
|
51
|
+
not_a_boolean_error(boolean)
|
52
|
+
@include_uris = boolean
|
53
|
+
end
|
54
|
+
alias include_urls include_uris
|
55
|
+
|
56
|
+
def include_mentions=(boolean)
|
57
|
+
not_a_boolean_error(boolean)
|
58
|
+
@include_mentions = boolean
|
59
|
+
end
|
60
|
+
|
61
|
+
def not_a_boolean_error(boolean)
|
62
|
+
raise ArgumentError, 'argument must be a booolean value' unless is_a_boolean?(boolean)
|
63
|
+
end
|
64
|
+
|
65
|
+
def is_a_boolean?(other)
|
66
|
+
[true, false].include?(other)
|
67
|
+
end
|
68
|
+
|
44
69
|
def range=(integer)
|
45
70
|
@range = integer
|
46
71
|
end
|
47
72
|
|
48
73
|
def up_to(&time_block)
|
49
|
-
raise ArgumentError, 'object must respond to #call' unless time_block.respond_to?(:call)
|
50
74
|
@up_to_block = time_block
|
51
75
|
end
|
52
76
|
end
|
@@ -54,7 +78,7 @@ class Twords
|
|
54
78
|
attr_reader :screen_names, :words, :requests, :client
|
55
79
|
|
56
80
|
def initialize(*screen_names)
|
57
|
-
@screen_names = screen_names
|
81
|
+
@screen_names = screen_names.flatten
|
58
82
|
@words = {}
|
59
83
|
@requests = 0
|
60
84
|
end
|
@@ -67,10 +91,37 @@ class Twords
|
|
67
91
|
@_range ||= self.class.range
|
68
92
|
end
|
69
93
|
|
94
|
+
def rejects
|
95
|
+
@_rejects ||= self.class.rejects
|
96
|
+
end
|
97
|
+
|
70
98
|
def audited?
|
71
99
|
@audited
|
72
100
|
end
|
73
101
|
|
102
|
+
def hashtag?(word)
|
103
|
+
return false if self.class.include_hashtags
|
104
|
+
word.match?(/#/)
|
105
|
+
end
|
106
|
+
|
107
|
+
def uri?(word)
|
108
|
+
return false if self.class.include_uris
|
109
|
+
word.match?(URI.regexp)
|
110
|
+
end
|
111
|
+
|
112
|
+
def mention?(word)
|
113
|
+
return false if self.class.include_mentions
|
114
|
+
word.match?(/@/)
|
115
|
+
end
|
116
|
+
|
117
|
+
def hashtags
|
118
|
+
/#/
|
119
|
+
end
|
120
|
+
|
121
|
+
def should_be_skipped?(word)
|
122
|
+
rejects.include?(word) || hashtag?(word) || uri?(word) || mention?(word)
|
123
|
+
end
|
124
|
+
|
74
125
|
def sort_words
|
75
126
|
words.sort { |a, b| b.last <=> a.last }
|
76
127
|
end
|
@@ -84,9 +135,11 @@ class Twords
|
|
84
135
|
def fetch_timeline(screen_name)
|
85
136
|
return [] if screen_name.to_s.empty?
|
86
137
|
@requests += 1
|
87
|
-
timeline = client.user_timeline(screen_name, count: 200)
|
138
|
+
timeline = client.user_timeline(screen_name, tweet_mode: 'extended', count: 200)
|
88
139
|
return timeline if timeline.empty?
|
89
|
-
fetch_older_tweets(timeline, screen_name)
|
140
|
+
timeline = fetch_older_tweets(timeline, screen_name)
|
141
|
+
puts "Fetched #{screen_name}'s timeline"
|
142
|
+
timeline
|
90
143
|
end
|
91
144
|
|
92
145
|
def fetch_older_tweets(timeline, screen_name)
|
@@ -94,6 +147,7 @@ class Twords
|
|
94
147
|
@requests += 1
|
95
148
|
timeline += client.user_timeline(
|
96
149
|
screen_name,
|
150
|
+
tweet_mode: 'extended',
|
97
151
|
max_id: timeline.last.id - 1,
|
98
152
|
count: 200
|
99
153
|
)
|
@@ -107,15 +161,15 @@ class Twords
|
|
107
161
|
end
|
108
162
|
|
109
163
|
def age_of_tweet_in_days(tweet)
|
110
|
-
(self.class.up_to_block.call - tweet.created_at) /
|
164
|
+
(self.class.up_to_block.call.to_time - tweet.created_at) / 86400
|
111
165
|
end
|
112
166
|
|
113
167
|
def count_words
|
168
|
+
words.clear
|
114
169
|
recent_tweets.each do |tweet|
|
115
|
-
|
116
|
-
words_array = tweet_with_full_text.attrs[:full_text].downcase.split(' ')
|
170
|
+
words_array = tweet.attrs[:full_text].downcase.split(' ')
|
117
171
|
words_array.each do |word|
|
118
|
-
next if
|
172
|
+
next if should_be_skipped?(word)
|
119
173
|
if words.has_key?(word)
|
120
174
|
words[word] += 1
|
121
175
|
else
|
@@ -125,16 +179,16 @@ class Twords
|
|
125
179
|
end
|
126
180
|
end
|
127
181
|
|
128
|
-
def fetch_tweet_with_full_text(tweet)
|
129
|
-
@requests += 1
|
130
|
-
client.status(tweet.id, tweet_mode: 'extended')
|
131
|
-
end
|
132
|
-
|
133
182
|
def audit
|
134
183
|
count_words unless audited?
|
135
184
|
@audited = true
|
136
185
|
end
|
137
186
|
|
187
|
+
def audit!
|
188
|
+
@audited = false
|
189
|
+
audit
|
190
|
+
end
|
191
|
+
|
138
192
|
def recent_tweets_count
|
139
193
|
@_recent_tweets_count ||= recent_tweets.count
|
140
194
|
end
|
data/lib/twords/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twords
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- M. Simon Borg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twitter
|