Slik kan du «scrobble» fra NRKs nett-TV

Slik kan du «scrobble» fra NRKs nett-TV

Dersom du er glad i å loggføre hva slags filmer og TV-serier du ser på, er trolig trakt.tv en nettjeneste for deg. Kanskje ønsker du bare historikken, eller kanskje du trenger litt hjelp til å huske hvilken episode som var den neste du skulle se. Selv om det går helt fint å manuelt «sjekke inn» når du titter på noe, er jeg enda mer fan av at ting går automatisk. Endel mediesentre har innebygget støtte for å automatisk «scrobble» det du ser på, men når det kommer til strømmetjenester glimrer denne funksjonen med sitt fravær.

Siden jeg ikke jobber med utvikling hos NRK kan jeg ikke legge inn funksjonen direkte, men det finnes heldigvis andre måter å få lagt til ønsket funksjonalitet. Vi har tidligere omtalt Chrome-utvidelser som en praktisk måte å hente informasjon på en side på. Selv NRKbeta har forklart at slike nettleserutvidelser kan være veldig nyttig når det er en funksjon som er nyttig for enkelte, men ikke nødvendigvis alle.

Første steg før man i det hele tatt begynner å skrive noen kodelinjer er å ta en titt på nettsiden og kildekoden til NRKs videospiller. Er det i det hele tatt mulig å finne informasjonen jeg trenger for å identifisere riktig medieinnhold? Heldigvis har NRK, i alle fall til en viss grad, metadata tilgjengelig.

Ta for eksempel en titt på denne URLen: https://tv.nrk.no/serie/game-of-thrones/KOIF24000115/sesong-5/episode-1. Som dere ser er det enkelt å identifisere hvilken TV-serie det er snakk om, samt hvilken episode av hvilken sesong det dreier seg om. Det meste av denne informasjonen er også å finne som meta-tagger i kildekoden:

<meta name="type" content="episode" />
<meta name="episodenumber" content="10" />
<meta name="seasonid" content="75362" />
<meta name="seriesid" content="game-of-thrones" />
<meta name="seriestitle" content="Game of Thrones" />

Når det gjelder episodenavn glimrer dette veldig ofte med sitt fravær hos NRK. Og om det står der er det sjelden eksplisitt eller lett tilgjengelig. Det samme gjelder originaltitler i de tilfellene hvor vi har en egen norsk tittel. Ta for eksempel: https://tv.nrk.no/program/koif45006108/star-wars-iv-stjernekrigen

At den originale undertittelen er «A New Hope» er kun noe som står i parentes i beskrivelsen, og jeg skulle gjerne sett at det var litt mer tilgjengelig. Merk forøvrig også at filmer har «program» i URLen, mens TV-serier inneholder «serie». Dette er naturligvis også viktig informasjon for å bygge en utvidelse som sender av gårde denne informasjonen til trakt.tv.

Siden vi nå har fastslått at det er mulig å få tak i nødvendig informasjon, begynner programmeringsjobben. Etter litt søking på nettet fant jeg et tilsvarende prosjekt for Netflix på GitHub. Jeg spurte pent om tillatelse til å «forke» prosjektet (selv om lisensen tilsa at det var OK), slik at jeg hadde et fint utgangspunkt. Med denne kildekoden slapp jeg å tenke på autentisering (OAuth) og pålogging til trakt i nettlesertilegget. Dermed fikk jeg mye gratis. I teorien skulle det bare være å peke mot nettavspilleren og endre noen ID-er her og der så skulle alt være på plass.

Likevel gjenstår det en veldig vesentlig ting, nemlig å identifisere selve spilleren. Det å besøke en URL medfører ikke nødvendigvis at du har sett innholdet på siden. Det viser seg kjapt at nettspilleren til NRK og Netflix er svært ulike. Mens Netflix har en HTML-basert avspiller, bruker NRK en flash-variant (selv om en ny versjon er under utvikling). Dette skaper utfordringer på flere måter. For det første er det ikke mulig å lytte til museklikk på et flashelement da disse ikke bobler opp. For det andre er det heller ikke mulig å se om det er play eller pause som står i spilleren, ei heller hvor langt ut i programmet man har sett.
Jeg kom over et API for flash-spilleren på NRKs nett-TV. Den var gull verdt!

Jeg kom over et API for flash-spilleren på NRKs nett-TV. Den var gull verdt! 

Dette skapte naturligvis hodebry, men ved å rote litt rundt i kildekoden fikk jeg en idé. Flash-spilleren hadde et JavaScript-API. Her kunne jeg hente ut informasjon som hvor langt ut videoen hadde spilt, samt den totale lengden på hele videoen. Dermed kunne jeg enkelt kalkulere hvor langt ut i episoden eller filmen brukeren hadde sett. Dette er informasjon som er nødvendig for å kommunisere med trakt-APIet.

Den største utfordringen var kanskje at APIet ikke hadde noen måte å avsløre om videospilleren var stoppet eller var under avspilling. Det er jo essensielt å kunne «scrobble» når brukeren faktisk titter på videoen. Løsningen ble å jevnlig sjekke posisjonen og avspillingen: Dersom posisjonen er den samme som ved forrige sjekk er ingenting under avspilling.

Da var i grunn jobben gjort, og jeg har fått funksjonen jeg savnet på NRKs nett-TV. Dersom du vil teste dette kan du laste ned utvidelsen på Chrome nettmarked. Finner du feil kan du gjerne rapportere dem. Og ikke minst, hvis du vil ta en titt på kildekoden, hjelpe til, eller kanskje lage noen ny ikoner kan du gjøre det på github.

Erik-André Mamen

Erik-André Mamen

Konsulent // Application Lifecycle Management
erik.andre.mamen@acando.no

 

Om bloggeren:
Erik-André jobber primært som frontendutvikler og er opptatt av at nettjenester skal være intuitive og enkle å bruke. Han lar seg også begeistre av ting som kan automatiseres og når ulike tjenester kan snakke sammen.

comments powered by Disqus