samyun / southwest-price-drop-bot

Gebruikte versies vóór 6/30/2019 (< 3.4.0) willen misschien een schone implementatie doen – we stappen over van Redis naar MongoDB, en het vertaalt niet, schoon. Dit is in staat om lokaal tijdens ontwikkeling enigszins consistent te draaien.

Southwest Price Drop Bot

Met deze tool kunt u de prijs van Southwest vluchten die u heeft geboekt in de gaten houden. Het zal je verwittigen als de prijs daalt onder wat je oorspronkelijk betaalde. Dan kunt u dezelfde vlucht opnieuw boeken en Southwest krediet krijgen voor het prijsverschil. Met deze tool kunt u ook de prijs van alle Southwest vluchten op een bepaalde dag in de gaten houden. Het zal U verwittigen indien een vlucht op die dag onder de vorige goedkoopste vlucht daalt.

Merk op dat U een Plivo account moet hebben om de sms notificaties te versturen en een Mailgun account om de email notificaties te versturen. U kunt deze tool draaien zonder deze accounts, maar u zult de meldingen niet krijgen.

U kunt inloggen met een van beide:

De tweede optie is leuk wanneer u toegang geeft aan vrienden en familie, omdat het alleen waarschuwingen voor de gegeven gebruikersnaam zal weergeven. Merk op dat het wachtwoord hetzelfde is voor alle accounts, en de beheerder kan alle waarschuwingen zien.

Bij het aanmaken van waarschuwingen, merk op dat de e-mail en telefoonnummers optioneel zijn. Als deze beide leeg zijn gelaten, zal de gebruiker handmatig moeten inloggen om prijsdalingen te bekijken.

Implementatie

  1. Klik op deze knop:
  2. Vul de config variabelen in en klik op Deploy
  3. Open de Heroku Scheduler vanuit het dashboard van uw app
  4. Voeg een uurlijkse taak toe die npm run task:check

Wanneer er updates beschikbaar komen, zult u ze zelf moeten implementeren met de Heroku CLI. Deze app volgt SemVer in zijn versiebeheer, dus zorg ervoor dat u de release-opmerkingen leest wanneer u een grote versiewijziging implementeert.

Note: Implementeerde versies vóór 4/9/2018 met behulp van Mailgun zullen constanten moeten verifiëren: MAILGUN_DOMAIN en MAILGUN_EMAIL.

Note: Deployed versies voorafgaand aan 7/21/2018 (< 3..2.0) op Heroku moet u de PROXY constante verifiëren als u een proxy wilt gebruiken om de aanroepen te doen.

Screenshots

Southwest Bot Protection

Op dit moment, blokkeert Southwest met succes verzoeken van dit project.

Southwest heeft een aantal zeer fraaie bot-beveiligingen in werking.

  • Heroku IP’s, en andere hosting providers, worden geblokkeerd voor toegang tot hun site. Lokale implementaties zouden toegang tot hun site moeten krijgen, en sommige andere cloud providers kunnen ook werken. De meest betrouwbare workaround is het gebruik van een residentiële proxy service.
  • Er is ook wat lastige en versluierde Javascript die headless browsers detecteert en zeer regelmatig wordt geupdate. Er is een gemeenschap van mensen die headless chrome detectie omzeilingen implementeren, maar het is een kat en muis spel.
    • https//github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/
  • Gebruik CHROME_DEBUG=true DEBUG="puppeteer:*" in combinatie met node inspect om vreemde chrome problemen te debuggen.

    • Verzoek onderschepping zal alle URL laadpogingen loggen en alle verzoeken accepteren.
    • slowmo is ingeschakeld en headless is uitgeschakeld
    • zal worden geopend voor een Zuidwest URL

Proxy informatie

Instructies over het inzetten van een proxy valt buiten het bereik van dit project. Hier is echter wat informatie over proxy’s die nuttig kan zijn:

  • Een gehoste (goedkope) proxy die werkt is https://luminati.io. Het kost minder dan $1 per maand en lijkt betrouwbaar. De meeste publieke proxy’s lijken niet te werken, ik stel me voor dat er een soort blokkadelijst voor publieke proxy’s bestaat.
  • Je zou iets als Squid kunnen gebruiken en het zelf kunnen draaien, in een container, of in een VM. Uiteraard wil je dit buiten Heroku doen
  • Als je Squid gebruikt, wil je port forwarding instellen of op een hoge random poort draaien, en squid.conf vergrendelen met iets als dit om te voorkomen dat iemand je setup als een open proxy gebruikt:
acl swa dstdomain .southwest.comhttp_access allow swahttp_access deny all

Ontwikkeling

Om de testsuite uit te voeren:

yarn test

Om een console te draaien die geladen is met Alert en Flight objecten:

yarn console

Bij het debuggen van chrome/puppeteer problemen is het handig om het volgende commando te gebruiken:

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

Dit stuurt nuttige chromium debug-uitvoer naar je console, en schakelt wat additionallogging in om te helpen debuggen wat er mis zou kunnen gaan.

Versiegeschiedenis

– 2019-08-11

  • Update dependencies, waaronder yarn.lock
  • Update naar Node v12

– 2019-06-30

  • Verhuis van Redis naar MongoDB
  • Update scraping logica
  • Verbeter proxy ondersteuning
  • Voeg wat anti-bot detectie maatregelen toe
  • Dank aan @iloveitaly voor deze wijzigingen!

– 2018-12-25

  • Steun toevoegen voor award vluchten (punten)
  • Afhankelijkheden bijgewerkt naar laatste versies

– 2018-7-23

  • Samenvoegen PR van @GC-.Guy om proxy-ondersteuning in controles te repareren

– 2018-7-21

  • Merge PR van @GC-Guy om ondersteuning voor een proxy toe te voegen

– 2018-7-14

  • Update package.json
  • Merge PR van @evliu om de prijslijst items meer dynamisch te targeten

– 2018-6-14

  • Vluchtgegevens geladen nadat pagina is geladen – toegevoegd wacht op .flight-stops selector
  • Verander URL naar huidig formaat
  • Verstel test om het geval van geen gevonden prijzen te behandelen
  • Voeg tests toe voor verwachte slechte invoer

– 2018-5-24

  • Voeg unit test toe voor waarschuwingen
  • Voeg extra logging en foutafhandeling toe
  • Probeer geheugengebruik te verminderen door handmatig aanroepen van about:blanco voordat pagina wordt gesloten
  • Voeg protocol toe aan e-mailkoppeling

– 2018-5-4

  • Fix bug met crash wanneer e-mail of telefoonnummer niet is ingesteld maar respectievelijke service is ingeschakeld
  • Voeg semafoor toe om aantal pagina’s dat tegelijk open is te beperken – hopelijk verhelpt dit de “Error: Pagina gecrasht” fout. Beperkt tot 5 pagina’s. Staat standaard op 5 pagina’s tegelijk – stel ENV.MAX_PAGES in om te wijzigen.

– 2018-4-29

  • Voeg controles toe voor ongeldige fout
  • Voeg meldingsbalken toe voor ongeldige parameters

– 2018-4-28

  • Vermijd meerdere browserinstanties tijdens taak:check – geheugengebruik verminderen
  • Voeg nodejs buildpack toe voor Heroku deployment

– 2018-4-28

  • Refactor om bijgewerkte Southwest site redesign te ondersteunen, vervang osmosis door puppeteer

– 2018-4-14

  • Voeg ondersteuning toe voor het controleren op de goedkoopste vlucht op een dag

– 2018-4-9

  • Integreer upstream wijzigingen van PetroccoCo (e-mailafhandeling) en pmschartz (herontwerp)

– 2017-.12-2

  • Ondersteun Mailgun en Plivo (e-mail en sms)

– 2017-11-.30

  • Ondersteunt Mailgun
  • Voorafgaand werk

Naamsvermelding

Dit is een fork van minamhere’s fork van maverick915’s fork van scott113341’s oorspronkelijke project.

Downstream wijzigingen werden geïntegreerd van:

  • PetroccoCo – Email Handling
  • pmschartz – Redesign

Dank aan de volgende voor hun bijdragen:

  • @evliu – richt de prijslijst items meer dynamisch
  • @GC-Guy – proxy ondersteuning
  • @iloveitaly – MongoDB, bijgewerkte scraping/proxy ondersteuning, anti-bot detectie
  • @ribordy – lodash fix

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *