Beispiel #1
0
    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. ")
Beispiel #2
0
    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
Beispiel #3
0
    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()
Beispiel #4
0
 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
Beispiel #5
0
 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