Monitor ofert dla otomoto.pl [Usługa + architektura]

Wiele osób stwierdziło, że to w jaki sposób kupiłem swój samochód jest bardzo interesujący, dlatego postanowiłem stworzyć rozwiązanie dla każdego! Dzięki mojej usłudze możesz przez 7 dni 4 razy dziennie dostawać na maila nowe oferty z otomoto.pl, które pojawiły się w międzyczasie.

Ograniczenie jakie teraz zastosowałem polega na limicie stron, które generuje twoje zapytanie. Więc wybierz wszystkie filtry na otomoto.pl i sprawdź ile stron ofert masz. Jeśli poniżej 10, to skopiuj adres i wklej na gotowej stronie z rozwiązaniem. Jedna uwaga: maile nie wyświetlają się poprawnie w programie Outlook.

Znajdziesz ją tutaj.

Otodom.pl i gratka.pl są w przygotowaniu.

Tutaj zaczyna się część techniczna.

Skrypt, który stworzyłem na własne potrzeby działał w oparciu do RPI + Telegram. Nie jest to idealny zestaw, gdy stworzyć rozwiązanie dla wszystkich. Zdecydowałem się na zamianę Telegrama na maila, a RPI na Azure. Chmura ułatwi sprawę, ponieważ nie będę musiał otwierać RPI na świat, ani martwić się do stały dostęp do internetu dla RPI. Minusem jest zdecydowanie fakt, że płacę za to z własnej kieszeni – stąd wszystkie ograniczenia.

Całe rozwiązanie opiera się o 3 usługi na Azure:

  1. Blob storage – funkcjonuje jako baza danych. Wiem, że nie jest to idealne rozwiązanie, ale jest tanie i mam gotowe kawałki Pythona do obsługi.
  2. Logic App – trzy aplikacje, które zarządzają procesem rejestracji, a także wyzwalają pobieranie ofert
  3. Function – usługa, która pozwala na uruchomienie Pythona bez żadnego serwera (serverless). Tym sposobem nie muszę stawiać dodatkowej maszyny.

Korzystając z tych serwisów stworzyłem cztery oddzielne (ale współpracujące) procesy:

  1. Rejestracja adresu mailowego
  2. Potwierdzenie adresu mailowego
  3. Cykliczne wysyłanie ofert otomoto.pl
  4. Usunięcie subskrypcji

Poniżej znajdują się szczegóły każdego z procesów, a także kawałki kodu.

1. Rejestracja adresu mailowego

Diag1PL

Widok logic app:

image

Proces rejestracji działa w bardzo prosty sposób. Użytkownik rejestruje się za pomocą formularza, który generuje zapytanie GET trafiające do logic app. Zapytanie GET przekazuje email użytkownika i jego URL z otomoto. URL jest sprawdzany przez funkcję GetPages (kod poniżej), która sprawdza ile stron ma zapytanie. Jeśli ma więcej niż 10 stron, użytkownik dostaje stosowną odpowiedź. Jeśli ma mniej niż 10 stron to są tworzone pliki w blob storage, zostaje nadany id dla maila, wysłany email z linkiem do potwierdzenia i pokazana odpowiedź potwierdzająca. Blob storage zawiera politykę, która usunie pliki (zapytanie i email) po 2 dniach. Jeśli użytkownik spróbuje kliknąć z link po 2 dniach, proces rejestracji nie powiedzie się.

Klasa OtomotoScrapper, która zawiera wszystkie potrzebne metody:

Funkcja GetPages:

 

2. Potwierdzenie adresu mailowego:

Diag2PL

Widok logic app:

image

Gdy użytkownik kliknie w link w emailu, następuje sprawdzenie czy link z maila zawiera id takie samo jak to w blob storage. To zapobiegnie (mam nadzieję) potwierdzeniu dowolnego maila bez dostępu do skrzynki. Kiedy to zostanie potwierdzone, zostaje wyliczany hash maila (za pomocą funkcji Hash), żebym miał tylko jedno miejsce, z którego muszę usunąć pliki w przypadku usunięcia subskrypcji. Dodatkowo zostaną usunięte pliki używane do rejestracji. Następnie zostaje wysłany email z potwierdzeniem i linkiem do usunięcia subskrypcji, zostaje też wysłana odpowiedź z potwierdzeniem. Na koniec są pobierane oferty na moment rejestracji (funkcja ScrapHttp).

Funkcja Hash:

Funkcja ScrapHttp:

 

3. Cykliczne wysyłanie ofert otomoto.pl

Diag3PL

Widok logic app:

image

Kilka razy dziennie aplikacja zostaje wyzwolona automatycznie. Dla każdego hasha emaila z odpowiedniego “katalogu” (w blob storage katalog to tylko część nazwy) są pobierane nowe oferty. Jeśli nie ma nowych ofert nic się nie dzieje. W przeciwnym wypadku dla hasha emaila jest odnajdowany email (ta informacja znajduje się w blob storage), a następnie jest wysyłany email.

4. Usunięcie subskrypcji

Diag4PL

Widok logic app:

image

Proces usunięcia emaila zaczyna się od sprawdzenia czy email w ogóle istnieje. Jeśli nie zostaje wyświetlona stosowna informacja. Jeśli email istnieje, sprawdzane jest czy id z zapytania pokrywa się z id emaila. To zapobiegnie (mam nadzieję) sytuacji, w ktoś usunie nieswojego maila. Kiedy to zostaje potwierdzone, liczony jest hash maila, zostają usunięte pliki, które mapują hash i email. Pobrane oferty zostają skopiowane do archiwum i zostaje wysłana odpowiedź z potwierdzeniem.

I to tyle! Mój budżet to 5 USD miesięcznie, więc korzystajcie! Cały czas czuwam nad rejestrowanymi mailami, bo wiem, że da się obejść moje limity. Jeśli ktoś będzie przesadzał, będę banował! Jeśli potrzebujecie częstszych powiadomień, dajcie znać!

Startuję z newsletterem. Jeśli chcesz dostawać podobne zestawienia i moje analizy na maila – zapraszam.

Dodaj komentarz

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