Hi,
Wer regelmässig Internet-Radios aufzeichnen möchte, hat sicher eine Vielzahl an Möglichkeiten.
Eine, weshalb ich meine Box auch gefreezt habe, ist die mittels Crontab-Jobs und Streamripper.
Allein die langen Zeilen haben mir nicht gefallen, ich wollte es lieber kurz, etwa so:
29 08 * * 1-5 ./recorder ndrKultur "Am Morgen vorgelesen" 32 Stick
04 09 * * 1-5 ./recorder mdrFigaro Lesezeit 33 Onlinespeicher
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD
Die letzte Zeile sähe im Orginal etwa so aus:
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD streamripper http://dradio_mp3_dlf_m.akacast.akam...adio_mp3_dlf_m --with-id3v1 --quiet -a RecorderTest_2014-03-19_21-52-27_DLF -s -A -o larger -k 1 -l 15 -d /var/media/ftp/usbHDD/Music/DLF/RecorderTest
Nicht wirklich praktikabel, zumal alles in einer Zeile stehen muss.
Also schnell ein Script geschrieben auf dass die Sache im Blick bleibt. ;)
Die Crontab-Zeile kurz erklärt:
mm HH DD MM W Befehl Sender Programm Dauer HDD-Label
04 10 * * 6 ./recorder DLF KPetc 57 (min) Name lt. Datei-Manager
Zu gut deutsch: Nimm jeden Samstag (6) um 10:04 für 57 min das Programm "KPetc" vom DLF auf.
Noch einmal in Code-Format:
Es ist also immer nur ein Leerzeichen "erlaubt", bzw., ansonsten halt in Anführungszeichen.
Wie ist der Script zu verwenden?
Ich unterstelle jetzt einmal, dass eine Freetz-Variante auf der Box mit Streamripper im Paket läuft. Dann sind die Grundlagen bereits gelegt. Wenn nicht, eine der Internet-Suchmaschinen wird da helfen können! :D
Den Code in eine Datei auf den USB-Stick / -HDD packen, ausführbar machen und einmal auf der Konsole (telnet / dropbear) ausführen. Dann wird im root-Verzeichnis ein Link erstellt, der es ermöglicht, die obige Kurzform zu verwenden. Nach einem reboot / Neustart der Box muss dieser Erststart wieder ausgeführt werden, oder man muss tiefer in die Materie des Freez-System einsteigen und es dort fest integrieren.
Das Script ist so angelegt, dass es, so hoffe ich, für jeden (der sich schon einmal mit ...) nachvollziehbar bleibt.
Ansonsten stehen viele Hinweise bereits im Script.
Dieser sollte ohne weitere Anpassung, ausser man mag meinen Test-Sender nicht, :( laufen.
Bei mir heißt der Script "recorder.sh" und liegt im Ordner "/scripts".
Eigentlich sind diese Namen nicht zwingend, wenn auch logisch ...
Die notwendigen Informationen über Sender-Namen, Stream, HDD-Label etc. holt sich das Script aus der
lokalen Freetz-Umgebung. Das bedeutet, die in der Crontab verwendeten Begriffe sollten mit den Werten auf dem
Config-Menü für den Streamripper übereinstimmen. Die Aufnahme landet dann als .mp3 /.ogg (je nach Stream) auf der im Streamripper-Menü angegeben Ordner, wobei gleich nach Sender und Programm sortiert wird.
Je nach Fritz!Box und sonstiger Konstellation wie Onlinespeicher sind derzeit drei Speicher-Orte möglich:
Wer mehr braucht, müsste im 6. Abschnitt den case-Teil anpassen und entsprechend dazu im 0. Abschnitt die Variable "Speicherorte" anpassen. Doch dann entfällt die Gewährleistung. :cool:
Beim Erststart des Scripts werden im 4. Abschnitt zwei symbolische Links angelegt.
Der erste ist für die Crontab, der zweite ist für den Verweis des Anrufsbeantworters (AVM-Zweig der Box) auf den 1. USB-Speicher (uStor01).
Wer den 2. Link nicht will oder braucht, kann den Bereich löschen oder mit #auskommentieren:
So nun viel Spass beim Aufnehmen.
Cu, rapat
Wer regelmässig Internet-Radios aufzeichnen möchte, hat sicher eine Vielzahl an Möglichkeiten.
Eine, weshalb ich meine Box auch gefreezt habe, ist die mittels Crontab-Jobs und Streamripper.
Allein die langen Zeilen haben mir nicht gefallen, ich wollte es lieber kurz, etwa so:
29 08 * * 1-5 ./recorder ndrKultur "Am Morgen vorgelesen" 32 Stick
04 09 * * 1-5 ./recorder mdrFigaro Lesezeit 33 Onlinespeicher
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD
Die letzte Zeile sähe im Orginal etwa so aus:
04 10 * * 6 ./recorder DLF KPetc 57 usbHDD streamripper http://dradio_mp3_dlf_m.akacast.akam...adio_mp3_dlf_m --with-id3v1 --quiet -a RecorderTest_2014-03-19_21-52-27_DLF -s -A -o larger -k 1 -l 15 -d /var/media/ftp/usbHDD/Music/DLF/RecorderTest
Nicht wirklich praktikabel, zumal alles in einer Zeile stehen muss.
Also schnell ein Script geschrieben auf dass die Sache im Blick bleibt. ;)
Die Crontab-Zeile kurz erklärt:
mm HH DD MM W Befehl Sender Programm Dauer HDD-Label
04 10 * * 6 ./recorder DLF KPetc 57 (min) Name lt. Datei-Manager
Zu gut deutsch: Nimm jeden Samstag (6) um 10:04 für 57 min das Programm "KPetc" vom DLF auf.
Noch einmal in Code-Format:
Code:
04 10 * * 6 ./recorder DLF KPetc 57 Sat-SD
Wie ist der Script zu verwenden?
Ich unterstelle jetzt einmal, dass eine Freetz-Variante auf der Box mit Streamripper im Paket läuft. Dann sind die Grundlagen bereits gelegt. Wenn nicht, eine der Internet-Suchmaschinen wird da helfen können! :D
Den Code in eine Datei auf den USB-Stick / -HDD packen, ausführbar machen und einmal auf der Konsole (telnet / dropbear) ausführen. Dann wird im root-Verzeichnis ein Link erstellt, der es ermöglicht, die obige Kurzform zu verwenden. Nach einem reboot / Neustart der Box muss dieser Erststart wieder ausgeführt werden, oder man muss tiefer in die Materie des Freez-System einsteigen und es dort fest integrieren.
Code:
#!/bin/sh
# Stream-Aufnahmen per crontab via Streamripper mit ausgewähltem Sender
# $1 = Sender
# $2 = Programm
# $3 = Dauer
# $4 = Speicher-Namen (Label)
# 0. Wer lieber einen anderen Test-Stream will, bitte anpassen
def_sender=DLF
def_stream=http://dradio_mp3_dlf_m.akacast.akamaistream.net/7/249/142684/v1/gnl.akacast.akamaistream.net/dradio_mp3_dlf_m
##### Speicherorte, don`t edit #####
Speicherorte="uStor01 usbHDD online"
# 1. Start oder Teststrecke für die Konsole
if [ -z "$1" ] ; then
echo & echo Das ist ein recorder-Test
sleep 5 & echo =============================
sender=$def_sender
programm=RecorderTest
dauer=15 # sind Sekunden
test=yes
else
## Input-Variable zuweisen
sender=$1
programm=$2
dauer=$4
speicher=$4
fi
echo memorys=$Speicherorte
echo \ Dauer=$dauer min
echo 1. Abschnitt: Start-Phase beendet.
# 2. Namen der default-Ordner ermitteln oder festlegen
echo Start-Ort=$0
ortsTeil=${0#??}
ortsTest=$(ls -l $0 | cut -d'>' -f2)
echo \ ortsTest=$ortsTest
if [ "${ortsTest:0:4}" = "-rwx" ] ; then ortsCheck=$0 ; else ortsCheck=${ortsTest#?} ; fi
echo OrtsCheck=$ortsCheck
muster=$(echo $ortsCheck | cut -d'/' -f7)
echo \ \ Muster=$muster
teil=$(echo ${ortsCheck//$muster})
scripts=${teil%?}
echo scriptsFO=$scripts
if [ "${0:0:1}" = "." ]; then
scripts=$(echo ${ortsCheck//$ortsTeil})
scripts=${scripts%/*}
if [ "$scripts" = "." ] ; then scripts=$(echo | pwd) ; fi
fi
echo scripts=\"$scripts\"
string=$(grep MUSICDIR /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2 | cut -d'/' -f6 | cut -d'\' -f1)
echo string=\"$string\"
teil=${string%?}
ordner=${teil#?}
if [ -z "$ordner" ] ; then ordner=Music ; else ordner=${string%?} ; fi
echo ordner=\"$ordner\"
echo 2. Abschnitt: Ordner-Suche beendet.
# 3. Speicher-Namen mit "mount" auslesen und den -Orten zuweisen
dev_Name=$(mount | grep "ftp/" | cut -d' ' -f3 | cut -d'/' -f5)
dev_Anz=$(mount | grep -c "ftp/" | cut -d' ' -f3 | cut -d'/' -f5)
echo $dev_Name > /var/tmp/recorder.tmp
read -t 1 $Speicherorte < /var/tmp/recorder.tmp
echo dev_Anz=\"$dev_Anz\"
echo uStor01=\"$uStor01\"
echo usbHDD=\"$usbHDD\"
echo online=\"$online\"
echo 3. Abschnitt: Speicher-Namen \(Label\) beendet.
# sleep 5 & exit
# 4. symLink für crontab und USB-Stick anlegen (./recorder ruft dann diesen script auf)
if [ ! -e "/var/mod/root/recorder" ] ; then
ln -s $scripts/recorder.sh /var/mod/root/recorder
echo "symLink erstellt"
if [ -p "/var/tam/mount" ] ; then
echo "/var/media/ftp/$uStor01" > /var/tam/mount
rm -f /var/media/NEW_LINK
ln -f -s /var/media/ftp/$uStor01 /var/media/NEW_LINK
fi
fi
echo 4. Abschnitt: SymLink beendet.
# 5. URL des Streams in Streamripper-Config-Datei suchen
srch=$(grep -i $sender /var/mod/etc/conf/streamripper.cfg | cut -d'_' -f2 | cut -d'E' -f2 | cut -d'=' -f1)
srch=$(echo $srch | cut -d' ' -f1)
echo StreamSuche=\"$srch\"
if [ -z "$srch" ] && [ "$test" = "yes" ] ; then
srch=1
string=$(grep NAME$srch /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2)
teil=${string%?}
sender=${teil#?}
fi
string=$(grep SERVER$srch /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2)
echo Stream=$string
teil=${string%??????}
stream=${teil#?}
echo Stream=$stream
if [ -z "$stream" ] && [ "$test" = "yes" ] ; then
echo Keine Stream-URL gefunden, setze Test-Stream auf $def_stream
sender=Test-mit-$def_sender
stream=$def_stream
sleep 5 & echo
else
echo $sender=$srch
fihttp://www.ip-phone-forum.de/images/smilies/icon_smile.gif
echo 5. Abschnitt: Stream-Suche beendet.
# 6. Speicher-Ort festlegen
if [ -z "$speicher" ] || [ -z "$4" ] ; then
string=$(grep MUSICDIR /var/mod/etc/conf/streamripper.cfg | cut -d'=' -f2)
teil=${string%?}
speicher=${teil#?}
HDD="$speicher/$sender/$programm"
else
case $speicher in
$uStor01) HDD="/var/media/ftp/$uStor01/$ordner/$sender/$programm" ;;
$usbHDD) HDD="/var/media/ftp/$usbHDD/$ordner/$sender/$programm" ;;
$online) HDD="/var/media/ftp/$online/$ordner/$sender/$programm" ;;
esac
fi
if [ -z "$HDD" ] ; then
muster=$(echo $scripts | cut -d'/' -f6)
defHDD=$(echo ${scripts//$muster})
HDD="$defHDD$ordner/$sender/$programm"
fi
echo Speicher=$HDD
echo 6. Abschnitt: Speicher-Ort beendet.
# sleep 5 & exit
# 7. Log-Buch 1. Eintrag schreiben
zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
dateiName=$(echo $programm\_$(date +%F_%H-%M-%S\_$sender))
if [ "$test" = "yes" ] ; then
echo $zeit: $sender nimmt $dauer s $programm als \"$dateiName\" auf.
echo $zeit: $sender nimmt $dauer s $programm in \"$HDD\" auf. >> "$scripts/recorder.log"
else
echo $zeit: $sender startet $dauer min Aufnahme von \"$programm\". >> "$scripts/recorder.log"
fi
echo 7. Abschnitt: Logbuch, 1. Eintrag beendet.
# 8. Streamripper mit gefundendem Sender starten
if [ "$test" = "yes" ] ; then
echo streamripper $stream --with-id3v1 --quiet -a "$dateiName" -s -A -o larger -k 1 -l $dauer -d "$HDD"
sleep 5 & echo
fi
if [ ! -z "$3" ] ; then dauer=$(expr $3 \* 60) ; else dauer=$dauer ; fi # Minuten-Input in Sekunden umrechnen
streamripper $stream --with-id3v1 --quiet -a "$dateiName" -s -A -o larger -k 1 -l $dauer -d "$HDD"
errCode=$?
echo Streamripper, Exit-Code: \"$errCode\"
echo 8. Abschnitt: Stream-Aufnahme beendet.
# 9. Log-Buch 2. Eintrag schreiben
if [ "$errCode" != "0" ] ; then
echo Streamripper mit Fehler beendet: \"$errCode\"
zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
echo $zeit: streamripper mit Fehler \"$errCode\" beendet.>>"$scripts/recorder.log"
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'>>"$scripts/recorder.log"
else
echo Streamripper erfolgreich beendet.
zeit=$(date +"%a, %d.%m.%Y, %H:%M,%S Uhr")
echo $zeit: $sender auf \"$HDD\" beendet.>>"$scripts/recorder.log"
echo '------------------------------'>>"$scripts/recorder.log"
fi
echo 9. Abschnitt: Logbuch, 2. Eintrag beendet.
rm /var/tmp/recorder.tmp
Ansonsten stehen viele Hinweise bereits im Script.
Dieser sollte ohne weitere Anpassung, ausser man mag meinen Test-Sender nicht, :( laufen.
Bei mir heißt der Script "recorder.sh" und liegt im Ordner "/scripts".
Eigentlich sind diese Namen nicht zwingend, wenn auch logisch ...
Die notwendigen Informationen über Sender-Namen, Stream, HDD-Label etc. holt sich das Script aus der
lokalen Freetz-Umgebung. Das bedeutet, die in der Crontab verwendeten Begriffe sollten mit den Werten auf dem
Config-Menü für den Streamripper übereinstimmen. Die Aufnahme landet dann als .mp3 /.ogg (je nach Stream) auf der im Streamripper-Menü angegeben Ordner, wobei gleich nach Sender und Programm sortiert wird.
Je nach Fritz!Box und sonstiger Konstellation wie Onlinespeicher sind derzeit drei Speicher-Orte möglich:
- USB-Stick
- USB-Festplatte
- Online-Speicher
Wer mehr braucht, müsste im 6. Abschnitt den case-Teil anpassen und entsprechend dazu im 0. Abschnitt die Variable "Speicherorte" anpassen. Doch dann entfällt die Gewährleistung. :cool:
Beim Erststart des Scripts werden im 4. Abschnitt zwei symbolische Links angelegt.
Der erste ist für die Crontab, der zweite ist für den Verweis des Anrufsbeantworters (AVM-Zweig der Box) auf den 1. USB-Speicher (uStor01).
Wer den 2. Link nicht will oder braucht, kann den Bereich löschen oder mit #auskommentieren:
Code:
if [ -p "/var/tam/mount" ] ; then
echo "/var/media/ftp/$uStor01" > /var/tam/mount
rm -f /var/media/NEW_LINK
ln -f -s /var/media/ftp/$uStor01 /var/media/NEW_LINK
fi
Cu, rapat