samyun / southwest-price-drop-bot

Las versiones desplegadas antes del 30/6/2019 (< 3.4.0) podrían querer hacer un despliegue limpio – estamos cambiando de Redis a MongoDB, y no se traduce, limpiamente. Esto es capaz de ejecutarse localmente durante el desarrollo de forma algo consistente.

Southwest Price Drop Bot

Esta herramienta te permite monitorizar el precio de los vuelos de Southwest que has reservado. Te notificará si el precio cae por debajo de lo que pagaste originalmente. Entonces puedes volver a reservar el mismo vuelo y obtener un crédito de Southwest por la diferencia de precio. Esta herramienta también te permite controlar el precio de todos los vuelos de Southwest en un día determinado. Te notificará si cualquier vuelo de ese día cae por debajo del anterior vuelo más barato.

Nota que necesitas tener una cuenta de Plivo para enviar las notificaciones por mensaje de texto y una cuenta de Mailgun para enviar las notificaciones por correo electrónico. Puedes ejecutar esta herramienta sin estas cuentas, pero no recibirás las notificaciones.

Puedes iniciar sesión con cualquiera de las dos:

La segunda opción es buena cuando se da acceso a amigos y familiares, ya que sólo mostrará las alertas para el nombre de usuario dado. Tenga en cuenta que la contraseña es la misma para todas las cuentas, y el administrador puede ver todas las alertas.

Al crear alertas, tenga en cuenta que el correo electrónico y los números de teléfono son opcionales. Si ambos se dejan en blanco, el usuario tendrá que iniciar sesión manualmente para ver las bajadas de precios.

Despliegue

  1. Haga clic en este botón:
  2. Rellena las variables de configuración y haz clic en Deploy

  3. Abre el Heroku Scheduler desde el dashboard de tu app
  4. Añade una tarea horaria que ejecute npm run task:check
  5. Cuando las actualizaciones estén disponibles, tendrás que desplegarlas tú mismo usando la CLI de Heroku. Esta app sigue a SemVer en su versionado, así que asegúrate de leer las notas de la versión cuando despliegues un cambio de versión importante.

    Nota: Las versiones desplegadas antes del 4/9/2018 usando Mailgun necesitarán verificar las constantes: MAILGUN_DOMAIN y MAILGUN_EMAIL.

    Nota: Las versiones desplegadas antes del 21/07/2018 (< 3.2.0) en Heroku tendrán que verificar la constante PROXY si quieren utilizar un proxy para realizar las llamadas.

    Capturas de pantalla

    Protección de bots de Southwest

    Ahora mismo, Southwest está bloqueando con éxito las peticiones de este proyecto.

    Southwest tiene algunas protecciones contra bots muy elegantes.

  • Las IPs de Heroku, y otros proveedores de hosting, están bloqueadas para acceder a su sitio. Los despliegues locales deberían tener permiso para acceder a su sitio, y algunos otros proveedores de nube pueden funcionar también. La solución más fiable es el uso de un servicio de proxy residencial.
  • También hay un Javascript complicado y ofuscado que detecta los navegadores sin cabeza y se actualiza con mucha frecuencia. Hay una comunidad de gente que implementa evasiones de detección de headless chrome, pero es un juego del gato y el ratón.
    • https//github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/
  • Usa CHROME_DEBUG=true DEBUG="puppeteer:*" combinado con node inspect para depurar problemas extraños de chrome.
    • La interceptación de solicitudes registrará todos los intentos de carga de URL y aceptará todas las solicitudes.
    • slowmo está activado y headless está desactivado
    • se abrirá antes de una URL del suroeste
  • Información sobre el proxy

    Las instrucciones para desplegar un proxy están fuera del alcance de este proyecto. Sin embargo, aquí hay algo de información sobre proxies que puede ser útil:

    • Un proxy alojado (barato) que funciona es https://luminati.io. Cuesta menos de 1$ cada mes y parece fiable. La mayoría de los proxies públicos no parecen funcionar, me imagino que hay algún tipo de lista de bloqueo de proxies públicos que está en su lugar.
    • Podrías usar algo como Squid y girar en forma nativa, en un contenedor, o en una VM. Obviamente querrás hacer esto fuera de Heroku
    • Si usas Squid, querrás configurar el reenvío de puertos o ejecutar en un puerto aleatorio alto, y bloquear squid.conf con algo como esto para evitar que alguien use tu configuración como un proxy abierto:
acl swa dstdomain .southwest.comhttp_access allow swahttp_access deny all

Desarrollo

Para ejecutar el conjunto de pruebas:

yarn test

Para ejecutar una consola cargada con los objetos Alert y Flight:

yarn console

Cuando se depuran problemas de chrome/puppeteer es útil utilizar el siguiente comando:

DEBUG="puppeteer:*" CHROME_DEBUG=true node tasks/check.js

Esto enviará una útil salida de depuración de chromium a tu consola, y habilitará algunos registros adicionales para ayudar a depurar lo que pueda estar fallando.

Historia de versiones

– 2019-08-11

  • Actualización de dependencias, incluyendo yarn.lock
  • Actualización a Node v12

– 2019-06-30

  • Mover de Redis a MongoDB
  • Actualizar la lógica de scraping
  • Mejorar el soporte de proxy
  • Añadir algunas medidas de detección anti-bot
  • ¡Gracias a @iloveitaly por estos cambios!

– 2018-12-25

  • Añadir soporte para vuelos de premio (puntos)
  • Actualización de dependencias a las últimas versiones
  • – 2018-7-23

    • Mejorar PR de @GC-.Guy para arreglar el soporte de proxy en las comprobaciones

    – 2018-7-21

    • Merge PR de @GC-Guy para añadir soporte para un proxy

    – 2018-7-14

    • Actualización del paquete.json
    • Fusionar PR de @evliu para orientar los elementos de la lista de precios de forma más dinámica

    – 2018-6-14

    • Los datos de los vuelos se cargan después de la carga de la página – se ha añadido la espera de .flight-stops selector
    • Cambiar la URL al formato actual
    • Corregir la prueba para manejar el caso de no encontrar precios
    • Añadir pruebas para las entradas malas esperadas

    – 2018-5-24

    • Añadir prueba de unidad para Alertas
    • Añadir registro adicional y manejo de errores
    • Intentar reducir el uso de memoria llamando manualmente a about:blank antes de cerrar la página
    • Añadir protocolo al enlace de correo electrónico

    – 2018-5-4

    • Arreglar el fallo con el bloqueo cuando el correo electrónico o el número de teléfono no están configurados pero el servicio respectivo está habilitado
    • Añadir semáforo para limitar el número de páginas abiertas a la vez – con la esperanza de arreglar el «Error: Page crashed». Limitado a 5 páginas. Por defecto a 5 páginas a la vez – establecer ENV.MAX_PAGES para cambiar.

    – 2018-4-29

    • Añadir comprobaciones de errores no válidos
    • Añadir barras de notificación de parámetros no válidos
      • – 2018-4-28

        • Evitar múltiples instancias del navegador durante la tarea:check – reducir el uso de memoria
        • Añadir nodejs buildpack para el despliegue de Heroku
          • – 2018-4-28

            • Refactorizar para soportar el rediseño actualizado del sitio Southwest, sustituir osmosis por puppeteer

            – 2018-4-14

            • Añadir soporte para comprobar el vuelo más barato en un día

            – 2018-4-9

            • Integrar los cambios upstream de PetroccoCo (manejo de correo electrónico) y pmschartz (rediseño)

            – 2017-12-2

            • Soportar Mailgun y Plivo (email y sms)

            – 2017-11-30

            • Soporta Mailgun
            • Trabajo anterior

            Atribución

            Este es un fork del fork de minamhere del fork de maverick915 del proyecto original de scott113341.

            Los cambios en el downstream fueron integrados desde:

            • PetroccoCo – Manejo de correo electrónico
            • pmschartz – Rediseño
            • Gracias a los siguientes por sus contribuciones:

              • @evliu – orientar los artículos de la lista de precios de forma más dinámica
              • @GC-Guy – soporte de proxy
              • @iloveitaly – MongoDB, soporte actualizado de scraping/proxy, detección anti-bot
              • @ribordy – arreglo de lodash

              .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *