Werbefreies Webradio Script | mit "Token" Links

Lemur

Mitglied
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...

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
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:

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:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.