gnip-client 0.2.8 → 0.2.10
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 +5 -5
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +4 -3
- data/gnip.gemspec +9 -8
- data/lib/gnip/gnip-full-archive/full_archive.rb +41 -28
- data/lib/gnip/gnip-rules/rules.rb +66 -77
- data/lib/gnip/gnip-stream/error_reconnect.rb +4 -5
- data/lib/gnip/gnip-stream/json_data_bufffer.rb +6 -8
- data/lib/gnip/power_track_client.rb +9 -9
- data/lib/gnip/version.rb +4 -2
- metadata +21 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9532acf9b31580567a9a5f08a890c69f3257fbe857c8ddcad47d3756f424ce35
|
|
4
|
+
data.tar.gz: cdb63f1eb9928c4a9629fd464875d2117aadb38823d5cc1bcd5d467dfb87c748
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8f42e308a70a49c6068e3f7184be2366f8d0cb5b790020b24895a836d748404195745ae22cff2546379eebc142a44392f747bb44d50b98c96832560cb00515ab
|
|
7
|
+
data.tar.gz: 567b32506f5df10732acfe0694bba4ecd222a37a08e42ec8be20693510fa3057208cb7b9920a6e817a4cdfbaf97ca48bc31b3affe6ad10a423d838b50cde1286
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.6.1
|
data/.travis.yml
CHANGED
data/gnip.gemspec
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require 'gnip/version'
|
|
5
6
|
|
|
@@ -9,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
|
9
10
|
spec.authors = ['Duccio Giovannelli']
|
|
10
11
|
spec.email = ['giovannelli@extendi.it']
|
|
11
12
|
|
|
12
|
-
spec.summary =
|
|
13
|
+
spec.summary = 'A Ruby library for accessing the Gnip API. See https://gnip.com/ for full details and to sign up for an account.'
|
|
13
14
|
spec.homepage = 'https://github.com/giovannelli/gnip-client'
|
|
14
15
|
spec.license = 'MIT'
|
|
15
16
|
|
|
@@ -19,11 +20,11 @@ Gem::Specification.new do |spec|
|
|
|
19
20
|
spec.require_paths = ['lib']
|
|
20
21
|
|
|
21
22
|
spec.add_development_dependency 'bundler', '~> 1.9'
|
|
22
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
|
23
23
|
spec.add_development_dependency 'pry', '~> 0'
|
|
24
|
-
spec.add_development_dependency '
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
spec.add_dependency 'em-http-request', '~> 1'
|
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
|
26
|
+
|
|
28
27
|
spec.add_dependency 'activesupport', '>= 4.2'
|
|
28
|
+
spec.add_dependency 'em-http-request', '~> 1'
|
|
29
|
+
spec.add_dependency 'httparty', '~> 0.16.4'
|
|
29
30
|
end
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Gnip
|
|
2
4
|
module GnipFullArchive
|
|
3
5
|
class FullArchive
|
|
4
|
-
|
|
5
6
|
class InvalidRequestException < StandardError; end
|
|
6
7
|
|
|
7
8
|
include HTTParty
|
|
8
9
|
|
|
9
10
|
attr_reader :search_url, :counts_url
|
|
10
11
|
|
|
11
|
-
#alias :total :total_entries
|
|
12
|
+
# alias :total :total_entries
|
|
12
13
|
|
|
13
14
|
def initialize(client)
|
|
14
15
|
@search_url = "https://data-api.twitter.com/search/fullarchive/accounts/#{client.account}/#{client.label}.json"
|
|
@@ -24,61 +25,75 @@ module Gnip
|
|
|
24
25
|
# options[:cursor_next] cursor to the next page
|
|
25
26
|
def search(options = {})
|
|
26
27
|
search_options = {}
|
|
27
|
-
search_options[:query] = options[:query]||''
|
|
28
|
-
search_options[:maxResults] = options[:per_page]||500
|
|
28
|
+
search_options[:query] = options[:query] || ''
|
|
29
|
+
search_options[:maxResults] = options[:per_page] || 500
|
|
29
30
|
search_options[:fromDate] = Gnip.format_date(options[:date_from]) if options[:date_from]
|
|
30
31
|
search_options[:toDate] = Gnip.format_date(options[:date_to]) if options[:date_to]
|
|
31
|
-
search_options[:next]
|
|
32
|
-
url = [
|
|
32
|
+
search_options[:next] = options[:next_cursor] if options[:next_cursor]
|
|
33
|
+
url = [search_url, search_options.to_query].join('?')
|
|
33
34
|
begin
|
|
34
35
|
gnip_call = self.class.get(url, basic_auth: @auth)
|
|
35
36
|
response = gnip_call.response
|
|
36
37
|
parsed_response = gnip_call.parsed_response
|
|
37
|
-
parsed_response = (parsed_response||{}).with_indifferent_access
|
|
38
|
-
raise response.message
|
|
38
|
+
parsed_response = (parsed_response || {}).with_indifferent_access
|
|
39
|
+
raise response.message unless parsed_response.present?
|
|
40
|
+
|
|
39
41
|
if parsed_response[:error].present?
|
|
40
|
-
response = { results: [],
|
|
42
|
+
response = { results: [],
|
|
43
|
+
next: nil,
|
|
44
|
+
url: url,
|
|
45
|
+
error: parsed_response[:error][:message],
|
|
46
|
+
code: response.code.to_i }
|
|
41
47
|
else
|
|
42
|
-
response = { results: parsed_response[:results],
|
|
48
|
+
response = { results: parsed_response[:results],
|
|
49
|
+
url: url,
|
|
50
|
+
next: parsed_response[:next],
|
|
51
|
+
code: response.code.to_i }
|
|
43
52
|
end
|
|
44
|
-
rescue
|
|
45
|
-
response = { results: [],
|
|
53
|
+
rescue StandardError => e
|
|
54
|
+
response = { results: [],
|
|
55
|
+
url: url,
|
|
56
|
+
next: nil,
|
|
57
|
+
error: e.message,
|
|
58
|
+
code: 500 }
|
|
46
59
|
end
|
|
47
|
-
|
|
60
|
+
response
|
|
48
61
|
end
|
|
49
62
|
|
|
50
63
|
# full aarchive search endpoints return total contents by day, minute, hour paginated
|
|
51
64
|
# so to get totals across time period passed may need to run more than one call, the stop condition is cursor nil
|
|
52
65
|
# bucket: must be one of [minute, hour, day]
|
|
53
|
-
def total_by_time_period(options={})
|
|
54
|
-
response = options[:response]||{}
|
|
66
|
+
def total_by_time_period(options = {})
|
|
67
|
+
response = options[:response] || {}
|
|
55
68
|
search_options = {}
|
|
56
|
-
search_options[:query] = options[:query]||''
|
|
57
|
-
search_options[:bucket] = options[:bucket]||'day'
|
|
69
|
+
search_options[:query] = options[:query] || ''
|
|
70
|
+
search_options[:bucket] = options[:bucket] || 'day'
|
|
58
71
|
search_options[:fromDate] = Gnip.format_date(options[:date_from]) if options[:date_from]
|
|
59
72
|
search_options[:toDate] = Gnip.format_date(options[:date_to]) if options[:date_to]
|
|
60
73
|
search_options[:next] = options[:next_cursor] if options[:next_cursor]
|
|
61
74
|
|
|
62
|
-
url = [
|
|
75
|
+
url = [counts_url, search_options.to_query].join('?')
|
|
76
|
+
call_done = 0
|
|
63
77
|
|
|
64
78
|
begin
|
|
65
79
|
gnip_call = self.class.get(url, basic_auth: @auth)
|
|
66
80
|
|
|
67
81
|
parsed_response = gnip_call.parsed_response
|
|
68
|
-
parsed_response = (parsed_response||{}).with_indifferent_access
|
|
82
|
+
parsed_response = (parsed_response || {}).with_indifferent_access
|
|
69
83
|
|
|
70
|
-
raise gnip_call.response.message
|
|
84
|
+
raise gnip_call.response.message unless parsed_response.present?
|
|
71
85
|
|
|
72
86
|
if parsed_response[:error].present?
|
|
73
|
-
response = { results: [], next: nil, error: parsed_response[:error][:message], code: gnip_call.response.code.to_i, calls: (response[:calls]||0) + 1 }
|
|
87
|
+
response = { results: [], next: nil, error: parsed_response[:error][:message], code: gnip_call.response.code.to_i, calls: (response[:calls] || 0) + 1 }
|
|
74
88
|
else
|
|
89
|
+
call_done = 1 # we have received a valid response
|
|
75
90
|
parsed_response[:results].each_with_index do |item, i|
|
|
76
91
|
parsed_response[:results][i] = item.merge(timePeriod: DateTime.parse(item[:timePeriod]).to_s)
|
|
77
92
|
end
|
|
78
|
-
response = { results: (response[:results]||[]) + parsed_response[:results], next: parsed_response[:next], code: gnip_call.response.code.to_i, calls: (response[:calls]||0) + 1 }
|
|
93
|
+
response = { results: (response[:results] || []) + parsed_response[:results], next: parsed_response[:next], code: gnip_call.response.code.to_i, calls: (response[:calls] || 0) + 1 }
|
|
79
94
|
end
|
|
80
|
-
rescue
|
|
81
|
-
response = { results: [], next: nil, error: e.message, code: 500 }
|
|
95
|
+
rescue StandardError => e
|
|
96
|
+
response = { results: [], next: nil, error: e.message, code: 500, calls: (response[:calls] || 0) + call_done }
|
|
82
97
|
end
|
|
83
98
|
# If the next cursor is not present we fetched all the data
|
|
84
99
|
# It happens that twitter returns the same cursor, in that case we stop
|
|
@@ -93,14 +108,12 @@ module Gnip
|
|
|
93
108
|
end
|
|
94
109
|
|
|
95
110
|
# return total contents in a specific date interval with a passed query
|
|
96
|
-
def total(options={})
|
|
111
|
+
def total(options = {})
|
|
97
112
|
extra = {}
|
|
98
113
|
response = total_by_time_period(options)
|
|
99
114
|
extra = { error: response[:error] } if response[:error].present?
|
|
100
|
-
|
|
115
|
+
{ query: options[:query], total: response[:results].map { |item| item[:count] }.reduce(:+), calls: response[:calls] }.merge!(extra)
|
|
101
116
|
end
|
|
102
|
-
|
|
103
117
|
end
|
|
104
|
-
|
|
105
118
|
end
|
|
106
119
|
end
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Gnip
|
|
2
4
|
module GnipRules
|
|
3
5
|
class Rules
|
|
4
|
-
|
|
5
6
|
include HTTParty
|
|
6
|
-
|
|
7
|
+
|
|
7
8
|
attr_reader :rules_url, :version
|
|
8
|
-
|
|
9
|
-
def initialize(client, replay=false)
|
|
9
|
+
|
|
10
|
+
def initialize(client, replay = false)
|
|
10
11
|
@version = client.power_track_version
|
|
11
|
-
case
|
|
12
|
+
case version
|
|
12
13
|
when '1.0'
|
|
13
|
-
@rules_url = "https://api.gnip.com:443/accounts/#{client.account}/publishers/#{client.publisher}/#{replay ?
|
|
14
|
+
@rules_url = "https://api.gnip.com:443/accounts/#{client.account}/publishers/#{client.publisher}/#{replay ? 'replay' : 'streams'}/track/#{client.label}/rules.json"
|
|
14
15
|
when '2.0'
|
|
15
16
|
if replay
|
|
16
17
|
@rules_url = "https://gnip-api.twitter.com/rules/powertrack-replay/accounts/#{client.account}/publishers/#{client.publisher}/#{client.replay_label}.json"
|
|
@@ -18,111 +19,99 @@ module Gnip
|
|
|
18
19
|
@rules_url = "https://gnip-api.twitter.com/rules/powertrack/accounts/#{client.account}/publishers/#{client.publisher}/#{client.label}.json"
|
|
19
20
|
end
|
|
20
21
|
else
|
|
21
|
-
raise Exception
|
|
22
|
+
raise Exception, "version #{version} is not supported from this gem."
|
|
22
23
|
end
|
|
23
24
|
@auth = { username: client.username, password: client.password }
|
|
24
25
|
end
|
|
25
|
-
|
|
26
|
-
#Add rules to PowerTrack rules
|
|
27
|
-
#rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
|
|
26
|
+
|
|
27
|
+
# Add rules to PowerTrack rules
|
|
28
|
+
# rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
|
|
28
29
|
def add(rules)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{ status: :success, code: 200, response: parsed_response }
|
|
36
|
-
end
|
|
37
|
-
rescue Exception => e
|
|
38
|
-
{ status: :error, code: 500, error: e.message }
|
|
30
|
+
response = self.class.post(rules_url, basic_auth: @auth, body: rules.to_json, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }, type: :json)
|
|
31
|
+
parsed_response = safe_parsed_response(response.parsed_response)
|
|
32
|
+
if parsed_response.present? && parsed_response['error'].present?
|
|
33
|
+
{ status: :error, code: response.response.code, error: parsed_response['error']['message'] }
|
|
34
|
+
else
|
|
35
|
+
{ status: :success, code: 200, response: parsed_response }
|
|
39
36
|
end
|
|
40
|
-
|
|
37
|
+
rescue Exception => e
|
|
38
|
+
{ status: :error, code: 500, error: e.message }
|
|
41
39
|
end
|
|
42
|
-
|
|
43
|
-
#Remove rules from PowerTrack rules
|
|
44
|
-
#rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
|
|
40
|
+
|
|
41
|
+
# Remove rules from PowerTrack rules
|
|
42
|
+
# rules should be an hash in the format {"rules": [{"value": "rule1", "tag": "tag1"}, {"value":"rule2"}]}"
|
|
45
43
|
def remove(rules)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
{ status: :success, code: 200, response: parsed_response }
|
|
53
|
-
end
|
|
54
|
-
rescue Exception => e
|
|
55
|
-
{ status: :error, code: 500, error: e.message }
|
|
44
|
+
response = self.class.post(rules_url, query: { _method: 'delete' }, basic_auth: @auth, body: rules.to_json)
|
|
45
|
+
parsed_response = safe_parsed_response(response.parsed_response)
|
|
46
|
+
if parsed_response.present? && parsed_response['error'].present?
|
|
47
|
+
{ status: :error, code: response.response.code, error: parsed_response['error']['message'] }
|
|
48
|
+
else
|
|
49
|
+
{ status: :success, code: 200, response: parsed_response }
|
|
56
50
|
end
|
|
57
|
-
|
|
51
|
+
rescue Exception => e
|
|
52
|
+
{ status: :error, code: 500, error: e.message }
|
|
58
53
|
end
|
|
59
|
-
|
|
60
|
-
#Get the full list of rules
|
|
54
|
+
|
|
55
|
+
# Get the full list of rules
|
|
61
56
|
def list
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{ status: :success, code: 200, rules: parsed_response["rules"] }
|
|
69
|
-
end
|
|
70
|
-
rescue Exception => e
|
|
71
|
-
{ status: :error, code: 500, error: e.message }
|
|
57
|
+
response = self.class.get(rules_url, basic_auth: @auth, headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }, type: :json)
|
|
58
|
+
parsed_response = safe_parsed_response(response.parsed_response)
|
|
59
|
+
if parsed_response.present? && parsed_response['error'].present?
|
|
60
|
+
{ status: :error, code: response.response.code, error: parsed_response['error']['message'] }
|
|
61
|
+
else
|
|
62
|
+
{ status: :success, code: 200, rules: parsed_response['rules'] }
|
|
72
63
|
end
|
|
64
|
+
rescue Exception => e
|
|
65
|
+
{ status: :error, code: 500, error: e.message }
|
|
73
66
|
end
|
|
74
|
-
|
|
75
|
-
#Get the full list of rules by tag
|
|
67
|
+
|
|
68
|
+
# Get the full list of rules by tag
|
|
76
69
|
def list_by_tag(tag)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
{ status: :success, code: 200, rules: rules.select{ |rule| rule["tag"] == tag } }
|
|
85
|
-
end
|
|
86
|
-
rescue Exception => e
|
|
87
|
-
{ status: :error, code: 500, error: e.message }
|
|
70
|
+
response = self.class.get(rules_url, basic_auth: @auth)
|
|
71
|
+
parsed_response = safe_parsed_response(response.parsed_response)
|
|
72
|
+
if parsed_response.present? && parsed_response['error'].present?
|
|
73
|
+
{ status: :error, code: response.response.code, error: parsed_response['error']['message'] }
|
|
74
|
+
else
|
|
75
|
+
rules = parsed_response['rules']
|
|
76
|
+
{ status: :success, code: 200, rules: rules.select { |rule| rule['tag'] == tag } }
|
|
88
77
|
end
|
|
89
|
-
|
|
78
|
+
rescue Exception => e
|
|
79
|
+
{ status: :error, code: 500, error: e.message }
|
|
90
80
|
end
|
|
91
|
-
|
|
92
|
-
#delete all rules from PowerTrack
|
|
93
|
-
#http://support.gnip.com/apis/powertrack/api_reference.html#DeleteRules
|
|
94
|
-
#Request Body Size Limit 1 MB (~5000 rules)
|
|
81
|
+
|
|
82
|
+
# delete all rules from PowerTrack
|
|
83
|
+
# http://support.gnip.com/apis/powertrack/api_reference.html#DeleteRules
|
|
84
|
+
# Request Body Size Limit 1 MB (~5000 rules)
|
|
95
85
|
def delete_all!
|
|
96
86
|
retry_times = 0
|
|
97
87
|
begin
|
|
98
|
-
rules_list =
|
|
99
|
-
(rules_list[:rules]||[]).in_groups_of(2, false).each do |group_of_rules|
|
|
100
|
-
|
|
88
|
+
rules_list = list
|
|
89
|
+
(rules_list[:rules] || []).in_groups_of(2, false).each do |group_of_rules|
|
|
90
|
+
remove("rules": group_of_rules)
|
|
101
91
|
end
|
|
102
92
|
sleep 0.05
|
|
103
|
-
rules_list =
|
|
104
|
-
if !(rules_list[:rules]||[]).size.zero?
|
|
105
|
-
|
|
93
|
+
rules_list = list
|
|
94
|
+
if !(rules_list[:rules] || []).size.zero?
|
|
95
|
+
delete_all!
|
|
106
96
|
else
|
|
107
|
-
return { status: :success, code: 200, rules: []}
|
|
97
|
+
return { status: :success, code: 200, rules: [] }
|
|
108
98
|
end
|
|
109
99
|
rescue Exception => e
|
|
110
100
|
retry_times += 1
|
|
111
101
|
if retry_times <= 3
|
|
112
102
|
retry
|
|
113
103
|
else
|
|
114
|
-
|
|
115
|
-
end
|
|
104
|
+
{ status: :error, code: 500, error: e.message }
|
|
105
|
+
end
|
|
116
106
|
end
|
|
117
|
-
|
|
118
107
|
end
|
|
119
|
-
|
|
108
|
+
|
|
120
109
|
private
|
|
110
|
+
|
|
121
111
|
def safe_parsed_response(parsed_response)
|
|
122
112
|
ret = parsed_response.present? ? (parsed_response.is_a?(String) ? JSON.parse(parsed_response).with_indifferent_access : parsed_response) : nil
|
|
123
113
|
ret
|
|
124
114
|
end
|
|
125
|
-
|
|
126
115
|
end
|
|
127
116
|
end
|
|
128
117
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Gnip
|
|
2
4
|
module GnipStream
|
|
3
|
-
|
|
4
5
|
class ErrorReconnect
|
|
5
|
-
|
|
6
6
|
def initialize(source_class, method_name)
|
|
7
7
|
@source_class = source_class
|
|
8
8
|
@method_name = method_name
|
|
@@ -12,7 +12,7 @@ module Gnip
|
|
|
12
12
|
def attempt_to_reconnect(error_message)
|
|
13
13
|
@error_message = error_message
|
|
14
14
|
if @reconnect_attempts < 5
|
|
15
|
-
@reconnect_attempts +=1
|
|
15
|
+
@reconnect_attempts += 1
|
|
16
16
|
sleep(2)
|
|
17
17
|
@source_class.send(@method_name)
|
|
18
18
|
else
|
|
@@ -23,7 +23,6 @@ module Gnip
|
|
|
23
23
|
def reconnect_failed_raise_error
|
|
24
24
|
raise @error_message
|
|
25
25
|
end
|
|
26
|
-
|
|
27
26
|
end
|
|
28
27
|
end
|
|
29
|
-
end
|
|
28
|
+
end
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
module Gnip
|
|
2
2
|
module GnipStream
|
|
3
|
-
class JsonDataBuffer
|
|
4
|
-
|
|
3
|
+
class JsonDataBuffer
|
|
5
4
|
attr_accessor :split_pattern, :check_pattern
|
|
6
|
-
|
|
5
|
+
|
|
7
6
|
def initialize(split_pattern, check_pattern)
|
|
8
7
|
@split_pattern = split_pattern
|
|
9
8
|
@check_pattern = check_pattern
|
|
10
|
-
@buffer =
|
|
9
|
+
@buffer = ''
|
|
11
10
|
end
|
|
12
11
|
|
|
13
12
|
def process(chunk)
|
|
@@ -21,11 +20,10 @@ module Gnip
|
|
|
21
20
|
activities = @buffer.split(split_pattern)
|
|
22
21
|
entries << activities.shift
|
|
23
22
|
@buffer = activities.join(split_pattern)
|
|
24
|
-
@buffer
|
|
23
|
+
@buffer += "\r\n" if !@buffer.empty? && new_line
|
|
25
24
|
end
|
|
26
|
-
entries.
|
|
25
|
+
entries.reject(&:empty?)
|
|
27
26
|
end
|
|
28
27
|
end
|
|
29
|
-
|
|
30
28
|
end
|
|
31
|
-
end
|
|
29
|
+
end
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Gnip
|
|
2
4
|
class PowerTrackClient
|
|
3
|
-
|
|
4
5
|
attr_accessor :publisher, :label, :account,
|
|
5
6
|
:username, :password,
|
|
6
7
|
:backfill_client, :replay_label
|
|
7
|
-
|
|
8
|
+
|
|
8
9
|
attr_reader :rules, :replay_rules, :full_archive, :stream, :replay, :power_track_version
|
|
9
|
-
|
|
10
|
+
|
|
10
11
|
def initialize(options = {})
|
|
11
12
|
@account = options[:account]
|
|
12
|
-
@publisher = options[:publisher]||
|
|
13
|
-
@label = options[:label]||
|
|
14
|
-
@replay_label = options[:replay_label]
|
|
13
|
+
@publisher = options[:publisher] || 'twitter'
|
|
14
|
+
@label = options[:label] || 'dev'
|
|
15
|
+
@replay_label = options[:replay_label] || @label
|
|
15
16
|
@username = options[:username]
|
|
16
17
|
@password = options[:password]
|
|
17
|
-
@backfill_client = options[:backfill_client]||nil
|
|
18
|
-
@power_track_version = options[:power_track_version]||'2.0'
|
|
18
|
+
@backfill_client = options[:backfill_client] || nil
|
|
19
|
+
@power_track_version = options[:power_track_version] || '2.0'
|
|
19
20
|
@rules = Gnip::GnipRules::Rules.new(self)
|
|
20
21
|
@replay_rules = Gnip::GnipRules::Rules.new(self, true)
|
|
21
22
|
@full_archive = Gnip::GnipFullArchive::FullArchive.new(self)
|
|
22
23
|
@stream = Gnip::GnipStream::Stream.new(self)
|
|
23
24
|
@replay = Gnip::GnipStream::Replay.new(self)
|
|
24
25
|
end
|
|
25
|
-
|
|
26
26
|
end
|
|
27
27
|
end
|
data/lib/gnip/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gnip-client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Duccio Giovannelli
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-06-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -25,61 +25,61 @@ dependencies:
|
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.9'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: pry
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
47
|
+
version: '10.0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
54
|
+
version: '10.0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rspec
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '3'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '3'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: activesupport
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
75
|
+
version: '4.2'
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
82
|
+
version: '4.2'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: em-http-request
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,19 +95,19 @@ dependencies:
|
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '1'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
98
|
+
name: httparty
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- - "
|
|
101
|
+
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
103
|
+
version: 0.16.4
|
|
104
104
|
type: :runtime
|
|
105
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: 0.16.4
|
|
111
111
|
description:
|
|
112
112
|
email:
|
|
113
113
|
- giovannelli@extendi.it
|
|
@@ -155,8 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
155
155
|
- !ruby/object:Gem::Version
|
|
156
156
|
version: '0'
|
|
157
157
|
requirements: []
|
|
158
|
-
|
|
159
|
-
rubygems_version: 2.5.2
|
|
158
|
+
rubygems_version: 3.0.1
|
|
160
159
|
signing_key:
|
|
161
160
|
specification_version: 4
|
|
162
161
|
summary: A Ruby library for accessing the Gnip API. See https://gnip.com/ for full
|