- Mitglied seit
- 17 Mai 2007
- Beiträge
- 281
- Punkte für Reaktionen
- 0
- Punkte
- 0
Hallo Community,
da ich nebenbei des öfteren Webradio höre und mich über einige Radiosender ärgern musste, die ihre Streamings umgestellt haben, habe ich ein kleines Script geschrieben.
Der Hintergrund dabei ist, dass die Webradiostreams bestimmter Sender, nur im Windows Media Player und nur dann lauffähig sind, wenn der User die (mit Werbebanner zugemüllte) PopUp Seite geöffnet lässt. Wird diese geschlossen, reist der Stream ab. Den Streamlink einfach auslesen geht dabei leider nicht mehr, da für jede Session ein eigenes "Token" generiert wird. Ist das Token verfallen (z.B. nach schließen des Media Players), so muss ein neues Token generiert werden.
Mein Script holt sich einen gültigen Token, generiert damit einen (einmalig) gültigen Link und schreibt diesen in eine Playlist und HTML Linkliste...
Das Script wird stündlich per cron ausgeführt.
Soweit so gut. Das Script macht was es soll, allerdings nur "halb manuell".
Soll heißen, ich muss immer noch meine lokale Webseite öffnen und auf den Link klicken, oder die m3u laden. Abgesehen davon weis ich nicht, wann das Token wirklich verfällt und halte es für sinnvoller, den Token nur dann holen zu lassen, wenn er wirklich benötigt wird.
Genau hier bitte ich um Eure mithilfe.
Kann ich das Script ausführen lassen, wenn die Seite "playlist.htm" besucht wird?, alternativ einen "klick Button" zum ausführen des Scripts einbinden?
Wie müsste hier der Code aussehen?
Im Idealfall erzeuge ich statische Playlist, die lokal auf der Box liegt. Sobald eine Streamurl dieser Playlist von nem Player angefordert wird, soll das Script auf der Box starten, den gültigen Link für diese URL generieren und dann den Player auf diese URL redirecten.
Ist das machbar? Falls ja, wie müsste der Code aussehen?
Vielen Dank für Eure anregungen.
Grüße Lemur
##Edit:##
Ich habs jetzt einfach über Javascript gelöst, ist zwar mit Sicherheit nicht besonders elegant, erfüllt jedoch prima seinen Zweck:
Hier der Ansatz:
Zum Verständnis, egal ob das Script von USB oder cgi-bin der Box ausgeführt wird, es macht immer folgendes:
Token holen -> URLs generieren -> Playlist / m3u List erstellen ->(unsichtbare) Update Seite erstellen ->erstellte Dateien ins cgi-bin Verzeichnis der Box kopieren
D.h. wenn nun die Seite webradio.htm aufgerufen wird, wird diese auf das Script selbst redirected, dass Script ausgeführt und nach Linkupdate auf die neugenerierte Playlist redirected. Alternativ kann die M3U Liste, die dann ebenfalls aktuallisiert wurde, in den Player geladen werden.
Den Crontab hab ich nun wieder gelöscht, somit werden nur noch Tokenupdates gemacht, wenn diese wirklich benötigt werden.
Nach wie vor bin ich jedoch gerne für Anregungen, insbesondere zur verkürzten Schreibweise bzgl. mehrer Sender, offen.
Grüße Lemur
da ich nebenbei des öfteren Webradio höre und mich über einige Radiosender ärgern musste, die ihre Streamings umgestellt haben, habe ich ein kleines Script geschrieben.
Der Hintergrund dabei ist, dass die Webradiostreams bestimmter Sender, nur im Windows Media Player und nur dann lauffähig sind, wenn der User die (mit Werbebanner zugemüllte) PopUp Seite geöffnet lässt. Wird diese geschlossen, reist der Stream ab. Den Streamlink einfach auslesen geht dabei leider nicht mehr, da für jede Session ein eigenes "Token" generiert wird. Ist das Token verfallen (z.B. nach schließen des Media Players), so muss ein neues Token generiert werden.
Mein Script holt sich einen gültigen Token, generiert damit einen (einmalig) gültigen Link und schreibt diesen in eine Playlist und HTML Linkliste...
Code:
#!/bin/sh
# Globals (Wird für die Playlist benötigt)
TYP="#EXTINF:-1,"
# 1. Hitradio Antenne Niedersachsen (Beispiel an Antenne NDS)
NAME1="Antenne NDS"
TOKEN1=`wget 'http://edge.download.newmedia.nacamar.net/sltokens/stream-radio-player.php?stream=antennends/livestream.wma' -O - | grep "var token = " | sed 's/ *//g;s/vartoken="//g;s/"/ # /;/^#/d;s/#.*$//g;s/ //g'`
URL1="http://lsd.newmedia.nacamar.net/bb/redirect.lsc?adid=0&stream=antennends/livestream.wma&content=live&media=ms&token="
OUT1="#EXTM3U \r\n""$TYP$NAME1 \r\n""$URL1$TOKEN1"
# ... (Noch weitere Sender...)
echo -e $OUT1 > radio.m3u
echo -e echo -e "<html><body><center><a href="$URL1$TOKEN1""" target="_blank">$NAME1</a><p>" > playlist.htm
Soweit so gut. Das Script macht was es soll, allerdings nur "halb manuell".
Soll heißen, ich muss immer noch meine lokale Webseite öffnen und auf den Link klicken, oder die m3u laden. Abgesehen davon weis ich nicht, wann das Token wirklich verfällt und halte es für sinnvoller, den Token nur dann holen zu lassen, wenn er wirklich benötigt wird.
Genau hier bitte ich um Eure mithilfe.
Kann ich das Script ausführen lassen, wenn die Seite "playlist.htm" besucht wird?, alternativ einen "klick Button" zum ausführen des Scripts einbinden?
Wie müsste hier der Code aussehen?
Im Idealfall erzeuge ich statische Playlist, die lokal auf der Box liegt. Sobald eine Streamurl dieser Playlist von nem Player angefordert wird, soll das Script auf der Box starten, den gültigen Link für diese URL generieren und dann den Player auf diese URL redirecten.
Ist das machbar? Falls ja, wie müsste der Code aussehen?
Vielen Dank für Eure anregungen.
Grüße Lemur
##Edit:##
Ich habs jetzt einfach über Javascript gelöst, ist zwar mit Sicherheit nicht besonders elegant, erfüllt jedoch prima seinen Zweck:
Hier der Ansatz:
Code:
#...
# HTML Daten im USB VZ erstellen
echo -e "<html><body><script language="javascript" type="text/javascript">window.location.href = 'http://192.168.1.1/cgi-bin/radio/radio.sh';</script></body></html>" > $VZ"webradio.htm"
echo -e "<html><body><center><p><p><a href="$URL1$TOKEN1""" target="_blank">$NAME1</a><p>" "<a href="$URL2$TOKEN2""" target="_blank">$NAME2</a><p>" "<a href="$URL3$TOKEN3""" target="_blank">$NAME3</a><p>" "<a href="$URL4$TOKEN4""" target="_blank">$NAME4</a><p>" "<a href="$URL5$TOKEN5""" target="_blank">$NAME5</a><p>" "<a href="$URL6$TOKEN6""" target="_blank">$NAME6</a><p>" "<a href="$URL7$TOKEN7""" target="_blank">$NAME7</a><p>""<a href="$URL8$TOKEN8""" target="_blank">$NAME8</a><p>" '<p><p><p><input type="button" value="Token Update" onclick="location='"'webradio.htm'"'">' > $VZ"playlist.htm"
# HTTP erreichbarkeit
mkdir $VZCGI"radio"
cat $VZ"playlist.htm" > $VZCGI"radio/"playlist.htm
cat $VZ"radio.sh" > $VZCGI"radio/"radio.sh
chmod 0755 $VZCGI"radio/"radio.sh
cat $VZ"webradio.htm" > $VZCGI"radio/"webradio.htm
# Script Browserausgabe
cat << EOF
<html>
<body>
<script language="javascript" type="text/javascript">
<!-- // JavaScript-Bereich für ältere Browser auskommentieren
window.location.href = 'http://192.168.1.1/cgi-bin/radio/playlist.htm';
// -->
</script>
</body>
</html>
EOF
Zum Verständnis, egal ob das Script von USB oder cgi-bin der Box ausgeführt wird, es macht immer folgendes:
Token holen -> URLs generieren -> Playlist / m3u List erstellen ->(unsichtbare) Update Seite erstellen ->erstellte Dateien ins cgi-bin Verzeichnis der Box kopieren
D.h. wenn nun die Seite webradio.htm aufgerufen wird, wird diese auf das Script selbst redirected, dass Script ausgeführt und nach Linkupdate auf die neugenerierte Playlist redirected. Alternativ kann die M3U Liste, die dann ebenfalls aktuallisiert wurde, in den Player geladen werden.
Den Crontab hab ich nun wieder gelöscht, somit werden nur noch Tokenupdates gemacht, wenn diese wirklich benötigt werden.
Nach wie vor bin ich jedoch gerne für Anregungen, insbesondere zur verkürzten Schreibweise bzgl. mehrer Sender, offen.
Grüße Lemur
Zuletzt bearbeitet: