a_parser_client 0.1.5 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
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: []