2019-07-08
Hur mycket kan man göra med ett "enkelt" CLI för att hämta information om filmer och serier från IMDb? Ganska mycket visar det sig. Det här är vad som har hänt med IMDb verktyget från version 1.0.1 till 2.3.0.
Jag har tidigare skrivit lite om det node-baserade CLI verktyg jag skapade för att enkelt komma åt filmers och tv-seriers "IMDb ID:n". Nu har jag använt verson 1.0.1 av verktyget sen i septemper 2017 och kände att det var dags att göra CLI:t mer flexibelt, då jag av och till kände att det var viss funktionalitet som saknades.
Till och från kändes CLI:t inte tillräckligt flexibelt när jag använde det och många gånger hade jag velat ha ett bättre sammanhang när sökresultat presenterades i en tabell i terminalen. I 1.0.0 visades enbart titlar, årtal och IMDB ID:n. Jag kände även att det vore smidigt att enbart söka på antingen filmer eller serier och kunna sortera sökresultatet utifrån årtal eller titlar.
Bilden här nedan sammanfattar den nya funktionalitet har tillkommit under resans gång från 1.0.1 till 2.3.0.
-v --version
- Skriver ut versionen av CLI:t.-p --plot
- Använder man denna flagga så används filmernas och seriernas handling i sökresultatet. Default så trunkeras handling till ett visst antal tecken.-l --limit-plot [number]
- Denna flagga låter användaren själv bestämma hur lång handlingen ska vara i sökresultatet innan det trunkeras.-t --title
- Denna flagga gör att man kan söka direkt när man anropar CLI:t. Tidigare så skrev man bara imdb
och tyckte ENTER för att sedan mata in en titel att söka efter.-m --movies
- Sök endast efter filmer.-s --series
- Sök endast efter serier-o --order-by [column]
- Med denna flagga kan man sortera antingen i bokstavsordning för titlar eller i fallande ordning efter årtal.-h --help
- Visar hjälptext om hur CLI:t kan användas.En hel del har hänt behind the scenes när det gäller 1.0.1 till 2.3.0 av IMDB CLI:t också - allt ifrån argument parsning till git hooks och testning.
Möjligheten att parsa argument, det vill säga använda imdb --movies --title "star wars"
för att direkt söka enbart efter Star Wars filmer, kommer ifrån det populära npm paketet commander.
Commander gör det väldigt enkelt att skriva node-baserade CLI verktyg. Se bara det förenklade exemplet nedan som visar hur -p --plot
flaggan används för att skapa upp en IMDb klass där sökresultat ska inkludera handlingar.
const program = require('commander');
program
.option('-p, --plot', 'Show plot in search result')
.parse(process.argv);
const instance = new IMDb({showPlot: !!program.plot})
I version 1.0.1 så användes npm paketet Cherrio för att skrapa själva IMDb webbplatsen efter sökresultat och IMDb ID:n. I version 2.0.0 ersattes denna skrapning med API:et från OMDb.
Om jag inte minns fel så var det API:et inte öppet när jag initalt skapade IMDb CLI:et - därav att jag byggde det som en scraper. Nu däremot är API:et öppet så länge man har en api nyckel och håller sig under 1.000 requests om dagen. Dessutom har man via OMDb API:et tillgång till IMDb ID:n, score!
IMDb CLI använder numera Jest för unit tester, vilket underlättar tryggheten i eventuell framtida refaktorering och hjälper till att säkerställa kvalitet av ny funktionalitet. Även om CLI:t inte har oerhört många rader kod är det alltid skönt att ha kodbasen (någorlunda) testad.
Hela CLI:et är sedan 2.3.0 omskrivet med TypeScript. Detta betyder att CLI:et numera har en byggprocess där källkoden finns i en src/
mapp med TypeScript filer som sedan byggs till en dist/
mapp.
I och med att jest tester redan fanns innan omskrivningen till TypeScript genomfördes så blev refaktoreringen i och med befintliga tester en något mer trygg process.
Runt 60 fel hittades i koden initialt i övergången till TypeScript. De flesta felen berodde på att variabler, funktionsparametrar och så vidare inte var typade - men ett och annan potentiellt problem kunde rättas till och och med övergångne till TypeScript.
Nu när koden är skriven med TypeScript och även testas med Jest så kommer framtida refaktorering och funktionstillväxt bli enklare då regression bättre kan undvikas och problem i koden kan upptäckas snabbare.
Två stycken git hooks används för att försöka förhindra problem, förebygga buggar och se till att koden har korrekt formatering innan den committas. För att hantera git hooks så används npm paketet Husky.
*.ts
kod.Vad finns då kvar att göra, tro? I skrivande stund vet jag inte riktigt faktiskt. Kanske har jag en lista med nya features att gå igenom när jag använt IMDb CLI:t i två år till och släpper version 3.0.0 eller dylikt...