def iniciar(self, update, context): id_telegram = update.message.from_user.id print(f"[TELEGRAM] Usuario {id_telegram} lanza /iniciar. ") gestorBBDD = GestorBBDD() if(gestorBBDD.existeUsuario(id_telegram) and len(gestorBBDD.recuperarBusquedasUsuario(id_telegram)) > 0): if(self.diccionario_scrapers.get(id_telegram) == None): usuario = gestorBBDD.recuperarUsuario(id_telegram) busquedas_usuario = gestorBBDD.recuperarBusquedasUsuario(id_telegram) for busqueda in busquedas_usuario: # Si está activada la autocomparación, borro artículos anteriores # y relleno con los nuevos desde scraperwallapop, de forma que # solo se van comparando los artículos nuevos subidos. if(busqueda.comparar_automaticamente == True): print(f"[TELEGRAM] Borro artículos previos de la búsqueda {busqueda.keywords} del usuario {id_telegram} porque tiene autocomparación. ") gestorBBDD.borrarArticulosBusqueda(busqueda.id_busqueda) notificador = Notificador(self.TOKEN) tarea = TareaPeriodica(10, ScraperWallapop, usuario, notificador, ejecucion_en_background=False) update.message.reply_text("Iniciando scrapeo. ") self.diccionario_scrapers[id_telegram] = tarea tarea.start() else: update.message.reply_text("Ya se está scrapeando, utiliza /detener para detener el scrapeo.") else: update.message.reply_text("Debes tener una cuenta y al menos una búsqueda para iniciar el scrapeo. ")
def borrar_busqueda(self, update, context): gestorBBDD = GestorBBDD() id_telegram = update.message.from_user.id opciones = [] if(gestorBBDD.existeUsuario(id_telegram)): print(f"[TELEGRAM] Usuario {id_telegram} quiere borrar búsquedas. ") try: busquedas = gestorBBDD.recuperarBusquedasUsuario(id_telegram) if(len(busquedas) > 0): texto = "¿Qué busqueda quieres borrar?" contador = 1 for busqueda in busquedas: texto+=f"\n[{contador}] - {busqueda.keywords} [{busqueda.precio_min},{busqueda.precio_max}]" opciones.append([f"Borrar {contador}"]) contador+=1 texto+=f"\n Utiliza /cancelar_borrar_busqueda para cancelar el borrado. " keyboard = ReplyKeyboardMarkup(opciones, one_time_keyboard=True) update.message.reply_text(texto, reply_markup=keyboard) return self.STATUS1 else: update.message.reply_text("No tienes ninguna búsqueda guardada.") except: update.message.reply_text("No tienes ninguna búsqueda guardada.") else: update.message.reply_text("No estás registrado. Escribe /registrarse. ") return ConversationHandler.END
def __init__(self, usuario, notificador, recursos="altos", ejecucion_en_background=False): # Cargo el notificador self.notificador = notificador # Recupero usuario y veo si tiene cuenta self.usuario = usuario self.tiene_cuenta = (self.usuario.email != None) and (self.usuario.password != None) # Recupero búsquedas de la BBDD gestorBBDD = GestorBBDD() self.lista_busquedas = gestorBBDD.recuperarBusquedasUsuario( self.usuario.id_telegram) # Ajustes de configuración del webdriver self.recursos = recursos self.ejecucion_en_bakcground = ejecucion_en_background # Ignoro errores de certificado self.options = webdriver.ChromeOptions() self.options.add_argument('--ignore-certificate-errors') self.options.add_argument('--ignore-ssl-errors') self.options.add_argument("--start-maximized") self.options.add_argument("log-level=3") self.options.add_argument("--silent") # Configuro ventana para su ejecución en segundo plano if (ejecucion_en_background): self.options.add_argument('--disable-gpu') self.options.add_argument('--headless') self.options.add_argument("--window-size=1920x1080") # Si el host es un ordenador con bajos recursos, abrirá ventanas de una en una cerrándolas # en lugar de varias de golpe if (self.recursos == "bajos"): self.driver = webdriver.Chrome(ChromeDriverManager().install(), options=self.options) else: caps = DesiredCapabilities().CHROME caps["pageLoadStrategy"] = "eager" self.driver = webdriver.Chrome(ChromeDriverManager().install(), desired_capabilities=caps, options=self.options) # Lanzo el bot self.iniciarBot()
def borrar_busqueda_uno(self, update, context): # Extraigo el nº de búsqueda a borrar numero_busqueda_a_borrar = int(update.message.text.split(" ")[-1]) id_telegram = update.message.from_user.id gestor = GestorBBDD() try: busqueda = gestor.recuperarBusquedasUsuario(id_telegram)[numero_busqueda_a_borrar-1] id_busqueda = busqueda.id_busqueda if(gestor.existeBusqueda(id_busqueda)): gestor.borrarBusqueda(id_busqueda) print(f"[TELEGRAM] Búsqueda {id_busqueda} del usuario {id_telegram} borrada. ") update.message.reply_text(f"¡Busqueda '{busqueda.keywords}' borrada!") return ConversationHandler.END else: update.message.reply_text(f"Error, búsqueda no encontrada en la base de datos. ") return ConversationHandler.END except: update.message.reply_text(f"Error, búsqueda no encontrada en la base de datos. ") return ConversationHandler.END
def confirmar_borrar_cuenta(self, update, context): parametro = update.message.text.lower() gestorBBDD = GestorBBDD() id_telegram = update.message.from_user.id if (parametro == "si"): # Primero borro búsquedas y articulos contenidos busquedas = gestorBBDD.recuperarBusquedasUsuario(id_telegram) for busqueda in busquedas: gestorBBDD.borrarBusqueda(busqueda.id_busqueda) # Después, borro al usuario gestorBBDD.borrarUsuario(id_telegram) self.limpiar_datos(context) update.message.reply_text(f"Cuenta borrada.") print( f"[TELEGRAM] Usuario {id_telegram} borra su cuenta y búsquedas asociadas. " ) return ConversationHandler.END else: update.message.reply_text("Borrado de cuenta cancelado. ") return ConversationHandler.END