samyun / southwest-price-drop-bot

Wersje wdrożone przed 6/30/2019 (< 3.4.0) mogą chcieć zrobić czyste wdrożenie – zmieniamy się z Redis na MongoDB, a to nie przekłada się, czysto. To jest w stanie działać lokalnie podczas rozwoju nieco konsekwentnie.

Southwest Price Drop Bot

To narzędzie pozwala monitorować ceny lotów Southwest, które zarezerwowałeś. Powiadomi Cię, jeśli cena spadnie poniżej tej, którą pierwotnie zapłaciłeś. Następnie można ponownie zarezerwować ten sam lot i uzyskać kredyt Southwest na różnicę w cenie. To narzędzie umożliwia również monitorowanie cen wszystkich lotów Southwest w danym dniu. To powiadomi Cię, jeśli jakikolwiek lot w tym dniu spada poniżej poprzedniego najtańszego lotu.

Uwaga, że musisz mieć konto Plivo, aby wysłać powiadomienia SMS i konto Mailgun, aby wysłać powiadomienia e-mail. Możesz uruchomić to narzędzie bez tych kont, ale nie otrzymasz powiadomień.

Możesz zalogować się za pomocą:

Druga opcja jest miła, gdy dajesz dostęp przyjaciołom i rodzinie, ponieważ wyświetli tylko powiadomienia dla danej nazwy użytkownika. Zauważ, że hasło jest takie samo dla wszystkich kont, a administrator może zobaczyć wszystkie alerty.

Podczas tworzenia alertów zauważ, że email i numer telefonu są opcjonalne. Jeśli oba są puste, użytkownik będzie musiał się ręcznie zalogować aby zobaczyć spadki cen.

Wdrożenie

  1. Kliknij ten przycisk:
  2. Wypełnij zmienne konfiguracyjne i kliknij Deploy
  3. Otwórz Heroku Scheduler z pulpitu nawigacyjnego twojej aplikacji
  4. Dodaj zadanie godzinowe, które uruchamia npm run task:check

Gdy aktualizacje staną się dostępne, będziesz musiał wdrożyć je samodzielnie za pomocą Heroku CLI. Ta aplikacja podąża za SemVer w swoim wersjonowaniu, więc upewnij się, że przeczytałeś notatki o wydaniu podczas wdrażania dużej zmiany wersji.

Uwaga: Wdrożone wersje przed 4/9/2018 przy użyciu Mailgun będą wymagały weryfikacji stałych: MAILGUN_DOMAIN i MAILGUN_EMAIL.

Uwaga: Wersje wdrożone przed 7/21/2018 (< 3.2.0) na Heroku będą musiały zweryfikować stałą PROXY, jeśli chcesz użyć proxy do wykonywania połączeń.

Zrzuty ekranu

Southwest Bot Protection

W tej chwili, Southwest skutecznie blokuje żądania z tego projektu.

Southwest ma kilka bardzo wymyślnych zabezpieczeń przed botami w miejscu.

  • Heroku IP, i inni dostawcy hostingu, są zablokowani z dostępu do ich strony. Lokalne wdrożenia powinny mieć dostęp do ich witryny, a niektórzy inni dostawcy usług w chmurze mogą również działać. Najbardziej niezawodnym obejściem jest skorzystanie z usługi proxy dla mieszkańców.
  • Jest też trochę podstępny i obfuskowany Javascript, który wykrywa bezgłowe przeglądarki i jest bardzo często aktualizowany. Istnieje społeczność ludzi, którzy implementują unikanie wykrywania bezgłowego chromu, ale jest to gra w kotka i myszkę.
    • https//github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth/
  • Użyj CHROME_DEBUG=true DEBUG="puppeteer:*" w połączeniu z node inspect do debugowania dziwnych problemów z chromem.
    • Przechwytywanie żądań będzie rejestrować wszystkie próby załadowania adresu URL i akceptować wszystkie żądania.
    • slowmo jest włączony i headless jest wyłączony
    • zostanie otwarty przed adresem URL Southwest

Informacje o proxy

Instrukcje dotyczące wdrażania proxy są poza zakresem tego projektu. Jednakże, oto kilka informacji o proxy, które mogą być przydatne:

  • Hostowane (tanie) proxy, które działa to https://luminati.io. Jest to mniej niż 1$ miesięcznie i wydaje się niezawodne. Większość publicznych serwerów proxy nie wydaje się działać, wyobrażam sobie, że istnieje jakaś lista blokowania publicznych serwerów proxy, która jest na miejscu.
  • Możesz użyć czegoś takiego jak Squid i uruchomić natywnie, w kontenerze lub w maszynie wirtualnej. Oczywiście będziesz chciał to zrobić poza Heroku
  • Jeśli używasz Squida, będziesz chciał skonfigurować przekierowanie portów lub uruchomić na losowym porcie i zablokować squid.conf czymś takim, aby uniemożliwić komuś użycie twojej konfiguracji jako otwartego proxy:
acl swa dstdomain .southwest.comhttp_access allow swahttp_access deny all

Development

Aby uruchomić zestaw testów:

yarn test

Aby uruchomić konsolę załadowaną obiektami Alert i Flight:

yarn console

Przy debugowaniu problemów z chrome/puppeteer pomocne jest użycie następującego polecenia:

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

To wyśle pomocne wyjście debugowania chromium do twojej konsoli, i włączy niektóre additionallogging, aby pomóc w debugowaniu tego, co może iść źle.

Historia wersji

– 2019-08-11

  • Uaktualnienie zależności, w tym yarn.lock
  • Update to Node v12

– 2019-06-30

  • Przeniesienie z Redis do MongoDB
  • Update scraping logic
  • Poprawa wsparcia dla proxy
  • Dodanie kilku środków wykrywania anty-botów
  • Dzięki @iloveitaly za te zmiany!

– 2018-12-25

  • Dodaj wsparcie dla lotów nagrodowych (punkty)
  • Uaktualnione zależności do najnowszych wersji

– 2018-7-23

  • Merge PR od @GC-.Guy to fix proxy support in checks

– 2018-7-21

  • Merge PR od @GC-Guy to add support for a proxy

– 2018-7-14

  • Update package.json
  • Merge PR from @evliu to target the price list items more dynamically

– 2018-6-14

  • Dane o lotach ładowane po załadowaniu strony – dodany wait for .flight-stops selector
  • Zmień URL na aktualny format
  • Popraw test do obsługi przypadku braku znalezionych cen
  • Dodaj testy dla oczekiwanych złych danych wejściowych

– 2018-5-24

  • Dodaj test jednostkowy dla Alerts
  • Dodaj dodatkowe logowanie i obsługę błędów
  • Próba zmniejszenia zużycia pamięci poprzez ręczne wywołanie about:blank przed zamknięciem strony
  • Dodaj protokół do linku e-mail

– 2018-5-4

  • Popraw błąd z awarią, gdy email lub numer telefonu nie jest ustawiony, ale odpowiednia usługa jest włączona
  • Dodaj semafor, aby ograniczyć liczbę stron otwartych jednocześnie – miejmy nadzieję, że naprawi to błąd „Error: Page crashed”. Ograniczenie do 5 stron. Domyślnie 5 stron na raz – ustaw ENV.MAX_PAGES, aby to zmienić.

– 2018-4-29

  • Dodanie kontroli dla nieprawidłowego błędu
  • Dodanie pasków powiadomień dla nieprawidłowych parametrów

– 2018-4-28

  • Unikanie wielu instancji przeglądarki podczas zadania:check – reduce memory usage
  • Add nodejs buildpack for Heroku deployment

– 2018-4-28

  • Refactor to support updated Southwest site redesign, replace osmosis with puppeteer

– 2018-4-14

  • Add support for checking for the cheapest flight on a day

– 2018-4-9

  • Integrate upstream changes from PetroccoCo (email handling) and pmschartz (redesign)

– 2017-…12-2

  • Wsparcie Mailgun i Plivo (email i sms)

– 2017-11-.30

  • Wspieraj Mailgun
  • Poprzednia praca

Uznanie autorstwa

To jest fork fork projektu minamhere’s fork of maverick915’s fork of scott113341’s original project.

Downstreamowe zmiany zostały zintegrowane z:

  • PetroccoCo – Email Handling
  • pmschartz – Redesign

Podziękowania dla następujących osób za ich wkład:

  • @evliu – targetowanie pozycji cennika bardziej dynamicznie
  • @GC-Guy – wsparcie dla proxy
  • @iloveitaly – MongoDB, zaktualizowane wsparcie dla scrapingu/proxy, wykrywanie anty-botów
  • @ribordy – poprawka lodash

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *