class BlackStack::MyBotProcess
clase de base para todos los bots ejecuten acciones con una cuenta de LinkedIn, Facebook, Twitter, etc.
Attributes
login_verifications[RW]
run_once[RW]
username[RW]
Public Class Methods
new( the_worker_name, the_division_name, the_minimum_enlapsed_seconds=MyProcess::DEFAULT_MINIMUM_ENLAPSED_SECONDS, the_verify_configuration=true, the_email=nil, the_password=nil )
click to toggle source
constructor
Calls superclass method
BlackStack::MyProcess::new
# File lib/mybotprocess.rb, line 8 def initialize( the_worker_name, the_division_name, the_minimum_enlapsed_seconds=MyProcess::DEFAULT_MINIMUM_ENLAPSED_SECONDS, the_verify_configuration=true, the_email=nil, the_password=nil ) super(the_worker_name, the_division_name, the_minimum_enlapsed_seconds, the_verify_configuration, the_email, the_password) self.assigned_process = File.expand_path($0) self.worker_name = "#{the_worker_name}" self.division_name = the_division_name self.minimum_enlapsed_seconds = the_minimum_enlapsed_seconds # algunas clases como CreateLnUserProcess o RepairLnUserProcess, trabajan unicamente con el username especificado en este atributo, llamando al access point get_lnuser_by_username. # si este atributo es nil, entonces la clase pide un lnuser a la division, llamando al access point get_lnuser. self.username = nil # al correr un proceso sin supervision, el login require verificaciones automaticas que demoran tiempo (account blocingcaptcha, sms pin, bloqueo) # las verificaciones consument tiempo. # si este proceso se corre de forma supevisada, las verificaciones se pueden deshabilitar self.login_verifications = true # al correr sin supervision, el proceso de terminar un un paquete de procesamiento y comenzar con otro, funcionando en un loop infinito. # si este proceso se corre de forma supevisada, se desa correr el procesamiento una unica vez. # cuando se activa este flag, generalmente se setea el atributo self.username tambien. self.run_once = false # preguntar al servidor si el lnuser debe calentar el browser visitando sitios al azar para recolectar cookies self.cookies_robot = true end
Public Instance Methods
getLnUser(workflow_name='incrawl.lnsearchvariation')
click to toggle source
returns a hash with the parameters of a lnuser raises an exception if it could not get a lnuser, or if ocurrs any other problem
# File lib/mybotprocess.rb, line 76 def getLnUser(workflow_name='incrawl.lnsearchvariation') nTries = 0 parsed = nil lnuser = nil # hash bSuccess = false sError = "" while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/get_lnuser.json" res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'name' => self.fullWorkerName}) parsed = JSON.parse(res.body) if (parsed['status']=='success') lnuser = parsed bSuccess = true else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception:" + e2.to_console end end # while if (bSuccess==false) raise BlackStack::Netting::ApiCallException.new(sError) end return lnuser end
getLnUserByUsername(username)
click to toggle source
returns a hash with the parameters of a lnuser raises an exception if it could not get a lnuser, or if ocurrs any other problem
# File lib/mybotprocess.rb, line 42 def getLnUserByUsername(username) nTries = 0 parsed = nil lnuser = nil # hash bSuccess = false sError = "" while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/login.lnuser/get_lnuser.json" res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'username' => username.encode("UTF-8")}) parsed = JSON.parse(res.body) if (parsed['status']=='success') lnuser = parsed bSuccess = true else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception: " + e2.to_console end end # while if (bSuccess==false) raise BlackStack::Netting::ApiCallException.new(sError) end return lnuser end
isLnUserAvailable(id_lnuser, need_sales_navigator=false, workflow_name='incrawl.lnsearchvariation')
click to toggle source
# File lib/mybotprocess.rb, line 304 def isLnUserAvailable(id_lnuser, need_sales_navigator=false, workflow_name='incrawl.lnsearchvariation') nTries = 0 parsed = nil bSuccess = false sError = "" ret = false while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/is_lnuser_available.json" res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'id_lnuser' => id_lnuser, 'need_sales_navigator' => need_sales_navigator,} ) parsed = JSON.parse(res.body) if (parsed['status']=='success') bSuccess = true ret = parsed['value'] else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_s rescue => e2 sError = "Alghoritm Exception" + e2.to_s + '\r\n' + e2.backtrace.join("\r\n").to_s end end # while if (bSuccess==false) raise "#{sError}" end return ret end
notifyError(uid, description, oid=nil)
click to toggle source
Toma una captura del browser. Sube un registro a la tabla boterrorlog, con el id del worker, el proceso asinado, y el screenshot.
uid: id de un registro en la tabla lnuser. description: backtrace de la excepcion.
# File lib/mybotprocess.rb, line 249 def notifyError(uid, description, oid=nil) # tomo captura de pantalla file = nil =begin # TODO: habilitar esto cuando se migre a RestClient en vez de CallPost begin screenshot_filename = "./error.png" # TODO: colocar un nombre unico formado por por el fullname del worker, y la fecha-hora. BrowserFactory.screenshot screenshot_filename file = File.new(screenshot_filename, "rb") rescue => e puts "Screenshot Error: #{e.to_s}" file = nil end =end #puts "" #puts "id_worker:#{PROCESS.worker.id}" #puts "worker_name:#{PROCESS.fullWorkerName}" #puts "process:#{PROCESS.worker.assigned_process}" #puts "" # subo el error nTries = 0 bSuccess = false parsed = nil sError = "" while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/boterror.json" res = BlackStack::Netting::call_post(url, # TODO: migrar a RestClient para poder hacer file upload 'api_key' => BlackStack::Pampa::api_key, 'id_lnuser' => uid, 'id_object' => oid, 'worker_name' => PROCESS.fullWorkerName, 'process' => PROCESS.worker.assigned_process, 'description' => description, 'screenshot' => file, ) parsed = JSON.parse(res.body) if (parsed['status']=='success') bSuccess = true else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception:" + e2.to_console end end # while if (bSuccess==false) raise "#{sError}" end end
notifyInbox(lnuser, conv)
click to toggle source
# File lib/mybotprocess.rb, line 109 def notifyInbox(lnuser, conv) conv[:chats].each { |chat| # armo URL de notificacion # se usa URI.encode para codificar caracteres no-ascii en los mensajes url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/scrape.inbox/notify_lnchat.json?" + "api_key=#{BlackStack::Pampa::api_key}&" + "profile_code=#{CGI.escape(conv[:profile_code])}&" + "profile_name=#{CGI.escape(conv[:profile_name])}&" + "profile_headline=#{CGI.escape(conv[:profile_headline])}&" + "first=#{CGI.escape(conv[:first])}&" + "position=#{chat[:position].to_s}&" + "uid=#{lnuser['id']}&" + "sender_name=#{CGI.escape(chat[:sender_name])}&" + "body=#{CGI.escape(chat[:body])}&" puts "" puts "url:#{url}:." puts "" # HELP: File.open('./output3.txt', 'a') { |file| file.write(url + "\r\n") } # push the chat uri = URI.parse(url.to_s) req = Net::HTTP::Get.new(uri.to_s) res = Net::HTTP.start(uri.host, uri.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) {|http| http.request(req) } parsed = JSON.parse(res.body) raise "error uploading chat: #{parsed['status']}" if parsed['status'] != 'success' } # conv[:chats].each end
notifyLnUserActivity(id_lnuser, code, workflow_name='incrawl.lnsearchvariation')
click to toggle source
# File lib/mybotprocess.rb, line 210 def notifyLnUserActivity(id_lnuser, code, workflow_name='incrawl.lnsearchvariation') nTries = 0 parsed = nil bSuccess = false sError = "" while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/notify_lnuser_activity.json" res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'id_lnuser' => id_lnuser, 'code' => code,} ) parsed = JSON.parse(res.body) if (parsed['status']=='success') bSuccess = true else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception:" + e2.to_console end end # while if (bSuccess==false) raise "#{sError}" end end
notifyLnUserStatus(id_lnuser, status, workflow_name='incrawl.lnsearchvariation')
click to toggle source
# File lib/mybotprocess.rb, line 175 def notifyLnUserStatus(id_lnuser, status, workflow_name='incrawl.lnsearchvariation') nTries = 0 parsed = nil bSuccess = false sError = "" while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/notify_lnuser_status.json" res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'id_lnuser' => id_lnuser, 'status' => status,} ) parsed = JSON.parse(res.body) if (parsed['status']=='success') bSuccess = true else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception:" + e2.to_console end end # while if (bSuccess==false) raise "#{sError}" end end
notifyLnUserUrl(id_lnuser, profile_url)
click to toggle source
# File lib/mybotprocess.rb, line 141 def notifyLnUserUrl(id_lnuser, profile_url) nTries = 0 parsed = nil bSuccess = false sError = "" while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/login.lnuser/notify_url.json" res = BlackStack::Netting::call_post(url, {:api_key => BlackStack::Pampa::api_key, 'id_lnuser' => id_lnuser, 'url' => profile_url,} ) parsed = JSON.parse(res.body) if (parsed['status']=='success') bSuccess = true else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception:" + e2.to_console end end # while if (bSuccess==false) raise "#{sError}" end end
releaseLnUser(id_lnuser, workflow_name='incrawl.lnsearchvariation')
click to toggle source
TODO: deprecated
# File lib/mybotprocess.rb, line 343 def releaseLnUser(id_lnuser, workflow_name='incrawl.lnsearchvariation') =begin nTries = 0 parsed = nil bSuccess = false sError = "" ret = false while (nTries < 5 && bSuccess == false) begin nTries = nTries + 1 url = "#{BlackStack::Pampa::api_protocol}://#{self.ws_url}:#{self.ws_port}/api1.3/pampa/#{workflow_name}/release_lnuser.json" res = BlackStack::Netting::call_post(url, {'api_key' => BlackStack::Pampa::api_key, 'id_lnuser' => id_lnuser,} ) parsed = JSON.parse(res.body) if (parsed['status']=='success') bSuccess = true ret = parsed['value'] else sError = parsed['status'] end rescue Errno::ECONNREFUSED => e sError = "Errno::ECONNREFUSED:" + e.to_console rescue => e2 sError = "Exception:" + e2.to_console end end # while if (bSuccess==false) raise "#{sError}" end return ret =end end