rbitter 0.2.1 → 0.2.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/.gitignore +1 -0
- data/Gemfile +0 -1
- data/lib/rbitter/arcserver.rb +3 -2
- data/lib/rbitter/dlthread.rb +29 -22
- data/lib/rbitter/env.rb +5 -5
- data/lib/rbitter/progress.rb +4 -1
- data/lib/rbitter/records.rb +4 -1
- data/lib/rbitter/version.rb +1 -1
- data/rbitter.gemspec +2 -2
- metadata +24 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e12755836fb33a945c9f9e6c48dc911fc7ac1a5
|
4
|
+
data.tar.gz: 15d8892a885d452f71fa90c58a018693e7c582f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8ae6dc9b1dfab693a6dedc5bb1eefb6d6e0c1c8ec4455abfbd2cf4f0fc8c365ffa172e76f59496aef7cd6e802f5945d308532460512251662568055d08b0265
|
7
|
+
data.tar.gz: 88992b4711bffd9e80aafbd01b3d98a7ff13c0ddec852380544f939b636a64ecf5c7929284066a26814c9471b0fd51d5eb9b30d5d032f8f4ae573d17538e2c51
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/lib/rbitter/arcserver.rb
CHANGED
@@ -114,6 +114,7 @@ module Rbitter
|
|
114
114
|
|
115
115
|
streaming_adapter.new(Rbitter['twitter']).run { |a|
|
116
116
|
@dt << a['media_urls']
|
117
|
+
draw "[rbitter] saving @#{a['screen_name']}:#{a['tweetid']}"
|
117
118
|
|
118
119
|
record = Record.find_or_initialize_by(tweetid: a['tweetid'])
|
119
120
|
record.update({:marker => 0,
|
@@ -128,7 +129,7 @@ module Rbitter
|
|
128
129
|
:fav_count => a['fav_count']})
|
129
130
|
|
130
131
|
record.save
|
131
|
-
draw "[rbitter]
|
132
|
+
draw "[rbitter] saved @#{a['screen_name']}:#{a['tweetid']}"
|
132
133
|
}
|
133
134
|
rescue Interrupt => e
|
134
135
|
puts ""
|
@@ -146,7 +147,7 @@ module Rbitter
|
|
146
147
|
|
147
148
|
retry if resurrect_loop?
|
148
149
|
rescue Resolv::ResolvError, Errno::ECONNABORTED,
|
149
|
-
Errno::ECONNREFUSED, Errno::ECONNRESET => e
|
150
|
+
Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::ETIMEDOUT => e
|
150
151
|
puts "Network problem. Retry in 5 seconds..."
|
151
152
|
mark_error(e.to_s, "(retry) Network problem")
|
152
153
|
|
data/lib/rbitter/dlthread.rb
CHANGED
@@ -5,6 +5,8 @@ require "openssl"
|
|
5
5
|
|
6
6
|
module Rbitter
|
7
7
|
class DLThread
|
8
|
+
MAX_THREADS = 20
|
9
|
+
|
8
10
|
def initialize(dlfolder, large_flag)
|
9
11
|
@dest = dlfolder
|
10
12
|
if not File.directory?(dlfolder)
|
@@ -23,27 +25,34 @@ module Rbitter
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def <<(url_array)
|
26
|
-
|
28
|
+
if @pool.length >= MAX_THREADS
|
29
|
+
job_cleanup
|
30
|
+
end
|
31
|
+
|
32
|
+
download_task = Thread.new do
|
27
33
|
url_array.each { |url|
|
28
34
|
uri = URI.parse(@large_image ? url + ":large" : url)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
|
36
|
+
begin
|
37
|
+
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme.downcase == 'https') { |h|
|
38
|
+
req = Net::HTTP::Get.new uri.request_uri
|
39
|
+
h.request(req) { |res|
|
40
|
+
case res
|
41
|
+
when Net::HTTPOK
|
42
|
+
fname = File.basename(url)
|
43
|
+
|
44
|
+
puts "[fetch] remote: #{uri.path} => local: #{fname}"
|
45
|
+
open(File.join(@dest, fname), "wb") { |file|
|
46
|
+
res.read_body { |chunk| file.write(chunk) }
|
47
|
+
}
|
48
|
+
end
|
49
|
+
}
|
43
50
|
}
|
44
|
-
|
51
|
+
rescue => e
|
52
|
+
puts "[dlthread] exception from thread -> #{e.to_s}"
|
53
|
+
end
|
45
54
|
}
|
46
|
-
|
55
|
+
end
|
47
56
|
|
48
57
|
@pool.push download_task
|
49
58
|
end
|
@@ -52,12 +61,10 @@ module Rbitter
|
|
52
61
|
until @pool.empty?
|
53
62
|
dlthrd = @pool.shift
|
54
63
|
|
55
|
-
if dlthrd.
|
56
|
-
puts "[dlthread]
|
57
|
-
dlthrd.terminate
|
58
|
-
dlthrd.join
|
64
|
+
if dlthrd.join(5).nil?
|
65
|
+
puts "[dlthread] #{dlthrd.to_s} is still running. (timeout: 5sec)"
|
59
66
|
end
|
60
67
|
end
|
61
68
|
end
|
62
69
|
end
|
63
|
-
end
|
70
|
+
end
|
data/lib/rbitter/env.rb
CHANGED
@@ -63,7 +63,7 @@ module Rbitter
|
|
63
63
|
# Level: warning since it is not utilized at all.
|
64
64
|
currents.each { |conf|
|
65
65
|
unless defaults.include?(conf)
|
66
|
-
warn "[config.json]
|
66
|
+
warn "[config.json] Unsupported field: #{conf}"
|
67
67
|
end
|
68
68
|
}
|
69
69
|
|
@@ -71,7 +71,7 @@ module Rbitter
|
|
71
71
|
# Level: error and program should stop. (return false for this)
|
72
72
|
defaults.each { |conf|
|
73
73
|
unless currents.include?(conf)
|
74
|
-
warn "[config.json]
|
74
|
+
warn "[config.json] Error! Missing field: #{conf}"
|
75
75
|
not_errored = false
|
76
76
|
end
|
77
77
|
}
|
@@ -88,9 +88,9 @@ module Rbitter
|
|
88
88
|
}
|
89
89
|
|
90
90
|
return @@env if env_valid?
|
91
|
-
fail StandardError, "
|
91
|
+
fail StandardError, "Void configuration. Maybe failure on load?"
|
92
92
|
rescue => e
|
93
|
-
fail ConfigFileError, "
|
93
|
+
fail ConfigFileError, "Config error on (#{json_path}): #{e.to_s}"
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
@@ -111,6 +111,6 @@ module Rbitter
|
|
111
111
|
fail ConfigFileError, "No config.json on #{locations.join(' or ')}" if @@env.empty?
|
112
112
|
fail ConfigFileError, "Configuration outdated. Please see above messages to update it" if not env_valid?
|
113
113
|
|
114
|
-
puts "[config.json]
|
114
|
+
puts "[config.json] JSON data structure is safe to go."
|
115
115
|
end
|
116
116
|
end
|
data/lib/rbitter/progress.rb
CHANGED
@@ -10,7 +10,10 @@ module Rbitter
|
|
10
10
|
def draw sentence
|
11
11
|
$> << sentence
|
12
12
|
if sentence.length < @@last_draw
|
13
|
-
|
13
|
+
clear_char_len = @@last_draw - sentence.length
|
14
|
+
clear_char_len.times {
|
15
|
+
$> << " "
|
16
|
+
}
|
14
17
|
end
|
15
18
|
@@last_draw = sentence.length
|
16
19
|
putback
|
data/lib/rbitter/records.rb
CHANGED
@@ -47,7 +47,10 @@ module ARSupport
|
|
47
47
|
timeout: 10000) # Long timeout for slow computer
|
48
48
|
end
|
49
49
|
elsif Rbitter['activerecord'] == 'mysql2'
|
50
|
-
|
50
|
+
if RUBY_PLATFORM == 'java'
|
51
|
+
require 'jdbc/mysql'
|
52
|
+
Jdbc::MySQL.load_driver
|
53
|
+
end
|
51
54
|
|
52
55
|
ActiveRecord::Base.establish_connection(
|
53
56
|
adapter: (RUBY_PLATFORM == 'java' ? 'jdbcmysql' : 'mysql2'),
|
data/lib/rbitter/version.rb
CHANGED
data/rbitter.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'twitter', '~> 5.14'
|
24
24
|
spec.add_dependency 'json', '~> 1.7'
|
25
25
|
spec.add_dependency 'ripl', '~> 0.7'
|
26
|
-
spec.add_dependency 'activerecord', '~> 4.
|
26
|
+
spec.add_dependency 'activerecord', '~> 4.2'
|
27
27
|
|
28
28
|
if RUBY_PLATFORM == 'java'
|
29
29
|
spec.platform = 'java'
|
@@ -38,9 +38,9 @@ Gem::Specification.new do |spec|
|
|
38
38
|
|
39
39
|
spec.add_dependency 'sqlite3', '~> 1.3'
|
40
40
|
spec.add_dependency 'mysql2', '~> 0.3'
|
41
|
-
spec.add_dependency 'activerecord-mysql2-adapter', '~> 0.0.3'
|
42
41
|
end
|
43
42
|
|
44
43
|
spec.add_development_dependency "bundler", "~> 1.6"
|
45
44
|
spec.add_development_dependency "rake", "~> 10.0"
|
45
|
+
spec.add_development_dependency "rspec", "~> 3.3"
|
46
46
|
end
|
metadata
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nidev Plontra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twitter
|
15
|
-
prerelease: false
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - "~>"
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '5.14'
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
@@ -26,13 +26,13 @@ dependencies:
|
|
26
26
|
version: '5.14'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
|
-
prerelease: false
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
31
30
|
requirements:
|
32
31
|
- - "~>"
|
33
32
|
- !ruby/object:Gem::Version
|
34
33
|
version: '1.7'
|
35
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
@@ -40,13 +40,13 @@ dependencies:
|
|
40
40
|
version: '1.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: ripl
|
43
|
-
prerelease: false
|
44
43
|
requirement: !ruby/object:Gem::Requirement
|
45
44
|
requirements:
|
46
45
|
- - "~>"
|
47
46
|
- !ruby/object:Gem::Version
|
48
47
|
version: '0.7'
|
49
48
|
type: :runtime
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
@@ -54,27 +54,27 @@ dependencies:
|
|
54
54
|
version: '0.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: activerecord
|
57
|
-
prerelease: false
|
58
57
|
requirement: !ruby/object:Gem::Requirement
|
59
58
|
requirements:
|
60
59
|
- - "~>"
|
61
60
|
- !ruby/object:Gem::Version
|
62
|
-
version: '4.
|
61
|
+
version: '4.2'
|
63
62
|
type: :runtime
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '4.
|
68
|
+
version: '4.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sqlite3
|
71
|
-
prerelease: false
|
72
71
|
requirement: !ruby/object:Gem::Requirement
|
73
72
|
requirements:
|
74
73
|
- - "~>"
|
75
74
|
- !ruby/object:Gem::Version
|
76
75
|
version: '1.3'
|
77
76
|
type: :runtime
|
77
|
+
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
@@ -82,60 +82,60 @@ dependencies:
|
|
82
82
|
version: '1.3'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mysql2
|
85
|
-
prerelease: false
|
86
85
|
requirement: !ruby/object:Gem::Requirement
|
87
86
|
requirements:
|
88
87
|
- - "~>"
|
89
88
|
- !ruby/object:Gem::Version
|
90
89
|
version: '0.3'
|
91
90
|
type: :runtime
|
91
|
+
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.3'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
99
|
-
prerelease: false
|
98
|
+
name: bundler
|
100
99
|
requirement: !ruby/object:Gem::Requirement
|
101
100
|
requirements:
|
102
101
|
- - "~>"
|
103
102
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
105
|
-
type: :
|
103
|
+
version: '1.6'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '1.6'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
113
|
-
prerelease: false
|
112
|
+
name: rake
|
114
113
|
requirement: !ruby/object:Gem::Requirement
|
115
114
|
requirements:
|
116
115
|
- - "~>"
|
117
116
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
117
|
+
version: '10.0'
|
119
118
|
type: :development
|
119
|
+
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '10.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
127
|
-
prerelease: false
|
126
|
+
name: rspec
|
128
127
|
requirement: !ruby/object:Gem::Requirement
|
129
128
|
requirements:
|
130
129
|
- - "~>"
|
131
130
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
131
|
+
version: '3.3'
|
133
132
|
type: :development
|
133
|
+
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '
|
138
|
+
version: '3.3'
|
139
139
|
description: Rbitter archives all tweets appeared on user streaming using ActiveRecord.
|
140
140
|
XMLRPC is used to serve archived tweets and useful features
|
141
141
|
email:
|
@@ -216,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
216
|
version: '0'
|
217
217
|
requirements: []
|
218
218
|
rubyforge_project:
|
219
|
-
rubygems_version: 2.4.
|
219
|
+
rubygems_version: 2.4.5.1
|
220
220
|
signing_key:
|
221
221
|
specification_version: 4
|
222
222
|
summary: Rbitter is a Twitter client specialized in archiving
|