class Parametros(object): def __init__(self): self.sql = Script() def retorna_parametros(self): try: parametros = self.sql.consulta_parametros() resultado = {} for parametro in parametros: if parametro['tipo_parametro'] == 'site': resultado['site'] = parametro['valor'] elif parametro['tipo_parametro'] == 'valor_voo': resultado['valor_voo'] = parametro['valor'] elif parametro['tipo_parametro'] == 'bot_token_telegram': resultado['bot_token_telegram'] = parametro['valor'] elif parametro['tipo_parametro'] == 'qnt_semanas': resultado['qnt_semanas'] = parametro['valor'] elif parametro['tipo_parametro'] == 'navegador_handler': resultado['navegador_handler'] = parametro['valor'] return resultado except Exception as exception: self.sql.insere_log(exception) return
class Comunicacao(object): def __init__(self): self.sql = Script() self.telegram = Telegram() def alerta_voos(self, valor, voos): try: msg = '--- CONSULTA: {} ---'.format(voos['data_hora']) msg += '\n' msg += '\n' msg += 'Os seguintes voos estão dentro do valor esperado de R${}: '.format( valor) msg2 = '' for voo in voos['lista_voos']: if voo['valor'] <= float(valor): result = '\n\n ORIGEM: {} \n DESTINO: {} \n VALOR: {} \n DATA: {} \n DIA DA SEMANA: {} \n ####################### \n'.format( voos['origem'], voos['destino'], voo['valor'], voo['data'], voo['dia_semana']) msg2 += result if msg2: msg += msg2 self.telegram.enviar_msg(msg) except Exception as exception: self.sql.insere_log(exception)
class Parametros(object): def __init__(self): self.sql = Script() def retorna_parametros(self): try: parametros = self.sql.consulta_parametros() resultado = {} for parametro in parametros: resultado[parametro['tipo_parametro']] = parametro['valor'] return resultado except Exception as exception: logger.exception(exception) self.sql.insere_log(exception) return
msg += 'O valor da passagem para pesquisa é: {}\n'.format( parametro['valor_voo']) msg += 'A quantidade de semanas que estamos analisando é: {}\n'.format( parametro['qnt_semanas']) msg += 'O navegar está no modo: {}\n'.format( 'Não Renderizado' if parametro['qnt_semanas'] == '1' else 'Renderizado') return msg @bot.message_handler(commands=['parametros'], func=consulta_parametros) def echo_all(message): bot.reply_to(message, consulta_parametros(message)) def comandos(message): msg = 'Você pode utilizar os seguintes comandos para configurar suas buscas: \n\n' msg += '/menorvalor - Esse comando retorna o valor mais baixo da passagem que foi encontrado nas buscas\n\n' msg += '/altera "valor" - Esse comando altera o valor da passagem que você deseja ser notificado. \n Ex.: Utilizando /altera 200. Quando encontrarmos alguma passagem abaixo de R$ 200,00, iremos notificá-lo por mensagem\n\n' msg += '/log - Esse comando retorna o log do sistema com as informações da última vez que o sistema rodou, e a quantidade de erros gerados até o momento.\n\n' msg += '/parametros - Esse comando retorna os paramentros que estão sendo utilizandos nas consultas atuais\n\n' return msg @bot.message_handler(commands=['help'], func=comandos) def echo_all(message): bot.reply_to(message, comandos(message)) bot.polling() except Exception as exception: sql = Script() sql.insere_log(exception)
class Consulta(object): def __init__(self, driver): self.driver = driver self.campo_origem = '//div[@class="purchase-box-header-division division-input division-input-origin"]/div/a/div' self.campo_destino = '//div[@class="input-destiny division-input-destiny-city active"]/div/a/span' self.botao_compra = 'btn-box-buy' self.lista_voos = '//div[@class="sliderDates sliderGoing"]/ul/li' self.botao_proxima_semana = "ControlGroupSelect2View_AvailabilityInputSelect2View_LinkButtonNextWeek1" self.botao_modal_aviso_data = '//div[@class="carouselDateChangePopup"]/p[@class="btnFecharPopup btCls btClsNew3"]/a[contains(text(), "Fechar")]' self.sql = Script() self.parametros = Parametros() self.parametro = self.parametros.retorna_parametros() def informo_origem(self): try: self.driver.find_element_by_xpath(self.campo_origem).click() except Exception as exception: img = self.driver.get_screenshot_as_base64() self.sql.insere_log(exception, img) def informo_destino(self): try: self.driver.find_element_by_xpath(self.campo_destino).click() except Exception as exception: img = self.driver.get_screenshot_as_base64() self.sql.insere_log(exception, img) def pesquisa_voo(self, destino): try: actions = ActionChains(self.driver) actions.send_keys(destino) actions.key_down(Keys.ENTER) actions.key_up(Keys.ENTER) actions.perform() except Exception as exception: img = self.driver.get_screenshot_as_base64() self.sql.insere_log(exception, img) def pesquisar(self): try: self.driver.find_element_by_id(self.botao_compra).click() except Exception as exception: img = self.driver.get_screenshot_as_base64() self.sql.insere_log(exception, img) def pega_dados_voo(self): try: datas = [] pesquisar = 0 qnt_semana = self.parametro['qnt_semanas'] while pesquisar < int(qnt_semana): voos = self.driver.find_elements_by_xpath(self.lista_voos) for voo in voos: datas.append(voo.text) try: self.driver.find_element_by_id( self.botao_proxima_semana).click() except Exception as exception: try: self.driver.find_element_by_xpath( self.botao_modal_aviso_data).click() self.driver.find_element_by_id( self.botao_proxima_semana).click() except Exception as exception: img = self.driver.get_screenshot_as_base64() self.sql.insere_log(exception, img) pesquisar += 1 return datas except Exception as exception: img = self.driver.get_screenshot_as_base64() self.sql.insere_log(exception, img)