a_parser_client 0.1.6 → 0.1.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ce1ab499b36e7ca18f90688137769f8a4dc153a1b7c6ffc683ec967fda1c6ff
4
- data.tar.gz: 21f8cb0c7fab8275665471654c6fa9a1029412f37a236455fec9aa20951ef651
3
+ metadata.gz: bb17cbf3c7f7242c9b4b59029f9e0b4cc1b5f69d0232047cf9876a78f654579d
4
+ data.tar.gz: ef2ab37b08492563235b4fd80de9462f86c684b4cea8d42da1daea17c5643bc0
5
5
  SHA512:
6
- metadata.gz: 40deb64d676410e4c1bfc35c33078eb589855459378456806f3e7d3b07c1db47e53b4a9d6dd43a1be70512bc671b538ad25c4eb16a265f31d44d555b8a0181ed
7
- data.tar.gz: 3280913d3d3afad37c3132074a015704de50e89bc9ed2f78e3905f86e073c9173f199fcdcfbdb7aeacbcb50784f69eebd03b793c08d1d37887b75ccf487d7574
6
+ metadata.gz: 67e35c398c10bbf1016b9c204f8dd5a71568442b9a9abd023c1da0af5f8882c9a7fb5ec59c1f16123855f74b705f3352757e8f92a137b9483fa298bfa50e72c6
7
+ data.tar.gz: 19c44de33e962c58597eb226584ae4e19cf2be134d82263f021592ca6301b85de32d408b971494e6fe9b87a91a8f82fd4da61f0880e64665e953a7c16d69eef5
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- a_parser_client (0.1.6)
4
+ a_parser_client (0.1.12)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.3)
10
- rake (10.5.0)
10
+ rake (13.0.1)
11
11
  rspec (3.8.0)
12
12
  rspec-core (~> 3.8.0)
13
13
  rspec-expectations (~> 3.8.0)
@@ -28,8 +28,8 @@ PLATFORMS
28
28
  DEPENDENCIES
29
29
  a_parser_client!
30
30
  bundler (~> 2.0)
31
- rake (~> 10.0)
31
+ rake (~> 13.0)
32
32
  rspec (~> 3.0)
33
33
 
34
34
  BUNDLED WITH
35
- 2.0.2
35
+ 2.2.6
data/README.md CHANGED
@@ -8,27 +8,29 @@ This is a test release, more API coverage is upcoming.
8
8
 
9
9
  Covered for now:
10
10
 
11
- - ping
12
- - info
13
- - getTaskList
14
- - getTaskState
15
- - getTaskConf
16
- - addTask
17
- - changeTaskStatus
18
- - getAccountsCount
19
- - getProxies
20
- - update
21
- - getTaskResultsFile
22
- - deleteTaskResultsFile
23
- - moveTask
24
- - getParserInfo
25
- - getParserPreset
11
+ - ping
12
+ - info
13
+ - getTaskList
14
+ - getTaskState
15
+ - getTaskConf
16
+ - addTask
17
+ - changeTaskStatus
18
+ - getAccountsCount
19
+ - getProxies
20
+ - update
21
+ - getTaskResultsFile
22
+ - deleteTaskResultsFile
23
+ - moveTask
24
+ - getParserInfo
25
+ - getParserPreset
26
+ - oneRequest
27
+ - bulkRequest
26
28
 
27
29
  TODO:
28
30
 
29
- - oneRequest
30
- - bulkRequest
31
+ Some automation procedures:
31
32
 
33
+ - multitasks operations (like stop all tasks etc.)
32
34
 
33
35
 
34
36
  ## Installation
@@ -29,6 +29,6 @@ Gem::Specification.new do |spec|
29
29
  spec.require_paths = ["lib"]
30
30
 
31
31
  spec.add_development_dependency "bundler", "~> 2.0"
32
- spec.add_development_dependency "rake", "~> 10.0"
32
+ spec.add_development_dependency "rake", "~> 13.0"
33
33
  spec.add_development_dependency "rspec", "~> 3.0"
34
34
  end
data/bin/console CHANGED
@@ -1,14 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "a_parser_client"
4
+ require 'bundler/setup'
5
+ require 'a_parser_client'
5
6
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
7
+ require 'irb'
14
8
  IRB.start(__FILE__)
@@ -1,219 +1,27 @@
1
- require "a_parser_client/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'a_parser_client/version'
4
+ require 'a_parser_client/api'
2
5
 
3
6
  module AParserClient
4
7
  class Error < StandardError; end
5
8
 
6
- class API
7
- require "json"
8
- require "open-uri"
9
- require "net/http"
10
-
11
- attr :api_url, :api_password, :alive
12
-
13
- def initialize(api_url, api_password)
14
- if api_url =~ URI::regexp
15
- @api_url = api_url
16
- @api_password = api_password
17
- @alive = self.alive?
18
- else
19
- raise "Bad API URL provided."
20
- end
21
- end
22
-
23
- def ping
24
- request = {
25
- password: @api_pass,
26
- action: 'ping'
27
- }
28
- do_it request
29
- end
30
-
31
- #updates alive status
32
- def alive?
33
- @alive = ping ? true : false
34
- end
35
-
36
-
37
- def get_task_list(completed=false)
38
- request = {
39
- password: @api_password,
40
- action: 'getTasksList',
41
- data: {completed: completed ? 1 : 0}
42
- }
43
- do_it request
44
- end
45
-
46
- def get_task_state(task_id)
47
- request = {
48
- password: @api_password,
49
- action: 'getTaskState',
50
- data: {taskUid: task_id}
51
- }
52
- do_it request
53
- end
54
-
55
- def get_task_conf(task_id)
56
- request = {
57
- password: @api_password,
58
- action: 'getTaskConf',
59
- data: {taskUid: task_id}
60
- }
61
- do_it request
62
- end
63
-
64
-
65
- def get_info
66
- request = {
67
- password: @api_password,
68
- action: 'info',
69
- }
70
- do_it request
71
- end
72
-
73
- def add_task(task_type='text', queries_array=[], queries_file=nil, config, preset, parsers, result_file_name)
74
- request = {
75
- password: @api_password,
76
- action: 'addTask',
77
- data: {
78
- queriesFrom: task_type,
79
- queries: (task_type == 'text' ? queries_array : queries_file),
80
- configPreset: config,
81
- preset: preset,
82
- parsers: parsers,
83
- resultsFileName: result_file_name
84
- }
85
- }
86
- do_it request
87
- end
88
-
89
- def change_task_status(task_id, to_status)
90
- request = {
91
- password: @api_password,
92
- action: 'changeTaskStatus',
93
- data: {
94
- taskUid: task_id,
95
- toStatus: to_status
96
- }
97
- }
98
- do_it request
99
- end
100
-
101
- def get_accounts_count
102
- request = {
103
- password: @api_password,
104
- action: 'getAccountsCount',
105
- data: {}
106
- }
107
- do_it request
108
- end
109
-
110
-
111
- def get_proxies
112
- request = {
113
- password: @api_password,
114
- action: 'getProxies'
115
- }
116
- do_it request
117
- end
118
-
119
- def update!
120
- request = {
121
- password: @api_password,
122
- action: 'update',
123
- data: {}
124
- }
125
- do_it request
126
- end
127
-
128
- def get_task_results_file(task_id)
129
- request = {
130
- password: @api_password,
131
- action: 'getTaskResultsFile',
132
- data: {taskUid: task_id}
133
- }
134
- do_it request
135
- end
136
-
137
- def delete_task_results_file(task_id)
138
- request = {
139
- password: @api_password,
140
- action: 'deleteTaskResultsFile',
141
- data: {taskUid: task_id}
142
- }
143
- do_it request
144
- end
145
-
146
- def move_task(task_id, direction)
147
- request = {
148
- password: @api_password,
149
- action: 'moveTask',
150
- data: {
151
- taskUid: task_id,
152
- toStatus: direction
153
- }
154
- }
155
- do_it request
156
- end
157
-
158
- def get_parser_info(parser_name)
159
- request = {
160
- password: @api_password,
161
- action: 'getParserInfo',
162
- data: {
163
- parser: parser_name
164
- }
165
- }
166
- do_it request
167
- end
168
-
169
-
170
- def get_parser_preset(parser_name, preset_name)
171
- request = {
172
- password: @api_password,
173
- action: 'getParserInfo',
174
- data: {
175
- parser: parser_name,
176
- reset: preset_name
177
- }
178
- }
179
- do_it request
180
- end
181
-
182
-
183
- private # internal use only
9
+ class Control
10
+ attr_reader :tasks, :driver
184
11
 
185
- def do_it(request)
186
- request_body = request.to_json
187
- response = send_request(request_body)
188
- return response
189
- end
12
+ def initialize(api_driver)
13
+ @driver = api_driver
190
14
 
191
- def send_request(request)
192
- uri = URI @api_url
15
+ raise 'No API driver provided.' unless @driver
193
16
 
194
- req = Net::HTTP::Post.new uri
195
- req.body = (request)
196
- req.content_type = 'text/plain; charset=UTF-8'
17
+ raise 'API driver should be alive to take control of parser.' unless @driver.alive?
197
18
 
198
- begin
199
- res = Net::HTTP.start(uri.hostname, uri.port) {|http|
200
- http.request(req)
201
- }
202
- rescue Exception => e
203
- puts "Send request error: #{e}"
204
- end
19
+ @tasks = fetch_tasks
20
+ end
205
21
 
206
- if res
207
- begin
208
- response = JSON.parse res.body
209
- rescue JSON::ParserError => e
210
- raise "Not a JSON type response from the server #{@api_url}. Probably not an API endpoint."
211
- end
212
- else
213
- nil
214
- end
215
- end
216
-
217
-
22
+ def fetch_tasks
23
+ data = @driver.get_tasks_list
24
+ data['data'] || []
25
+ end
218
26
  end
219
27
  end
@@ -0,0 +1,238 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AParserClient
4
+ class API
5
+ require 'json'
6
+ require 'open-uri'
7
+ require 'net/http'
8
+
9
+ attr :api_url, :api_password, :alive
10
+
11
+ def initialize(api_url, api_password)
12
+ raise 'Bad API URL provided.' unless api_url =~ URI::DEFAULT_PARSER.make_regexp
13
+
14
+ @api_url = api_url
15
+ @api_password = api_password
16
+ @alive = alive?
17
+ end
18
+
19
+ def ping
20
+ request = {
21
+ password: @api_password,
22
+ action: 'ping'
23
+ }
24
+ do_it request
25
+ end
26
+
27
+ # updates alive status
28
+ def alive?
29
+ @alive = ping ? true : false
30
+ end
31
+
32
+ def get_tasks_list(completed = false)
33
+ request = {
34
+ password: @api_password,
35
+ action: 'getTasksList',
36
+ data: { completed: completed ? 1 : 0 }
37
+ }
38
+ do_it request
39
+ end
40
+
41
+ def get_task_state(task_id)
42
+ request = {
43
+ password: @api_password,
44
+ action: 'getTaskState',
45
+ data: { taskUid: task_id }
46
+ }
47
+ do_it request
48
+ end
49
+
50
+ def get_task_conf(task_id)
51
+ request = {
52
+ password: @api_password,
53
+ action: 'getTaskConf',
54
+ data: { taskUid: task_id }
55
+ }
56
+ do_it request
57
+ end
58
+
59
+ def get_info
60
+ request = {
61
+ password: @api_password,
62
+ action: 'info',
63
+ }
64
+ do_it request
65
+ end
66
+
67
+ def add_task(task_type = 'text', queries_array = [], queries_file = nil, config, preset, parsers, result_file_name)
68
+ request = {
69
+ password: @api_password,
70
+ action: 'addTask',
71
+ data: {
72
+ queriesFrom: task_type,
73
+ queries: (task_type == 'text' ? queries_array : queries_file),
74
+ configPreset: config,
75
+ preset: preset,
76
+ parsers: parsers,
77
+ resultsFileName: result_file_name
78
+ }
79
+ }
80
+ do_it request
81
+ end
82
+
83
+ def one_request(query, parser, preset = 'default', config_preset = 'default', options = [])
84
+ request = {
85
+ password: @api_password,
86
+ action: 'oneRequest',
87
+ data: {
88
+ query: query,
89
+ parser: parser,
90
+ configPreset: config_preset,
91
+ preset: preset,
92
+ options: options
93
+ }
94
+ }
95
+ do_it request
96
+ end
97
+
98
+ def bulk_request(queries, parser, preset, config_preset, threads, raw_results, need_data, options)
99
+ request = {
100
+ password: @api_password,
101
+ action: 'bulkRequest',
102
+ data: {
103
+ queries: queries,
104
+ parser: parser,
105
+ configPreset: config_preset,
106
+ preset: preset,
107
+ threads: threads,
108
+ rawResults: raw_results,
109
+ needData: need_data,
110
+ options: options
111
+ }
112
+ }
113
+ do_it request
114
+ end
115
+
116
+ def change_task_status(task_id, to_status)
117
+ request = {
118
+ password: @api_password,
119
+ action: 'changeTaskStatus',
120
+ data: {
121
+ taskUid: task_id,
122
+ toStatus: to_status
123
+ }
124
+ }
125
+ do_it request
126
+ end
127
+
128
+ def get_accounts_count
129
+ request = {
130
+ password: @api_password,
131
+ action: 'getAccountsCount',
132
+ data: {}
133
+ }
134
+ do_it request
135
+ end
136
+
137
+ def get_proxies
138
+ request = {
139
+ password: @api_password,
140
+ action: 'getProxies'
141
+ }
142
+ do_it request
143
+ end
144
+
145
+ def update!
146
+ request = {
147
+ password: @api_password,
148
+ action: 'update',
149
+ data: {}
150
+ }
151
+ do_it request
152
+ end
153
+
154
+ def get_task_results_file(task_id)
155
+ request = {
156
+ password: @api_password,
157
+ action: 'getTaskResultsFile',
158
+ data: { taskUid: task_id }
159
+ }
160
+ do_it request
161
+ end
162
+
163
+ def delete_task_results_file(task_id)
164
+ request = {
165
+ password: @api_password,
166
+ action: 'deleteTaskResultsFile',
167
+ data: { taskUid: task_id }
168
+ }
169
+ do_it request
170
+ end
171
+
172
+ def move_task(task_id, direction)
173
+ request = {
174
+ password: @api_password,
175
+ action: 'moveTask',
176
+ data: {
177
+ taskUid: task_id,
178
+ toStatus: direction
179
+ }
180
+ }
181
+ do_it request
182
+ end
183
+
184
+ def get_parser_info(parser_name)
185
+ request = {
186
+ password: @api_password,
187
+ action: 'getParserInfo',
188
+ data: {
189
+ parser: parser_name
190
+ }
191
+ }
192
+ do_it request
193
+ end
194
+
195
+ def get_parser_preset(parser_name, preset_name)
196
+ request = {
197
+ password: @api_password,
198
+ action: 'getParserInfo',
199
+ data: {
200
+ parser: parser_name,
201
+ reset: preset_name
202
+ }
203
+ }
204
+ do_it request
205
+ end
206
+
207
+ private # internal use only
208
+
209
+ def do_it(request)
210
+ request_body = request.to_json
211
+ send_request(request_body)
212
+ end
213
+
214
+ def send_request(request)
215
+ uri = URI @api_url
216
+
217
+ req = Net::HTTP::Post.new uri
218
+ req.body = (request)
219
+ req.content_type = 'text/plain; charset=UTF-8'
220
+
221
+ begin
222
+ res = Net::HTTP.start(uri.hostname, uri.port) do |http|
223
+ http.request(req)
224
+ end
225
+ rescue StandardError => e
226
+ puts "Send request error: #{e}"
227
+ end
228
+
229
+ return unless res
230
+
231
+ begin
232
+ JSON.parse res.body
233
+ rescue JSON::ParserError => e
234
+ raise "Not a JSON type response from the server #{@api_url}. Probably not an API endpoint. Error: #{e}"
235
+ end
236
+ end
237
+ end
238
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AParserClient
2
- VERSION = "0.1.6"
4
+ VERSION = '0.1.12'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: a_parser_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaroslav Shevchenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-25 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.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: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +72,7 @@ files:
72
72
  - bin/console
73
73
  - bin/setup
74
74
  - lib/a_parser_client.rb
75
+ - lib/a_parser_client/api.rb
75
76
  - lib/a_parser_client/version.rb
76
77
  homepage: https://github.com/yvshevchenko/a_parser_client
77
78
  licenses:
@@ -96,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
97
  - !ruby/object:Gem::Version
97
98
  version: '0'
98
99
  requirements: []
99
- rubyforge_project:
100
- rubygems_version: 2.7.7
100
+ rubygems_version: 3.1.4
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: A simple inerface to A-Parser API.