TCL: Titelanzeige für Internetradios

Im weltweiten Netz gibt es ja nun viele Internetradios aus allen möglichen Bereichen. Viele von diesen Nutzen einen IRC Channel zum Chatten, in dem meist ein Bot – gerne ein Eggdrop – sitzt, der diverse Funktionen bietet. Eine dieser Funktionen ist es, den aktuell laufenden Titel auf Anfrage anzuzeigen. Diese Eggdrops verwenden dazu verschiedene Scripte, welche in der Scriptsprache TCL geschrieben sind. Um nun den Titel vom Radioserver – meist ein Shoutcast-Server – auszulesen, wird natürlich auch ein kleines Script benötigt. Ich möchte hier ein einfaches Beispiel bieten, wie eine solche Abfrage aussehen kann.

Das hier aufgeführte Script liefert die Titelinformationen nach Aufruf eines Triggers – !song – in den IRC-Channel zurück. Um mit dem Shoutcast-Server zu kommunizieren, werden jedoch einige Daten gebraucht. Zu diesen zählen unter anderem die Adresse des Servers, der Port und das Passwort. Diese bilden dann schon die Grundkonfiguration des Scriptes.

1
2
3
4
5
6
7
8
9
10
11
###### config
# radiochan     => IRC-Channel des Radios
# streamip      => IP des Radioservers
# streamport    => Port des Radiostreams
# streampass    => Adminpasswort des Radiostreams
# songurl       => Webadresse des Radios
set radiochan   "#channel"
set streamip    "radioserver.de"
set streamport  "port"
set streampass  "passwort"
set songurl     "http://dein-radio.de"

Um nun den Trigger zu erkennen, benötigt das Script noch ein Binding. Da dieser Trigger im Channel und nicht in einem Query zum Bot erfolgt, sollte dieses Binding “public”, also öffentlich sein.

1
2
3
###### Bindungs
# bind modus - trigger funktion
bind pub - !song pub_song

Die durch das Binding aufgerufene Funktion – in diesem Fall “pub_song” – liest dann die Daten vom Shoutcast-Server aus und postet das Ergebnis in dem Chat des Radios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
###### Funktionen
proc shrink {calc number string start bl} {
    return [expr [string first "$string" $bl $start] $calc $number]
}

# Ausgabe des aktuell laufenden Songs.
# Dies wird durch !song getriggert.
proc pub_song {nick uhost hand chan arg} {
    global no_bots streamip streamport streampass

    foreach ch $no_bots {
        if {[string tolower $chan] == $ch} {
            return 0
        }
    }

    if {[catch {set sock [socket $streamip $streamport] } sockerror]} {
        putlog "error: $sockerror"

        putchan $chan "Es tut mir leid, ich kann den Server nicht erreichen."

        return 0
    } else {
        puts $sock "GET /admin.cgi?pass=$streampass&mode=viewxml&page=0 HTTP/1.0"
        puts $sock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)"
        puts $sock "Host: $streamip"
        puts $sock "Connection: close"
        puts $sock ""

        flush $sock

        while {[eof $sock] != 1} {
            set bl [gets $sock]

            if {[string first "standalone" $bl] != -1} {
                set streamstatus [string range $bl [shrink + 14 "<STREAMSTATUS>" 0 $bl] [shrink - 1 "</STREAMSTATUS>" 0 $bl]]
                set songtitle [string range $bl [shrink + 11 "<SONGTITLE" 0 $bl] [shrink - 1 "</SONGTITLE>" 0 $bl]]
                set songurl [string range $bl [shrink + 9 "<SONGURL>" 0 $bl] [shrink - 1 "</SONGURL>" 0 $bl]]

                if {$songurl != ""} {
                    set songurl " ($songurl)"
                }

                if {$streamstatus == 1} {
                    putchan $chan "Im Moment hörst Du: \00304 $songtitle \003 $songurl"
                } else {
                    putchan $chan "Es tut mir leid, bei der Abfrage ist ein Fehler aufgetreten."
                }
            }
        }

        close $sock
    }
}

Viel Spaß damit Smilie: :-)

Werbung

wpShopGermany - Das erste echte WordPress Shop-Plugin für Deutschland

Über H.-Peter Pfeufer

Ich bin Webentwickler/ -programmierer aus Leidenschaft, WordPressbegeistert und ab und an auch mal ein netter Mensch.
Vor allen schreibe ich über alles was mit den Themen Webentwicklung/ -programmierung und WordPress zu tun hat. Nebenher auch mal einige Gedanken zu allgemeineren Themen.

Kategorie(n): TCL
Tags: , , , ,
Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

 

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>