tweet_watch 0.2.1.pre → 0.2.2.pre
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/config.yml +8 -3
- data/lib/tweet_watch/cli.rb +18 -7
- data/lib/tweet_watch/client.rb +8 -4
- data/lib/tweet_watch/config.rb +6 -1
- data/lib/tweet_watch/monitor.rb +93 -0
- data/lib/tweet_watch/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 135cdd71414f49d5d20d43045756999d72663523
|
4
|
+
data.tar.gz: b37e262046f535e2a3837e6e3c00b1857bd8d6c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df719fbcba7108cf2e4098771e3654ffc487747c3c23b38d09ee504a2d3a70efc326dd1264036e933c442f499cb5e982436b33cbc915cd26a710444ae6e6b1ee
|
7
|
+
data.tar.gz: 2237e7a3a4ec298b422d2749e5ac3ac5be4bfca71f5ae242bfc7a1c69aa986cdf4b353b551898650a1c554a16deec81627044271ed3d1404bb72834b8a4da14f
|
data/config.yml
CHANGED
@@ -19,10 +19,15 @@ accounts:
|
|
19
19
|
consumer_secret: YOUR_CONSUMER_SECRET
|
20
20
|
|
21
21
|
# When using the watch command you can choose
|
22
|
-
# tweets from
|
23
|
-
# The following tweeters will be recorded
|
22
|
+
# tweets from certain users to be recorded as CSV
|
23
|
+
# The following tweeters will be recorded. Remove
|
24
|
+
# this if you want all tweets to be recorded.
|
24
25
|
tweeters:
|
25
26
|
- scottadamsays
|
26
27
|
- jaketapper
|
27
28
|
- lodr_io
|
28
|
-
- newsycombinator
|
29
|
+
- newsycombinator
|
30
|
+
|
31
|
+
monitor:
|
32
|
+
interval: 10
|
33
|
+
account_timeline_history: 100
|
data/lib/tweet_watch/cli.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'colorize'
|
2
|
+
require 'csv'
|
3
|
+
require 'tweet_watch/monitor'
|
2
4
|
|
3
5
|
module TweetWatch
|
4
6
|
|
@@ -30,7 +32,7 @@ module TweetWatch
|
|
30
32
|
desc "timeline", "Prints out an accounts timeline"
|
31
33
|
option :stream, aliases: "-s",
|
32
34
|
desc: "Will stream a tweets as they come in instead of printing the latest timeline."
|
33
|
-
option :count, aliases: "-
|
35
|
+
option :count, aliases: "-n", default: 50, type: :numeric,
|
34
36
|
desc: "Number of past tweets to print out. Max history is 200"
|
35
37
|
def timeline
|
36
38
|
load_config(options)
|
@@ -46,7 +48,8 @@ module TweetWatch
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
else
|
49
|
-
|
51
|
+
opts = {count: options[:count]}
|
52
|
+
client(options).home_timeline(opts).each do |tw|
|
50
53
|
print_tweet(tw)
|
51
54
|
end
|
52
55
|
end
|
@@ -64,13 +67,13 @@ module TweetWatch
|
|
64
67
|
load_config(options)
|
65
68
|
|
66
69
|
sc = streaming_client(options)
|
67
|
-
file =
|
70
|
+
file = CSV.open(options[:output], "wb")
|
68
71
|
tw_config = TweetWatch.config
|
69
72
|
|
70
73
|
tweeters = options[:tweeters] ? options[:tweeters] : tw_config.tweeters
|
71
74
|
|
72
|
-
unless
|
73
|
-
file
|
75
|
+
unless File.size(options[:output]) > 0
|
76
|
+
file << %W(timelined_at tweet_id screen_name text tweet_created_at is_reply is_quote)
|
74
77
|
end
|
75
78
|
|
76
79
|
puts "Starting stream...".colorize(:light_cyan)
|
@@ -82,9 +85,10 @@ module TweetWatch
|
|
82
85
|
print_tweet obj
|
83
86
|
end
|
84
87
|
|
85
|
-
if tw_config.tweeters.empty? ||
|
88
|
+
if tw_config.tweeters.empty? || tw_config.has_tweeter?(obj.user.screen_name)
|
86
89
|
puts "recording tweet data".colorize(:red)
|
87
|
-
file
|
90
|
+
file << [time.utc, obj.id, obj.user.screen_name, obj.text,obj.created_at.getutc,obj.user.screen_name, obj.reply?, obj.quote?]
|
91
|
+
file.flush
|
88
92
|
end
|
89
93
|
elsif obj.class == Twitter::DirectMessage
|
90
94
|
print_dm obj
|
@@ -97,6 +101,13 @@ module TweetWatch
|
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
104
|
+
desc "monitor", "Monitors target tweeters tweets and provided account timelines."
|
105
|
+
def monitor
|
106
|
+
load_config(options)
|
107
|
+
m = TweetWatch::Monitor.new
|
108
|
+
m.run
|
109
|
+
end
|
110
|
+
|
100
111
|
end
|
101
112
|
|
102
113
|
end
|
data/lib/tweet_watch/client.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
module TweetWatch
|
2
2
|
module Client
|
3
3
|
|
4
|
-
def client(options)
|
4
|
+
def client(options = {})
|
5
|
+
return @client if options.nil? && @client
|
6
|
+
|
5
7
|
account = TweetWatch.config.get_account(options[:screen_name])
|
6
8
|
|
7
|
-
@client
|
9
|
+
@client = Twitter::REST::Client.new do |config|
|
8
10
|
config.consumer_key = account.consumer_key
|
9
11
|
config.consumer_secret = account.consumer_secret
|
10
12
|
config.access_token = account.access_token
|
@@ -12,10 +14,12 @@ module TweetWatch
|
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
def streaming_client(options)
|
17
|
+
def streaming_client(options = {})
|
18
|
+
return @client if options.nil? && @client
|
19
|
+
|
16
20
|
account = TweetWatch.config.get_account(options[:screen_name])
|
17
21
|
|
18
|
-
@client
|
22
|
+
@client = Twitter::Streaming::Client.new do |config|
|
19
23
|
config.consumer_key = account.consumer_key
|
20
24
|
config.consumer_secret = account.consumer_secret
|
21
25
|
config.access_token = account.access_token
|
data/lib/tweet_watch/config.rb
CHANGED
@@ -29,13 +29,18 @@ module TweetWatch
|
|
29
29
|
|
30
30
|
unless c["tweeters"].nil?
|
31
31
|
c["tweeters"].each do |t|
|
32
|
-
self.tweeters << t
|
32
|
+
self.tweeters << t unless has_tweeter?(t)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
self
|
37
37
|
end
|
38
38
|
|
39
|
+
def has_tweeter?(tweeter)
|
40
|
+
res = @tweeters.find{|t| t.downcase.strip == tweeter.downcase.strip }
|
41
|
+
res != nil
|
42
|
+
end
|
43
|
+
|
39
44
|
def valid?
|
40
45
|
@error_message = ""
|
41
46
|
@error_message += "There should be at least one account" if accounts.size ==0
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'csv'
|
2
|
+
require 'tweet_watch/utils'
|
3
|
+
require 'tweet_watch/client'
|
4
|
+
|
5
|
+
module TweetWatch
|
6
|
+
|
7
|
+
class Monitor
|
8
|
+
|
9
|
+
include TweetWatch::Client
|
10
|
+
include TweetWatch::Utils
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@new_tweeter_tweets = 0
|
14
|
+
|
15
|
+
if TweetWatch.config.tweeters.empty?
|
16
|
+
raise ArgumentError.new("Monitor requires list of target tweeters. Please update config")
|
17
|
+
end
|
18
|
+
|
19
|
+
if TweetWatch.config.accounts.empty?
|
20
|
+
raise ArgumentError.new("Monitor requires at least one account. Please update config")
|
21
|
+
end
|
22
|
+
|
23
|
+
@tweeter_state = {}
|
24
|
+
end
|
25
|
+
|
26
|
+
def run
|
27
|
+
TweetWatch.config.tweeters.each do |tweeter|
|
28
|
+
record_user_tweets(tweeter)
|
29
|
+
sleep(1)
|
30
|
+
end
|
31
|
+
|
32
|
+
if @new_tweeter_tweets > 0
|
33
|
+
TweetWatch.config.accounts.each do |account|
|
34
|
+
record_timeline(account)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
@new_tweeter_tweets = 0
|
39
|
+
|
40
|
+
sleep(20)
|
41
|
+
self.run
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def record_timeline(account)
|
47
|
+
puts "recording timeline for @#{account.screen_name}..."
|
48
|
+
|
49
|
+
c = client({screen_name: account.screen_name})
|
50
|
+
time = Time.now.utc
|
51
|
+
timeline = c.home_timeline({count: 200})
|
52
|
+
|
53
|
+
file = CSV.open("account_timeline.csv", "a+")
|
54
|
+
unless File.size("account_timeline.csv") > 0
|
55
|
+
file << %W(recorded_at tweet_id screen_name text tweet_created_at timeline_account is_reply is_quote)
|
56
|
+
end
|
57
|
+
|
58
|
+
timeline.each do |obj|
|
59
|
+
file << [time, obj.id, obj.user.screen_name, obj.text,obj.created_at.getutc,account.screen_name, obj.reply?, obj.quote?]
|
60
|
+
end
|
61
|
+
|
62
|
+
file.close
|
63
|
+
end
|
64
|
+
|
65
|
+
def record_user_tweets(tweeter)
|
66
|
+
puts "collecting @#{tweeter} tweets..."
|
67
|
+
time = Time.now.utc
|
68
|
+
|
69
|
+
opts = {count: 200}
|
70
|
+
if @tweeter_state[tweeter]
|
71
|
+
opts[:since_id] = @tweeter_state[tweeter]
|
72
|
+
end
|
73
|
+
|
74
|
+
timeline = client.user_timeline(tweeter,opts)
|
75
|
+
|
76
|
+
file = CSV.open("tweeter_tweets.csv", "a+")
|
77
|
+
unless File.size("tweeter_tweets.csv") > 0
|
78
|
+
file << %W(recorded_at tweet_id screen_name text tweet_created_at is_reply is_quote)
|
79
|
+
end
|
80
|
+
|
81
|
+
@new_tweeter_tweets += timeline.size
|
82
|
+
timeline.each do |obj|
|
83
|
+
file << [time, obj.id, obj.user.screen_name, obj.text,obj.created_at.getutc, obj.reply?, obj.quote?]
|
84
|
+
end
|
85
|
+
|
86
|
+
@tweeter_state[tweeter] = timeline.first.id if timeline.size > 0
|
87
|
+
puts "New tweets since last checking? : #{@new_tweeter_tweets}"
|
88
|
+
file.close
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
data/lib/tweet_watch/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tweet_watch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ajo Abraham
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- lib/tweet_watch/cli.rb
|
119
119
|
- lib/tweet_watch/client.rb
|
120
120
|
- lib/tweet_watch/config.rb
|
121
|
+
- lib/tweet_watch/monitor.rb
|
121
122
|
- lib/tweet_watch/utils.rb
|
122
123
|
- lib/tweet_watch/version.rb
|
123
124
|
- tweet_watch.gemspec
|