NRK som filsystem

Oppdatering: Koden er kopiert over til eget prosjekt på GitHub, benytt informasjon på GitHub for å komme i gang. Denne postingen er utdatert.

Så var det laget; tilgang på NRK sin nett-TV som om tilgangen til innholdet skulle ligge lokal. I mitt forsøk på å gjøre om NRK Nett-TV til et virtuelt filsystem har jeg valgt å bedrive “screen scraping” av nettsidene, og ender opp med én spilleliste for hvert program som er lagt ut.

Jeg har valgt å benytte Python, sammen med modulene Fuse-Python og BeautifulSoup, så dette kan man sette opp på sin egen maskin som kjører Linux eller MacOS.

Filene er lagt ut i kildekodekontrollen på GitHub, og er delt opp i to filer:

  • nrk.py – Bibliotek for å aksessere NRK Nett-TV
  • nrkfs.py – Koden som oppretter og fórer det virtuelle filsystemet

For å montere filsystemet kjører man enkelt og greit:

./nrkfs.py nrk

Filen må være kjørbar, og “nrk” vil i dette tilfellet bli mappen som skal være monteringspunktet, denne mappen må allerede være opprettet. Gevinsten er ikke vanskelig å forestille seg:

NrkFS

Det er bevisst ikke opprettet noen debian-pakke eller egg-pakke av dette lille prosjektet enda, det får komme etter litt mer testing om det skulle være noen interesse for det.

Oppdatering: Debian-pakke er tilgjengelig for nedlasting fra GitHub sammen med instruksjoner for installasjon.

Håper noen har ønske om å teste dette ut og kan komme med tilbakemeldinger, er svært interessert i det som ikke måtte fungere.

# # #

43 kommentarer til “NRK som filsystem”

  1. Erlend skriver:

    Informasjonen her er utdatert, følg heller instruksjonene som er å finne på Github.

    Instrukser for å installere under Ubuntu (forutsetter superbrukertilgang gjennom sudo):

    [Åpne en terminal i hjemmemappen]
    sudo aptitude install -y fuse-utils libfuse2 python-fuse python-beautifulsoup subversion
    svn co http://svn.averlend.com/public/nrkfs/trunk nrkfs
    chmod u+x nrkfs/nrkfs.py
    mkdir nrk
    ./nrkfs/nrkfs.py nrk

    For å montere opp etter restart kjøres kun den siste linjen. Lykke til! :D

    • Espen Klem skriver:

      Dette er jo helt fantastisk Erlend! Fikk feilmelding på “sudo dpkg -i nrkfs_0_3.deb”, men det ordna seg med “sudo aptitude install nrkfs”.

      • Erlend skriver:

        Jepp, det kommer en feilmelding, men siden det gjør jobben med å forberede til at pakken og avhengigheter deretter kan installeres så blir det slik. Skulle gjerne sett at det var et annet alternativ, men det får jeg se nærmere på siden. :)

  2. Asbjørn Ulsberg skriver:

    Genialt, Erlend! :) Men kunne du ikke opprettet et prosjekt på github for nrkfs slik at andre kan være med på å utvikle prosjektet videre? Jeg kunne f.eks. tenke meg at man ikke bare fikk tilgang til .asx-filene, men direkte tilgang til de underliggende MMS-strømmene som man så kan mate inn i f.eks. VLC eller libmms for å lagre lokalt.

  3. Erlend skriver:

    @Asbjørn: Gjerne det, skal se til at det blir opprettet. :)

  4. Artig konsept! Testa det, og får opp filsystemet, men vlc gir meg feilmeldinger av typen:

    Unable to open ‘/home/atle/nrk/Mat/Smaken av Danmark/NRK – Norsk Rikskringkasting’
    Unable to open ‘/home/atle/nrk/Mat/Smaken av Danmark/’
    Unable to open ‘/home/atle/nrk/Mat/Smaken av Danmark/09-07-29 Smaken av Danmark – Dansk matserie. Den danske kokken Claus Meyer tar oss med på en kulinarisk rundreise i matlandet Danmark.’
    Unable to open ”
    Unable to open ‘/home/atle/nrk/Mat/Smaken av Danmark/’
    Unable to open ‘/home/atle/nrk/Mat/Smaken av Danmark/’

    noen tips?

  5. Så var det det med å mase før man har testet… Kaffeine ser ut til å takle saken mye bedre! Dette er jo en helt genial løsning for en mediesenter pc! Takker for at du deler denne !

  6. Carl-Erik skriver:

    Ooohh, finfin. Må prøve ut. Du er ferdig med studiene, er du ikke? For du står fremdeles oppført som stud.ass i IT2103.

    ps. http://www.ntnutimeplan.no/ fungerer ikke.

  7. Thomas skriver:

    Prøv å gå til nrk/Dokumentar/Brennpunkt/Brennpunkt 2009/ da får du feilmeldinger, og scriptet klarer ikke å plukke ut URLer korrekt.

  8. Terje skriver:

    Jeg har flere brukere på maskinen og ønsket derfor dette tilgjengelig for alle.
    Derfor prøvde jeg dette:
    - Installerte DEB pakken
    - Opprettet en mappe /nrk som har full tilgang til alle (chmod 777 /nrk)
    - Åpnet et terminalvindu og laget en fil med følgende kode:
    #! /bin/sh
    nrkfs.py /nrk

    Deretter gjorde jeg den kjørbar:
    sudo chmod 755 /etc/init.d/nrk

    Så la jeg den inn slik at den startes hver gang maskinen starter:
    sudo update-rc.d nrk defaults
    Dette fungerer i og for seg helt greit bortsett fra en ting: Det er kun brukeren som kjører monteringen som får tilgang uavhengig av hvordan jeg setter rettighetene.
    Er det mulig å fikse dette på noen måte?

    • Erlend skriver:

      Jeg har prøvd å finne ut av dette tidlige, og da fant jeg at om jeg legger på alternativet “allow_other” vil dette fungere. Mitt forslag til hvordan montere, som testet hos meg:

      nrkfs.py -oallow_other /nrk/

      Håper dette fungerer også for deg, si ifra om det ikke gjør det.

    • Erlend skriver:

      En helt annen måte å montere NrkFS er ved å legge til denne linjen i fstab:

      /usr/bin/nrkfs.py /nrk fuse allow_other,auto 0 0

      :)

  9. Otto skriver:

    Jeg har montert opp nrkfs på en Ubuntu server, og det virker fint, men er det mulig å dele det videre til andre PC-er i huset via Samba? Jeg har prøvd men får “not accessible” og “The handle is invalid” når jeg prøver å mappe den opp fra Windows, og “Bad file descriptor” fra Ubuntu Netbook.

    • Erlend skriver:

      Jeg vil tro dette problemet er relatert til problemer jeg har med å kunne gjøre filsystemet tilgjengelig for en Apache HTTP-server. Om man monterer NrkFS i en mappe under /var/www blir denne mappen usynlig og utilgjengelig, om man benytter sshfs på samme plass går det fint. Siden jeg ikke finner noen forskjell mellom filene (med siste oppdatering i dag) når jeg kjører “stat” er jeg usikker på hva det er som skiller disse fra hverandre.

      • Erlend skriver:

        Dette er ordnet i versjon 0.3, var irriterende at dette ikke fungerte når alt kom til alt… =D

  10. Audun Sæther skriver:

    Helt nydelig! Jeg har bare installert pakken, montert og åpnet noen få filer, men alle har så langt fungert uten problemer. Tilgang til NRK-arkiv via filsystemet er jo rett og slett konge for meg som ser ganske mye på NRK’s innhold på nett, men (som flere) alltid må krangle med NRK’s nettsider.

    • Erlend skriver:

      Det gleder med at du liker programvaren, det er godt å se at stadig flere finner nytte i programmet jeg laget for å få tilgang til Dagsrevyen uten å krangle med nettleseren. Så snart jeg begynner å få overskudd av tid vil også direkte-strømmene komme på plass i programvaren slik at den kan i enda større grad erstatte nrk.no.

  11. Dette er veldig kult! Dessverre hakker strømmen veldig for meg, og det tar lang tid å buffre. Men det er vel linja mi sin skyld.

    Det som hadde vært enda mye kulere hadde vært om du kunne laget en Totem-plugin for dette, så vi kunne fått NRK inn der på samme måte som vi i dag får BBC: http://people.canonical.com/~cjwatson/totem-bbc-2.png

    • Erlend skriver:

      I dag er båndbredden som kommuniseres til NRK sine servere noe høy, noe det er ønskelig å kunne justere fra neste utgave. Jeg opplever også at det tidvis er hakking i streaming, til tross for veldig bred båndbredde, noe jeg tror skyldes last hos NRK eller hos nett-leverandør.

      Plugin til Totem er en god idé, og jeg ser at man kan bruke Python til også dette. En del av programmet er skrevet for å kunne gjenbrukes, og dette kan brukes til dette formålet. Jeg har dessverre ikke tid til å titte på dette enda, men jeg tar det med meg som en issue på Github. :)

  12. Espen Klem skriver:

    Strømmen hakker ikke i det hele tatt for meg. Jeg har en liten HP-tynnklient med Ubuntu Netbook Remix som akkurat klarer å spille av en rippet DVD, men ikke HD-innhold. Båndbredden er bra, så kanskje derfor.

    Kanskje et Personal Packet Archive (PPA) på Launchpad hadde vært tingen etterhvert? Så kan folk få oppdaterte utgaver etterhvert som feilfikser og utvikling går sin gang.

  13. Rune skriver:

    runesole@rubuntu:~$ ./nrkfs/nrkfs.py nrk
    Traceback (most recent call last):
    File “./nrkfs/nrkfs.py”, line 18, in
    root = nrk.getRoot()
    File “/home/runesole/nrkfs/nrk.py”, line 78, in getRoot
    root.addChildren(getThemes())
    File “/home/runesole/nrkfs/nrk.py”, line 101, in getThemes
    ul = request(“http://www1.nrk.no/nett-tv/”).findAll(id=”ctl00_ucTop_themes”)[0]
    IndexError: list index out of range
    runesole@rubuntu:~$

    Ka no?

  14. Dette var jo så lett og greit sist jeg prøvde. Men nå får jeg bare feilmelding:

    The folder contents could not be displayed.
    You do not have the permissions necessary to view the contents of “nrk2″.

    Vet du hva som skjer?

    • Erlend skriver:

      Jeg kan tenke meg at monteringen er gjort med en annen bruker enn den som aksesserer mappen. Jeg har skrevet noe om dette under installasjon om hvordan man kan montere for flere brukere på en gang. Dersom det da fortsatt ikke fungerer trenger jeg noe mer informasjon om hvordan problemet oppstår. :)

  15. Dag Erik Henriksen skriver:

    Jeg får dette:
    [root@util nrkfs]# ./nrkfs.py
    Traceback (most recent call last):
    File “./nrkfs.py”, line 29, in ?
    import nrk
    File “/root/nrkfs/nrk.py”, line 32
    class Node():
    ^
    SyntaxError: invalid syntax

    Hvilken versjon av python burde dette kjøre under ? Jeg har python-2.4.3

    Eller er det andre ting jeg mangler ?

    • Dag Erik Henriksen skriver:

      endret class Node(): til class Node: så gikk det bedre.

      Fikk likevel ikke opp filene, da måtte jeg endre i getProject(url) metodekallet siden nrk tydeligvis bruker en annen id i div-taggen sin enn det nrkfs forventer.

      Endret til ctl00_contentPlaceHolder_UcProjectInfo_menu og da fungerte alt meget bedre, genialt :)

  16. Simon skriver:

    Hei!

    Jeg kjørte “sudo aptitude install -y fuse-utils libfuse2 python-fuse python-” i terminalen på ubuntu netbook edition 10.10, og plutselig så forsvant hele startmenyen min, med mer. Tips til hvordan jeg skal få det tilbake? Er relativt fersk på Linux-fronten.

    På forhånd takk ;)

    • Erlend skriver:

      Jeg kan ikke se at det er noe i den kommandoen som skal medføre endringer i desktop-oppsettet. Det er veldig interessant om det er flere som erfarer dette.

  17. Kjell skriver:

    Hei,

    Kanskje ikke riktig å spørre, men vil det være store oppgaven å “porte” dette slik at det også fungerer under windows (evnt. under alle OSer som kjører Python)?

    Har ytterst lite erfaring med python, men vil det være mulig å gjøre det ikke-os-spesifikt?

    Tross alt en fantastisk idé!

    • Erlend skriver:

      En av forutsetningene for programmet slik det er i dag er bruk av Fuse for å montere dette virtuelle filsystemet. Fuse finnes, såvidt jeg vet, ikke for Windows (om man søker på “fuse windows” finner man mange som ønsker dette).

      Derimot er ikke alt håp ute. Programmet jeg har laget består av to deler; en fil som inneholder logikk for NRK, og en fil som “lager” filsystemet. Siden den første delen ikke er avhengig av den andre delen har jeg ingen problemer med å se for meg at man kan bruke logikk-delen til å lage alternative klienter, eksempelvis et lite program som kan installeres på Windows for å bla i nett-TV.

      Om man ikke ønsker å lage noe nytt, men har tilgang på en boks med Linux, men ønsker å bruke Windows til å se TV, kan man sette opp Linux til å dele NRK-området som en delt harddisk som da blir tilgjengelig direkte fra Windows.

      • Kjell skriver:

        Jeg skrev et Python-skript noen dager før jeg ble oppmerksom på dette prosjektet som direkte opprettet en mappestruktur tilsvarende nett-tv’ens løsning; Kategori -> Program -> Klipp evnt. Mappe (-> Klipp).. Dette ble imidlertid noe tungvint (tross alt hundrevis av mapper/filer som skal opprettes).

        Målet var imidlertid å hele tiden ha dette synkronisert, slik at slettede/nye programmer var fjernet/tilgjengelig. Er dette noe som løses i NrkFS? Har imidlertid litt for liten erfaring med Python til å få til dette. Skal se om det evnt. er noe som kan gjenbrukes i din versjon :)

        • Erlend skriver:

          Du er ikke den første som ønsker å ha en egen kopi av NRK sitt tilbud i stedet for å ha det virtuelt. Jeg har derfor tatt meg noen minutter for å skrive et lite program som laster ned tilbudet til en (eventuelt spesifisert som første parameter) mappe. Ta en titt på nrkdownload.py. (Deb-pakken 0.4.0-beta2 har også med denne filen.)

        • Kjell skriver:

          Ser ut til å fungere i teorien, men en del encodingproblemer oppstår desverre. Har prøvd å endre encoding i selve filene, endre hvordan koden encoder, men har ikke funnet noen løsning.

        • Erlend skriver:

          Jeg vet om noen problemer i forhold til tegn og tegnsett, men problemet er nok mer markant på Windows enn på Linux. Planen er å få på plass mest mulig rundt dette til versjon 0.4.0, så om du titter innom etterhvert vil flere brikker falle på plass etterhvert… :)

          For å teste begynte jeg å kjøre hos meg, og er nå oppe i 42174 mapper og filer, men så dukket det opp en ny feil som også må håndteres.

  18. Kjell skriver:

    Flotte greier! Skal se om jeg får tid til å se nærmere på problemet under Windows, om det er noe spesifikt i forhold til tegnsett som må ordnes der. Ser det er noen flere referanser til hvor tegnsett settes/endres (synes dette er et særskilt problematisk felt under Python, men kanskje det ikke er det bare man kan det) :)

    Følger med! Ikke bare bare å få dette 100% fool-proof..

  19. Torleif skriver:

    Hei
    Jeg prøver å få dette til.
    Jeg bruker Chakra (Arch lignende distro) Jeg kan jo ikke bruke .deb til å installere, men bruker ./nrkfs.py nrk til å montere filsystemet.
    Alt fungerer fint frem til /underholdning
    Når jeg da klikker på nytt på nytt får jeg bare melding om at folderen ikke eksisterer.

    Er det noe jeg gjør galt?

    Takk for et genialt program!!

    • Erlend skriver:

      Hei

      Jeg vet at det per i dag er en liten feil i koden som ligger i master som gjør at dersom man har hatt filsystemet montert en liten stund vil det slutte å fungere helt som tiltenkt (oppdatering av mellomlagring som ikke er helt korrekt).

      Her hos meg fungerer mappen “Underholdning” helt fint. Har du prøvd å montere filsystemet på nytt?

      Det er kjekt at du liker det og gir tilbakemelding, det er slik det blir bedre over tid. :D

  20. Torleif skriver:

    får fortsatt feilmelding om at folderen ikke eksisterer
    Bare for å sjekke at jeg gjør det riktig.

    lastet ned : klakegg-nrkfs-573b37e.zip og pakker ut filene.
    Jeg “cd er” inn i folderen og kjører “./nrkfs.py /home/minbruker/nrk
    Filsystemet monteres.
    Men hva med de andre filene i folderen? Skal jeg kjøre “nrk.py” filen også?

    Igjen
    Takk!!!

    • Erlend skriver:

      Det ser ut til at du gjør det helt riktig.

      Filen nrk.py eksisterer som ledd i å dele kildekoden med tanke på gjenbruk, det er kun nrkfs.py som er interessant når man skal montere NRK sin nett-TV som filsystem. :)

  21. Bernt skriver:

    Hei. Jeg har problemer med å få programmet til å kjøre på fedora (fc16). Jeg har prøvd å kjøre python-filene direkte og konvertering av deb-filen til rpm. I begge tilfeller får jeg feilmelding

    ls: cannot access /media/nrk: Invalid argument

    når jeg skriver ls -l på mappen over ser nrk-mappen ut som spørsmålstegn i steden for å vise rettighetene:

    drwxr-xr-x. 5 root root 100 Dec 26 14:56 .
    drwxr-xr-x. 21 root root 4.0K Dec 26 17:33 ..
    d?????????? ? ? ? ? ? nrk

    Har du noen tips for hvordan jeg kan bruke dette uten å bytte til Ubuntu?

Legg igjen en kommentar