a_parser_client 0.1.5 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f42e60203410c99b0db06edc1788deee8e1c4ced464b10ef096e9e03de1676d5
4
- data.tar.gz: 0d59de0239b5a7e25adb62591f00d39e235cf845954377e1eeab01ae7f645abe
3
+ metadata.gz: 9ed578569a32738b77fd112c9a9b5c4be1405b3d6ce338e2c3bb0a64874d76a4
4
+ data.tar.gz: 42647973d9272ffaae8b94989f1b784f5a656d5b526799e44fc397714ba16aad
5
5
  SHA512:
6
- metadata.gz: 68e0a2dc347538a632f42dbd6bc02567636f31295aebfd17944bcd3473138fd80085d4a5bc74cbd506f810c99aadec220ea88ed1740e3ee87a7d93309eddf911
7
- data.tar.gz: 3620212938726b6594e8dd8a952b866b506ab01ac6e1a1bcfd348ffd9a9e73155bbc6a7cb4467b2f0bb688983ee25a207630f00829c33910b2f362920f3c29d7
6
+ metadata.gz: b6b171c76b1d02e80c944d3e0925004594afaa82cea3e18c89e9fb4b216147e6ac24a27a4b161c9f39917fe1c537b6a4f5916f3f2544ee4ca2e908ceaaaf8b4e
7
+ data.tar.gz: e7a02d9b66cefdf14c0753fe95b231290f4fe9d5f7e92d7c48953ffaa7c082c16cf4129a8df55b3f1501b091d2a4b685b46c8bb7e1a4092c005f16c14b5b7728
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- a_parser_client (0.1.5)
4
+ a_parser_client (0.1.10)
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,7 +28,7 @@ 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
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
@@ -56,10 +58,10 @@ The code sample below is all for now...
56
58
  ```ruby
57
59
  require 'a_parser_client'
58
60
 
59
- api = AParserClient::API.new 'http://<your_host_running_aparser>:9091/API, ''
60
- api.ping
61
+ api = AParserClient::API.new 'http://<your_host_running_aparser>:9091/API, ''
62
+ api.ping
61
63
 
62
- $> {"success" : 1, "data" : "pong"}
64
+ => {"success" : 1, "data" : "pong"}
63
65
  ```
64
66
 
65
67
  ## Development
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Yaroslav Shevchenko"]
9
9
  spec.email = ["yvshevchenko@gmail.com"]
10
10
 
11
- spec.summary = %q{A simple inerface to a-parser API.}
12
- spec.description = %q{Gem allowing to use a-parser API simple way.}
11
+ spec.summary = %q{A simple inerface to A-Parser API.}
12
+ spec.description = %q{Gem allowing to use A-Parser API simple way.}
13
13
  spec.homepage = "https://github.com/yvshevchenko/a_parser_client"
14
14
  spec.license = "MIT"
15
15
 
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
19
  spec.metadata["source_code_uri"] = "https://github.com/yvshevchenko/a_parser_client"
20
- spec.metadata["changelog_uri"] = "https://github.com/yvshevchenko/a_parser_client"
20
+ spec.metadata["changelog_uri"] = "https://github.com/yvshevchenko/a_parser_client/wiki/Changes-Log"
21
21
 
22
22
  # Specify which files should be added to the gem when it is released.
23
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -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
@@ -1,219 +1,30 @@
1
1
  require "a_parser_client/version"
2
+ require "a_parser_client/api"
2
3
 
3
4
  module AParserClient
4
- class Error < StandardError; end
5
+ class Error < StandardError; end
5
6
 
6
- class API
7
- require "json"
8
- require "open-uri"
9
- require "net/http"
7
+ class Control
8
+ attr_reader :tasks, :driver
10
9
 
11
- attr :api_url, :api_password, :alive
10
+ def initialize(api_driver)
11
+ @driver = api_driver
12
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_a_parser
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_a_parser ? 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
13
+ if @driver
14
+ unless @driver.alive?
15
+ raise "API driver should be alive to take control of parser."
16
+ end
181
17
 
18
+ @tasks = fetch_tasks
19
+ else
20
+ raise "No API driver provided."
21
+ end
182
22
 
183
- private # internal use only
23
+ end
184
24
 
185
- def do_it(request)
186
- request_body = request.to_json
187
- response = send_request(request_body)
188
- return response
25
+ def fetch_tasks
26
+ data = @driver.get_tasks_list
27
+ data['data'] ? data['data'] : []
28
+ end
189
29
  end
190
-
191
- def send_request(request)
192
- uri = URI @api_url
193
-
194
- req = Net::HTTP::Post.new uri
195
- req.body = (request)
196
- req.content_type = 'text/plain; charset=UTF-8'
197
-
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
205
-
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
-
218
- end
219
30
  end
@@ -0,0 +1,253 @@
1
+ module AParserClient
2
+
3
+ class API
4
+ require "json"
5
+ require "open-uri"
6
+ require "net/http"
7
+
8
+ attr :api_url, :api_password, :alive
9
+
10
+ def initialize(api_url, api_password)
11
+ if api_url =~ URI::regexp
12
+ @api_url = api_url
13
+ @api_password = api_password
14
+ @alive = self.alive?
15
+ else
16
+ raise "Bad API URL provided."
17
+ end
18
+ end
19
+
20
+ def ping
21
+ request = {
22
+ password: @api_pass,
23
+ action: 'ping'
24
+ }
25
+ do_it request
26
+ end
27
+
28
+ #updates alive status
29
+ def alive?
30
+ @alive = ping ? true : false
31
+ end
32
+
33
+
34
+ def get_tasks_list(completed=false)
35
+ request = {
36
+ password: @api_password,
37
+ action: 'getTasksList',
38
+ data: {completed: completed ? 1 : 0}
39
+ }
40
+ do_it request
41
+ end
42
+
43
+ def get_task_state(task_id)
44
+ request = {
45
+ password: @api_password,
46
+ action: 'getTaskState',
47
+ data: {taskUid: task_id}
48
+ }
49
+ do_it request
50
+ end
51
+
52
+ def get_task_conf(task_id)
53
+ request = {
54
+ password: @api_password,
55
+ action: 'getTaskConf',
56
+ data: {taskUid: task_id}
57
+ }
58
+ do_it request
59
+ end
60
+
61
+
62
+ def get_info
63
+ request = {
64
+ password: @api_password,
65
+ action: 'info',
66
+ }
67
+ do_it request
68
+ end
69
+
70
+ def add_task(task_type='text', queries_array=[], queries_file=nil, config, preset, parsers, result_file_name)
71
+ request = {
72
+ password: @api_password,
73
+ action: 'addTask',
74
+ data: {
75
+ queriesFrom: task_type,
76
+ queries: (task_type == 'text' ? queries_array : queries_file),
77
+ configPreset: config,
78
+ preset: preset,
79
+ parsers: parsers,
80
+ resultsFileName: result_file_name
81
+ }
82
+ }
83
+ do_it request
84
+ end
85
+
86
+
87
+ def one_request(query, parser, preset='default', config_preset='default', options=[])
88
+ request = {
89
+ password: @api_password,
90
+ action: 'oneRequest',
91
+ data: {
92
+ query: query,
93
+ parser: parser,
94
+ configPreset: config_preset,
95
+ preset: preset,
96
+ options: options
97
+ }
98
+ }
99
+ do_it request
100
+ end
101
+
102
+ def bulk_request(queries, parser, preset, config_preset, threads, raw_results, need_data, options)
103
+ request = {
104
+ password: @api_password,
105
+ action: 'bulkRequest',
106
+ data: {
107
+ queries: queries,
108
+ parser: parser,
109
+ configPreset: config_preset,
110
+ preset: preset,
111
+ threads: threads,
112
+ rawResults: raw_results,
113
+ needData: need_data,
114
+ options: options
115
+ }
116
+ }
117
+ do_it request
118
+ end
119
+
120
+
121
+ def change_task_status(task_id, to_status)
122
+ request = {
123
+ password: @api_password,
124
+ action: 'changeTaskStatus',
125
+ data: {
126
+ taskUid: task_id,
127
+ toStatus: to_status
128
+ }
129
+ }
130
+ do_it request
131
+ end
132
+
133
+ def get_accounts_count
134
+ request = {
135
+ password: @api_password,
136
+ action: 'getAccountsCount',
137
+ data: {}
138
+ }
139
+ do_it request
140
+ end
141
+
142
+
143
+ def get_proxies
144
+ request = {
145
+ password: @api_password,
146
+ action: 'getProxies'
147
+ }
148
+ do_it request
149
+ end
150
+
151
+ def update!
152
+ request = {
153
+ password: @api_password,
154
+ action: 'update',
155
+ data: {}
156
+ }
157
+ do_it request
158
+ end
159
+
160
+ def get_task_results_file(task_id)
161
+ request = {
162
+ password: @api_password,
163
+ action: 'getTaskResultsFile',
164
+ data: {taskUid: task_id}
165
+ }
166
+ do_it request
167
+ end
168
+
169
+ def delete_task_results_file(task_id)
170
+ request = {
171
+ password: @api_password,
172
+ action: 'deleteTaskResultsFile',
173
+ data: {taskUid: task_id}
174
+ }
175
+ do_it request
176
+ end
177
+
178
+ def move_task(task_id, direction)
179
+ request = {
180
+ password: @api_password,
181
+ action: 'moveTask',
182
+ data: {
183
+ taskUid: task_id,
184
+ toStatus: direction
185
+ }
186
+ }
187
+ do_it request
188
+ end
189
+
190
+ def get_parser_info(parser_name)
191
+ request = {
192
+ password: @api_password,
193
+ action: 'getParserInfo',
194
+ data: {
195
+ parser: parser_name
196
+ }
197
+ }
198
+ do_it request
199
+ end
200
+
201
+
202
+ def get_parser_preset(parser_name, preset_name)
203
+ request = {
204
+ password: @api_password,
205
+ action: 'getParserInfo',
206
+ data: {
207
+ parser: parser_name,
208
+ reset: preset_name
209
+ }
210
+ }
211
+ do_it request
212
+ end
213
+
214
+
215
+ private # internal use only
216
+
217
+ def do_it(request)
218
+ request_body = request.to_json
219
+ response = send_request(request_body)
220
+ return response
221
+ end
222
+
223
+ def send_request(request)
224
+ uri = URI @api_url
225
+
226
+ req = Net::HTTP::Post.new uri
227
+ req.body = (request)
228
+ req.content_type = 'text/plain; charset=UTF-8'
229
+
230
+ begin
231
+ res = Net::HTTP.start(uri.hostname, uri.port) {|http|
232
+ http.request(req)
233
+ }
234
+ rescue Exception => e
235
+ puts "Send request error: #{e}"
236
+ end
237
+
238
+ if res
239
+ begin
240
+ response = JSON.parse res.body
241
+ rescue JSON::ParserError => e
242
+ raise "Not a JSON type response from the server #{@api_url}. Probably not an API endpoint."
243
+ end
244
+ else
245
+ nil
246
+ end
247
+ end
248
+
249
+
250
+ end
251
+
252
+
253
+ end
@@ -1,3 +1,3 @@
1
1
  module AParserClient
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.10"
3
3
  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.5
4
+ version: 0.1.10
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-24 00:00:00.000000000 Z
11
+ date: 2020-03-05 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
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
- description: Gem allowing to use a-parser API simple way.
55
+ description: Gem allowing to use A-Parser API simple way.
56
56
  email:
57
57
  - yvshevchenko@gmail.com
58
58
  executables: []
@@ -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:
@@ -80,7 +81,7 @@ metadata:
80
81
  allowed_push_host: https://rubygems.org
81
82
  homepage_uri: https://github.com/yvshevchenko/a_parser_client
82
83
  source_code_uri: https://github.com/yvshevchenko/a_parser_client
83
- changelog_uri: https://github.com/yvshevchenko/a_parser_client
84
+ changelog_uri: https://github.com/yvshevchenko/a_parser_client/wiki/Changes-Log
84
85
  post_install_message:
85
86
  rdoc_options: []
86
87
  require_paths:
@@ -100,5 +101,5 @@ rubyforge_project:
100
101
  rubygems_version: 2.7.7
101
102
  signing_key:
102
103
  specification_version: 4
103
- summary: A simple inerface to a-parser API.
104
+ summary: A simple inerface to A-Parser API.
104
105
  test_files: []