pampa_workers 1.1.24 → 1.1.28
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/lib/myremoteprocess.rb +4 -3
- data/lib/pampa_workers.rb +0 -1
- metadata +2 -3
- data/lib/mybotprocess.rb +0 -383
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9709235a07b22008efb15ba9beabdd1a48a2851c
|
4
|
+
data.tar.gz: 4b1fc32e145daf227f24a3d2322558e76fb8c36a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4bebfaee2361128d0e262f6bf95adb988e532c63a037dc9a255b9ab78da49e4ff1f4ce7614803cc79bfafb12b5bd1ae45a511b7f82d6f3bc1ec173029b87079
|
7
|
+
data.tar.gz: b8bb83baca140e9a36f21deb837558eee11ee1f0e2b0efd013040669d3cfc0a2ab9f02edc3d2e25b6b9d3707abe9df94603a967f58aaac13bb86974a1bfd883f
|
data/lib/myremoteprocess.rb
CHANGED
@@ -38,9 +38,9 @@ module BlackStack
|
|
38
38
|
end
|
39
39
|
|
40
40
|
#
|
41
|
-
def run()
|
41
|
+
def run()
|
42
42
|
super
|
43
|
-
|
43
|
+
|
44
44
|
# creo el objeto logger
|
45
45
|
self.logger = RemoteLogger.new(
|
46
46
|
"#{self.fullWorkerName}.log",
|
@@ -52,7 +52,8 @@ module BlackStack
|
|
52
52
|
)
|
53
53
|
|
54
54
|
logger.log "Remote process is alive!"
|
55
|
-
|
55
|
+
puts
|
56
|
+
puts "api_url:#{BlackStack::Pampa::api_url}"
|
56
57
|
# actualiza parametros de la central
|
57
58
|
logger.logs "Update from central (1-remote)... "
|
58
59
|
self.get
|
data/lib/pampa_workers.rb
CHANGED
@@ -19,7 +19,6 @@ require_relative './mychildprocess'
|
|
19
19
|
require_relative './mylocalprocess'
|
20
20
|
require_relative './myparentprocess'
|
21
21
|
require_relative './myremoteprocess'
|
22
|
-
require_relative './mybotprocess'
|
23
22
|
require_relative './mycrawlprocess'
|
24
23
|
require_relative './remoteworker'
|
25
24
|
require_relative './remotedivision'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pampa_workers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Daniel Sardi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket
|
@@ -121,7 +121,6 @@ files:
|
|
121
121
|
- lib/client.rb
|
122
122
|
- lib/division.rb
|
123
123
|
- lib/login.rb
|
124
|
-
- lib/mybotprocess.rb
|
125
124
|
- lib/mychildprocess.rb
|
126
125
|
- lib/mycrawlprocess.rb
|
127
126
|
- lib/mylocalprocess.rb
|
data/lib/mybotprocess.rb
DELETED
@@ -1,383 +0,0 @@
|
|
1
|
-
module BlackStack
|
2
|
-
|
3
|
-
# clase de base para todos los bots ejecuten acciones con una cuenta de LinkedIn, Facebook, Twitter, etc.
|
4
|
-
class MyBotProcess < BlackStack::MyRemoteProcess
|
5
|
-
attr_accessor :username, :login_verifications, :run_once, :cookies_robot
|
6
|
-
|
7
|
-
# constructor
|
8
|
-
def initialize(
|
9
|
-
the_worker_name,
|
10
|
-
the_division_name,
|
11
|
-
the_minimum_enlapsed_seconds=MyProcess::DEFAULT_MINIMUM_ENLAPSED_SECONDS,
|
12
|
-
the_verify_configuration=true,
|
13
|
-
the_email=nil,
|
14
|
-
the_password=nil
|
15
|
-
)
|
16
|
-
super(the_worker_name, the_division_name, the_minimum_enlapsed_seconds, the_verify_configuration, the_email, the_password)
|
17
|
-
self.assigned_process = File.expand_path($0)
|
18
|
-
self.worker_name = "#{the_worker_name}"
|
19
|
-
self.division_name = the_division_name
|
20
|
-
self.minimum_enlapsed_seconds = the_minimum_enlapsed_seconds
|
21
|
-
|
22
|
-
# algunas clases como CreateLnUserProcess o RepairLnUserProcess, trabajan unicamente con el username especificado en este atributo, llamando al access point get_lnuser_by_username.
|
23
|
-
# si este atributo es nil, entonces la clase pide un lnuser a la division, llamando al access point get_lnuser.
|
24
|
-
self.username = nil
|
25
|
-
|
26
|
-
# al correr un proceso sin supervision, el login require verificaciones automaticas que demoran tiempo (account blocingcaptcha, sms pin, bloqueo)
|
27
|
-
# las verificaciones consument tiempo.
|
28
|
-
# si este proceso se corre de forma supevisada, las verificaciones se pueden deshabilitar
|
29
|
-
self.login_verifications = true
|
30
|
-
|
31
|
-
# al correr sin supervision, el proceso de terminar un un paquete de procesamiento y comenzar con otro, funcionando en un loop infinito.
|
32
|
-
# si este proceso se corre de forma supevisada, se desa correr el procesamiento una unica vez.
|
33
|
-
# cuando se activa este flag, generalmente se setea el atributo self.username tambien.
|
34
|
-
self.run_once = false
|
35
|
-
|
36
|
-
# preguntar al servidor si el lnuser debe calentar el browser visitando sitios al azar para recolectar cookies
|
37
|
-
self.cookies_robot = true
|
38
|
-
end
|
39
|
-
|
40
|
-
# returns a hash with the parameters of a lnuser
|
41
|
-
# raises an exception if it could not get a lnuser, or if ocurrs any other problem
|
42
|
-
def getLnUserByUsername(username)
|
43
|
-
nTries = 0
|
44
|
-
parsed = nil
|
45
|
-
lnuser = nil # hash
|
46
|
-
bSuccess = false
|
47
|
-
sError = ""
|
48
|
-
while (nTries < 5 && bSuccess == false)
|
49
|
-
begin
|
50
|
-
nTries = nTries + 1
|
51
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/login.lnuser/get_lnuser.json"
|
52
|
-
res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'username' => username.encode("UTF-8")})
|
53
|
-
parsed = JSON.parse(res.body)
|
54
|
-
if (parsed['status']=='success')
|
55
|
-
lnuser = parsed
|
56
|
-
bSuccess = true
|
57
|
-
else
|
58
|
-
sError = parsed['status']
|
59
|
-
end
|
60
|
-
rescue Errno::ECONNREFUSED => e
|
61
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
62
|
-
rescue => e2
|
63
|
-
sError = "Exception: " + e2.to_console
|
64
|
-
end
|
65
|
-
end # while
|
66
|
-
|
67
|
-
if (bSuccess==false)
|
68
|
-
raise BlackStack::Netting::ApiCallException.new(sError)
|
69
|
-
end
|
70
|
-
|
71
|
-
return lnuser
|
72
|
-
end # getLnUserByUsername()
|
73
|
-
|
74
|
-
# returns a hash with the parameters of a lnuser
|
75
|
-
# raises an exception if it could not get a lnuser, or if ocurrs any other problem
|
76
|
-
def getLnUser(workflow_name='incrawl.lnsearchvariation')
|
77
|
-
nTries = 0
|
78
|
-
parsed = nil
|
79
|
-
lnuser = nil # hash
|
80
|
-
bSuccess = false
|
81
|
-
sError = ""
|
82
|
-
while (nTries < 5 && bSuccess == false)
|
83
|
-
begin
|
84
|
-
nTries = nTries + 1
|
85
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/get_lnuser.json"
|
86
|
-
res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'name' => self.fullWorkerName})
|
87
|
-
parsed = JSON.parse(res.body)
|
88
|
-
if (parsed['status']=='success')
|
89
|
-
lnuser = parsed
|
90
|
-
bSuccess = true
|
91
|
-
else
|
92
|
-
sError = parsed['status']
|
93
|
-
end
|
94
|
-
rescue Errno::ECONNREFUSED => e
|
95
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
96
|
-
rescue => e2
|
97
|
-
sError = "Exception:" + e2.to_console
|
98
|
-
end
|
99
|
-
end # while
|
100
|
-
|
101
|
-
if (bSuccess==false)
|
102
|
-
raise BlackStack::Netting::ApiCallException.new(sError)
|
103
|
-
end
|
104
|
-
|
105
|
-
return lnuser
|
106
|
-
end # getLnUser()
|
107
|
-
|
108
|
-
#
|
109
|
-
def notifyInbox(lnuser, conv)
|
110
|
-
conv[:chats].each { |chat|
|
111
|
-
# armo URL de notificacion
|
112
|
-
# se usa URI.encode para codificar caracteres no-ascii en los mensajes
|
113
|
-
url =
|
114
|
-
"#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/scrape.inbox/notify_lnchat.json?" +
|
115
|
-
"api_key=#{BlackStack::Pampa::api_key}&" +
|
116
|
-
"profile_code=#{CGI.escape(conv[:profile_code])}&" +
|
117
|
-
"profile_name=#{CGI.escape(conv[:profile_name])}&" +
|
118
|
-
"profile_headline=#{CGI.escape(conv[:profile_headline])}&" +
|
119
|
-
"first=#{CGI.escape(conv[:first])}&" +
|
120
|
-
"position=#{chat[:position].to_s}&" +
|
121
|
-
"uid=#{lnuser['id']}&" +
|
122
|
-
"sender_name=#{CGI.escape(chat[:sender_name])}&" +
|
123
|
-
"body=#{CGI.escape(chat[:body])}&"
|
124
|
-
puts ""
|
125
|
-
puts "url:#{url}:."
|
126
|
-
puts ""
|
127
|
-
# HELP: File.open('./output3.txt', 'a') { |file| file.write(url + "\r\n") }
|
128
|
-
|
129
|
-
# push the chat
|
130
|
-
uri = URI.parse(url.to_s)
|
131
|
-
req = Net::HTTP::Get.new(uri.to_s)
|
132
|
-
res = Net::HTTP.start(uri.host, uri.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) {|http|
|
133
|
-
http.request(req)
|
134
|
-
}
|
135
|
-
parsed = JSON.parse(res.body)
|
136
|
-
raise "error uploading chat: #{parsed['status']}" if parsed['status'] != 'success'
|
137
|
-
} # conv[:chats].each
|
138
|
-
end
|
139
|
-
|
140
|
-
#
|
141
|
-
def notifyLnUserUrl(id_lnuser, profile_url)
|
142
|
-
nTries = 0
|
143
|
-
parsed = nil
|
144
|
-
bSuccess = false
|
145
|
-
sError = ""
|
146
|
-
while (nTries < 5 && bSuccess == false)
|
147
|
-
begin
|
148
|
-
nTries = nTries + 1
|
149
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/login.lnuser/notify_url.json"
|
150
|
-
res = BlackStack::Netting::call_post(url,
|
151
|
-
{:api_key => BlackStack::Pampa::api_key,
|
152
|
-
'id_lnuser' => id_lnuser,
|
153
|
-
'url' => profile_url,}
|
154
|
-
)
|
155
|
-
parsed = JSON.parse(res.body)
|
156
|
-
|
157
|
-
if (parsed['status']=='success')
|
158
|
-
bSuccess = true
|
159
|
-
else
|
160
|
-
sError = parsed['status']
|
161
|
-
end
|
162
|
-
rescue Errno::ECONNREFUSED => e
|
163
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
164
|
-
rescue => e2
|
165
|
-
sError = "Exception:" + e2.to_console
|
166
|
-
end
|
167
|
-
end # while
|
168
|
-
|
169
|
-
if (bSuccess==false)
|
170
|
-
raise "#{sError}"
|
171
|
-
end
|
172
|
-
end # notifyLnUserStatus
|
173
|
-
|
174
|
-
#
|
175
|
-
def notifyLnUserStatus(id_lnuser, status, workflow_name='incrawl.lnsearchvariation')
|
176
|
-
nTries = 0
|
177
|
-
parsed = nil
|
178
|
-
bSuccess = false
|
179
|
-
sError = ""
|
180
|
-
while (nTries < 5 && bSuccess == false)
|
181
|
-
begin
|
182
|
-
nTries = nTries + 1
|
183
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/notify_lnuser_status.json"
|
184
|
-
res = BlackStack::Netting::call_post(url,
|
185
|
-
{'api_key' => BlackStack::Pampa::api_key,
|
186
|
-
'id_lnuser' => id_lnuser,
|
187
|
-
'status' => status,}
|
188
|
-
)
|
189
|
-
parsed = JSON.parse(res.body)
|
190
|
-
|
191
|
-
if (parsed['status']=='success')
|
192
|
-
bSuccess = true
|
193
|
-
else
|
194
|
-
sError = parsed['status']
|
195
|
-
end
|
196
|
-
rescue Errno::ECONNREFUSED => e
|
197
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
198
|
-
rescue => e2
|
199
|
-
sError = "Exception:" + e2.to_console
|
200
|
-
end
|
201
|
-
end # while
|
202
|
-
|
203
|
-
if (bSuccess==false)
|
204
|
-
raise "#{sError}"
|
205
|
-
end
|
206
|
-
|
207
|
-
end # notifyLnUserStatus
|
208
|
-
|
209
|
-
#
|
210
|
-
def notifyLnUserActivity(id_lnuser, code, workflow_name='incrawl.lnsearchvariation')
|
211
|
-
nTries = 0
|
212
|
-
parsed = nil
|
213
|
-
bSuccess = false
|
214
|
-
sError = ""
|
215
|
-
while (nTries < 5 && bSuccess == false)
|
216
|
-
begin
|
217
|
-
nTries = nTries + 1
|
218
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/notify_lnuser_activity.json"
|
219
|
-
res = BlackStack::Netting::call_post(url,
|
220
|
-
{'api_key' => BlackStack::Pampa::api_key,
|
221
|
-
'id_lnuser' => id_lnuser,
|
222
|
-
'code' => code,}
|
223
|
-
)
|
224
|
-
parsed = JSON.parse(res.body)
|
225
|
-
|
226
|
-
if (parsed['status']=='success')
|
227
|
-
bSuccess = true
|
228
|
-
else
|
229
|
-
sError = parsed['status']
|
230
|
-
end
|
231
|
-
rescue Errno::ECONNREFUSED => e
|
232
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
233
|
-
rescue => e2
|
234
|
-
sError = "Exception:" + e2.to_console
|
235
|
-
end
|
236
|
-
end # while
|
237
|
-
|
238
|
-
if (bSuccess==false)
|
239
|
-
raise "#{sError}"
|
240
|
-
end
|
241
|
-
end # notifyLnUserStatus
|
242
|
-
|
243
|
-
# Toma una captura del browser.
|
244
|
-
# Sube un registro a la tabla boterrorlog, con el id del worker, el proceso asinado, y el screenshot.
|
245
|
-
#
|
246
|
-
# uid: id de un registro en la tabla lnuser.
|
247
|
-
# description: backtrace de la excepcion.
|
248
|
-
#
|
249
|
-
def notifyError(uid, description, oid=nil)
|
250
|
-
# tomo captura de pantalla
|
251
|
-
file = nil
|
252
|
-
=begin # TODO: habilitar esto cuando se migre a RestClient en vez de CallPost
|
253
|
-
begin
|
254
|
-
screenshot_filename = "./error.png" # TODO: colocar un nombre unico formado por por el fullname del worker, y la fecha-hora.
|
255
|
-
BrowserFactory.screenshot screenshot_filename
|
256
|
-
file = File.new(screenshot_filename, "rb")
|
257
|
-
rescue => e
|
258
|
-
puts "Screenshot Error: #{e.to_s}"
|
259
|
-
file = nil
|
260
|
-
end
|
261
|
-
=end
|
262
|
-
#puts ""
|
263
|
-
#puts "id_worker:#{PROCESS.worker.id}"
|
264
|
-
#puts "worker_name:#{PROCESS.fullWorkerName}"
|
265
|
-
#puts "process:#{PROCESS.worker.assigned_process}"
|
266
|
-
#puts ""
|
267
|
-
# subo el error
|
268
|
-
nTries = 0
|
269
|
-
bSuccess = false
|
270
|
-
parsed = nil
|
271
|
-
sError = ""
|
272
|
-
while (nTries < 5 && bSuccess == false)
|
273
|
-
begin
|
274
|
-
nTries = nTries + 1
|
275
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/boterror.json"
|
276
|
-
res = BlackStack::Netting::call_post(url, # TODO: migrar a RestClient para poder hacer file upload
|
277
|
-
'api_key' => BlackStack::Pampa::api_key,
|
278
|
-
'id_lnuser' => uid,
|
279
|
-
'id_object' => oid,
|
280
|
-
'worker_name' => PROCESS.fullWorkerName,
|
281
|
-
'process' => PROCESS.worker.assigned_process,
|
282
|
-
'description' => description,
|
283
|
-
'screenshot' => file,
|
284
|
-
)
|
285
|
-
parsed = JSON.parse(res.body)
|
286
|
-
if (parsed['status']=='success')
|
287
|
-
bSuccess = true
|
288
|
-
else
|
289
|
-
sError = parsed['status']
|
290
|
-
end
|
291
|
-
rescue Errno::ECONNREFUSED => e
|
292
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
293
|
-
rescue => e2
|
294
|
-
sError = "Exception:" + e2.to_console
|
295
|
-
end
|
296
|
-
end # while
|
297
|
-
|
298
|
-
if (bSuccess==false)
|
299
|
-
raise "#{sError}"
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
#
|
304
|
-
def isLnUserAvailable(id_lnuser, need_sales_navigator=false, workflow_name='incrawl.lnsearchvariation')
|
305
|
-
nTries = 0
|
306
|
-
parsed = nil
|
307
|
-
bSuccess = false
|
308
|
-
sError = ""
|
309
|
-
ret = false
|
310
|
-
|
311
|
-
while (nTries < 5 && bSuccess == false)
|
312
|
-
begin
|
313
|
-
nTries = nTries + 1
|
314
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/is_lnuser_available.json"
|
315
|
-
res = BlackStack::Netting::call_post(url,
|
316
|
-
{'api_key' => BlackStack::Pampa::api_key,
|
317
|
-
'id_lnuser' => id_lnuser,
|
318
|
-
'need_sales_navigator' => need_sales_navigator,}
|
319
|
-
)
|
320
|
-
parsed = JSON.parse(res.body)
|
321
|
-
|
322
|
-
if (parsed['status']=='success')
|
323
|
-
bSuccess = true
|
324
|
-
ret = parsed['value']
|
325
|
-
else
|
326
|
-
sError = parsed['status']
|
327
|
-
end
|
328
|
-
rescue Errno::ECONNREFUSED => e
|
329
|
-
sError = "Errno::ECONNREFUSED:" + e.to_s
|
330
|
-
rescue => e2
|
331
|
-
sError = "Alghoritm Exception" + e2.to_s + '\r\n' + e2.backtrace.join("\r\n").to_s
|
332
|
-
end
|
333
|
-
end # while
|
334
|
-
|
335
|
-
if (bSuccess==false)
|
336
|
-
raise "#{sError}"
|
337
|
-
end
|
338
|
-
|
339
|
-
return ret
|
340
|
-
end # isLnUserAvailable
|
341
|
-
|
342
|
-
# TODO: deprecated
|
343
|
-
def releaseLnUser(id_lnuser, workflow_name='incrawl.lnsearchvariation')
|
344
|
-
=begin
|
345
|
-
nTries = 0
|
346
|
-
parsed = nil
|
347
|
-
bSuccess = false
|
348
|
-
sError = ""
|
349
|
-
ret = false
|
350
|
-
|
351
|
-
while (nTries < 5 && bSuccess == false)
|
352
|
-
begin
|
353
|
-
nTries = nTries + 1
|
354
|
-
url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/release_lnuser.json"
|
355
|
-
res = BlackStack::Netting::call_post(url,
|
356
|
-
{'api_key' => BlackStack::Pampa::api_key, 'id_lnuser' => id_lnuser,}
|
357
|
-
)
|
358
|
-
parsed = JSON.parse(res.body)
|
359
|
-
|
360
|
-
if (parsed['status']=='success')
|
361
|
-
bSuccess = true
|
362
|
-
ret = parsed['value']
|
363
|
-
else
|
364
|
-
sError = parsed['status']
|
365
|
-
end
|
366
|
-
rescue Errno::ECONNREFUSED => e
|
367
|
-
sError = "Errno::ECONNREFUSED:" + e.to_console
|
368
|
-
rescue => e2
|
369
|
-
sError = "Exception:" + e2.to_console
|
370
|
-
end
|
371
|
-
end # while
|
372
|
-
|
373
|
-
if (bSuccess==false)
|
374
|
-
raise "#{sError}"
|
375
|
-
end
|
376
|
-
|
377
|
-
return ret
|
378
|
-
=end
|
379
|
-
end # isLnUserAvailable
|
380
|
-
|
381
|
-
end # class MyBotProcess
|
382
|
-
|
383
|
-
end # module BlackStack
|