Sveriges Radio från terminalen
Uppdatering 5 februari 2011. Instruktioner för att ladda ned klipp och program, samt spela in till fil från den direktsända webbradion, finns i det här inlägget. Eftersom Sveriges Radio gjort en del förändringar av sin sajt sedan det här inlägget skrevs, så behöver även skriptet uppdateras. Jag återkommer i frågan.

Det är på tiden att jag delar med mig av mitt fantastiska lilla skalskript för Sveriges Radios webbradio.
SR har två olika typer av webbradio, vid sidan av sina poddradio-arkiv. Dels en liveström, och dels arkiverade klipp.
För att köra skripten behöver du rtmpdump eller flvstreamer, och så förstås en mediaspelare. Jag använder MPlayer.
För att lyssna på live-radion behöver du två filer – själva skriptet och en fil med direktadresser till strömmarna. Filen med adresser ska heta radio.dat och ligga i samma mapp som scriptet. Den ser ut så här:
rtmp://rtmp-live.sr.se/webbradio/kanaler/p1-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p2-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p2musik-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p3-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p4skaraborg-aac-192
rtmp://rtmp-live.sr.se/webbradio/kanaler/p4orebro-aac-192
Som du ser så finns det flera möjliga adresser till P4, eftersom de har lokala sändningar.
Skriptet ser i sin tur ut så här:
#!/bin/sh
PLAYER=mplayer
STREAMER=flvstreamer
if [ X$1 == X-bg ]; then
$STREAMER -live -r $(grep $2 $HOME/bin/data/radio.dat) | $PLAYER -- - 2>&1 > /dev/null
echo $! > ~/.radio.pid
else
rm ~/.radio-fifo
mkfifo ~/.radio-fifo
$STREAMER -quiet -o ~/.radio-fifo -live -r $(grep $1 radio.dat)&
$PLAYER ~/.radio-fifo
fi
exit 0
Döp skriptfilen till radio och se till att den är körbar. Nu kan du köra en radiokanal så här:
$ radio p3
Om du istället skulle välja att köra kanalen p4 så skulle den första adressen som innehåller p4 att köras, så för att köra P4 Örebro, som är den andra P4-kanalen i adressfilen, är jag tvungen att göra så här:
$ radio p4orebro
Vidare så går det att spela radio »i bakgrunden«, frikopplat från terminalen. Det är oerhört smidigt om man har datorn påslagen nattetid och vill bli väckt av den. Du kan ställa väckarklockan på 09.30 så här:
$ echo "radio -bg p2" | at 09:30
Men för att smidigt kunna stänga av uppspelningen behöver du ett skript till! Det heter radiotystnad och är litet och simpelt:
#!/bin/sh
kill $(cat ~/.radio.pid)
Det var allt om live-radio. Att spela upp radioklipp är en helt annan historia. Dessutom är den mera intressant.
Uppdatering 9 dec 2010: OBS! Det följande fungerar inte längre, i och med en ändring som SR gjort på sin sajt. Finurligt nog har de genomfört en förenkling, vilket gör dem ovanliga och fantastiska i världen. :-)
En snabbfix finns i min kommentar nummer 2 nedan, och en mera ingående uppdatering kommer i ett eget blogginlägg så småningom.
Det här skriptet är finurligt, tycker jag åtminstone själv. Döp filen till vad du känner för; själv kallar jag det för webbradio.
#!/bin/sh
PLAYER=mplayer
RECPARAMETERS="-dumpstream -dumpfile radiodump.wma"
PLAYLISTPARAMETER="-playlist"
STREAMER=flvstreamer
record=""
if [ X$1 == X'-record' ]; then
record=$RECPARAMETERS
fi
for id; do
if [ X$id != X"-record" ]; then
id=$(echo $id|sed -E 's/.*[Ii][Dd]=([0-9]+).*/\1/')
$PLAYER $record $PLAYLISTPARAMETER "http://www.sr.se/webbradio/include/CreatePlaylist.asp?Type=db&Id=$id&broadcastDate=&AudioFormat=3&AvailableAudioFormats=1;3&IsBlock=0"
if [ X"$record" != X ]; then
stamp=$(date +"%Y%m%d-%H%M")
mv -i radiodump.wma SR_id-$id-$stamp.flv
fi
fi
done
Observera att där var en mycket lång rad mitt i alltsamman, som blivit radbruten här i bloggen.
Gör skriptet körbart. Sedan kan du helt enkelt kopiera adressen till webbradioklippet, genom att högerklicka på den här knappen och välja Kopiera länk:

Den kan också se ut så här:

När du kopierat länken, så kör du den genom skriptet.
$ webbradio "LÄNK"
Citattecknen är oerhört viktiga. Skulle du få för dig att vilja spara klippet till hårddisken, så kör du istället skriptet så här:
$ webbradio -record "LÄNK"
Filen kommer att sparas med ett filnamn enligt följande format:
SR_[id-nummer]-[datum]-[klockslag].flv
Om du skulle använda en annan mediaspelare än MPlayer, så kan du antagligen ersätta de följande två raderna…
RECPARAMETERS="-dumpstream -dumpfile radiodump.wma"
PLAYLISTPARAMETER="-playlist"
…med de här:
RECPARAMETERS=""
PLAYLISTPARAMETER=""
Några frågor?
6 kommentarer till inlägget
Magnus Berg skrev den 9 december 2010 kl. 12.02:
Hej!
Jag tänkte spela in alla avsnitten av uppläsningen av 'Mannen utan egenskaper' från http://sverigesradio.se/sida/artikel.aspx?programid=1111≤
-----
magnus@debian:~/Dokument/Media/Mannen_utan_egenskaper$ /home/magnus/Dokument/Linux/Program/Spela_in_SR -record "http://sverigesradio.se/api/radio/radio.aspx?type=db∨
[: 11: X-record: unexpected operator
Resolving www.sr.se for AF_INET6...
Couldn't resolve name for AF_INET6: www.sr.se
Resolving www.sr.se for AF_INET...
Connecting to server www.sr.se[134.25.4.140]: 80...
Resolving sverigesradio.se for AF_INET6...
Couldn't resolve name for AF_INET6: sverigesradio.se
Resolving sverigesradio.se for AF_INET...
Connecting to server sverigesradio.se[134.25.4.140]: 80...
Cache size set to 320 KBytes
Error while parsing playlist
Warning: empty playlist
Error parsing option on the command line: -playlist
MPlayer 1.0rc3-4.4.4 (C) 2000-2009 MPlayer Team
-----
Jesper skrev den 9 december 2010 kl. 13.13:
Hej Magnus!
Jag har goda nyheter. SR har fantastiskt nog gått i rätt riktning sedan jag skrev det här inlägget, och gjort det lättare att komma åt webbradio-strömmarna för oss som inte har Flash (eller vill spela in).
Dina adresser verkar ha blivit förstörda i och med postningen här. Det är en bugg i kommentarfiltreringen som inte blivit fixad ännu, så det är inte du som tokat till det. (Man måste skriva
&istället för&.) Jag tror du syftar på den här serien, inte sant? I så fall har vi att göra med den här webbradio-länken:http://sverigesradio.se/api/radio/radio.aspx?type=db&id=2736754&codingformat=.m4a&metafile=asx
Numera är det faktiskt så enkelt att du kan göra så här:
$ mplayer -dumpstream -dumpfile inspelat.m4a -playlist "http://sverigesradio.se/api/radio/radio.aspx?type=db&id=2736754&codingformat=.m4a&metafile=asx"
För skriptets del innebär den förändringen att någon rader ska bort, liksom att ett par andra behöver ändras, innan det fungerar som det ska igen. Jag kommer att posta om detta relativt snart.
Ha det gott!
Magnus Berg skrev den 9 december 2010 kl. 13.50:
Jag hittade en bättre lösning på mitt problem.
Klicka på ljudlänken och välj spara som. Då sparas en radio.aspx-fil. Öppna den i lämplig texteditor och letar reda på raden: <ref href="http://sverigesradio.se/topsy/ljudfil/xxxxxx.m4a">. Klistra in ljudfilens adress i browsern och ladda ner.
Nu har jag alla 20 avsnitt av "Mannen utan egenskaper".
Nu har jag hela Mannen utan egewnskaper oi
Magnus Berg skrev den 9 december 2010 kl. 13.53:
Jag såg inte dina post innan jag skrev det ovan. Tack i alla fall. Det kan komma väl till pass vid andra tillfällen när inte ljudfilerna är lika lättåtkommliga som i mitt fall.
Jesper skrev den 9 december 2010 kl. 14.05:
Ah. :-)
Det där var faktiskt ett rätt vettigt tips. Kände inte alls till att filerna var tillgängliga över HTTP; har ju inte hunnit titta särskilt noga på hur de där förändringarna hos SR ser ut ännu.
Din metod är att föredra, eftersom filen borde komma ner mycket snabbare då, än om man dumpar den genom MPlayer. Ett snabbkommando för att göra samma sak torde se ut så här:
$ curl -LO $(curl -s $URL|grep 'ref href'|sed 's/.*href="\(.*\)".*/\1/')
Där
$URLgivetvis är adressen man får om man högerklickar på ljudlänken och väljer att kopiera adressen, istället för att ladda hem filen så som du gjorde.Magnus Berg skrev den 9 december 2010 kl. 14.55:
Jag trodde också att SR:s filer var uppdelade i småbitar och omöjliga att ladda ner med vanligt filnedladdningsprogram. Nu går det fint att köra flera nedladdningar samtidig och på så vis spara tid, eftersom flödet är väldigt långsamt.
Lämna en kommentar