28. feb. 2022 - Hobbyprosjekt

Robotmail

Python, Domeneshop, Finn og automatikk: alle bestanddeler i den søvnløse mailroboten Buzz Robotson.

Et skjermbilde av e-post

Den daglige mailen fra Buzz Robotson.

Der andre kanskje sjekker Instagram, synes jeg det er spennende å lese Domeneshops daglige oppdaterte liste over nylig utløpte domener. Hver dag publiserer domeneselgeren Domeneshop en ganske lang liste med .no domener som akkurat har utløpt og blitt tilgjengelig salg. Denne listen kan være morsom å lese i seg selv, hvert domenenavn forteller en liten historie. Opportunisme og entreprenørskap som omsider falt i grus.

Lister med ledige domenenavn

Noen av domenavnene bærer preg av entreprenørskap som omsider falt i grus.

Et godt domenenavn føles nesten som en ny tom skrivebok: flere sider med muligheter! Jeg synes det er spennende å se hva som er ledig, men det er ikke alltid jeg får sjekket ut dagens oppdaterte liste. Jeg tenkte derfor at det hadde vært kult med et program som kunne "scrape" Domeneshop sin nettside, for å så sende meg en daglig e-post med ledige domener. Dette førte til mailroboten Buzz Robotson.

Skjermbilde av kode

Rens og sammensetting av data fra nettsiden til Domeneshop.

Jeg brukte Python og en pakke som heter requests til å samle informasjonen fra en nettside. Jeg fant dagens domener og filtrerte ut de som var over fire bokstaver lange. Disse satt jeg så sammen til en liste. Pythonpakken yagmail gjorde det enkelt å sende e-post fra Python med en Gmail-bruker. Jeg opprettet brukeren buzzrobotson@gmail.com og koblet den sammen med programmet. Yagmail lar meg også sende e-posten til flere brukere hvis det er ønskelig. Jeg kjøpte en lisens på pythonanywhere for å kunne kjøre programmet daglig fra "skyen".

Skjermbilde av at programmet kjører

Mailroboten Buzz Robotson er i gang.

Planen videre er å koble flere automatiserte oppgaver på e-posten, og daglig få en oppdatering rett i innboksen. Dette kan være funksjoner som:

Jeg tenker jeg også skal prøve å sette opp programmet på en Raspberry Pi datamaskin som kan kjøre kontinuerlig: Da slipper jeg både å betale for pythonanywhere-lisensen, og jeg kan bruke den til å automatisere andre oppgaver!


Oppdatering 17. mars 2022

To store endringer har skjedd siden sist:

  1. Jeg har flyttet Buzz over fra pythonanywhere til Microsoft Azure.
  2. Buzz kan nå finne antall ledige boliger til salgs i Oslo på Finn.no og vise utviklingen på en graf.

Pythonanywhere viste seg å by på problemer etter hvert, så jeg flyttet det over til Azure. Jeg lagde en personlig bruker og opprettet en trigger function med en schedule på hver dag kl 09:00 (eller kl 08:00 UTC). Dette var første gangen jeg satt opp noe i Azure. Det var litt knot, men det gikk til slutt!

Skjermbilde av Azure

Jeg skjønner lite av det her, men det fungerer!

Siden flere av vennene mine var på boligjakt fremskyndte jeg også Finn.no-bolig-prosjektet. Her satt jeg opp en webscraper likt som mot Domeneshop der jeg hver dag henter tallet på antall ledige boliger til salgs i Oslo og lagrer det som en csv-fil. Denne filen tar jeg så og leser med pythonmodulen pandas for å så generere et plot med matplotlib som jeg så lagrer som en png-fil. Dette bildet viser en graf over antall boliger til salgs i Oslo, og over tid vil denne bli lengre etter hvert som dataen tikker inn.

Skjermbilde av Finn.no

To enkle filtre er aktivert: "Oslo" og "Til salgs"

Den største utfordringen her var å finne ut av hvordan jeg kan lagre csv-filen hver gang Buzz kjører i Azure. Jeg prøvde først å lagre til samme mappe som resten av scriptet, men dette ble bare opprettet og slettet for hver gang Buzz ble kjørt. Jeg prøve så å lagre det i /tmp/ med lave forventninger, siden /tmp/ tross alt heter /tmp/. Til min store glede og utvikler-kollegaers overraskelse ble denne mappen ikke slettet, og Buzz sender meg nå en utvidet graf hver dag! Selv om det ikke virker som grafen hjelper vennene mine i boligjakten mye, var det alt i alt et veldig lærerikt og gøy prosjekt.

Skjermbilde av Finn.no

Grafen gikk rett ned dagene etterpå.