[PHP] - Stream prüfen??



  • Hi Leute!
    Das mit der URL Prüfung fsockopen(); ist mir zu kompliziert!

    Ich möchte eigentlich nur, dass ein RadioStream, der auf MEIN Computer verlinkt, getestet wird, ob OKAY oder OFFLINE!
    http://itradio.dyndns.org:8000/listen.pls

    sollte darauf überprüft werden, ob diese Adresse aufrufbar ist (ABER NICHTS AUSFÜHREN!!!) oder nur "Die seite kann nicht ..." angezeigt wird.. der USER soll davon aber NICHTS mitbekommen!

    Ist die seite aufrufbar, sollte der HP Besucher nur sehen "Radio OnAir" sonst "Radio OffAir".

    Der radio wird dann mittels embed src="http://itradio.dyndns.org:8000/listen.pls" .... abgespielt..

    mfg
    Pro



  • da ich annehme, dass der Radio-Server mit Winamps-Shoutcast Plugin/Server arbeitet, gibts da auch eine einfache Möglichkeit, die u.a. auch die letzen n gespielten Titel und den Aktuellen Titel, die Zuhörer Zahl etc. liefert.

    Shoutcast hat schon eine XML schnittstelle integriert, die kann man mit PHP recht einfach auslesen.

    Hier mal ein kleines Beispiel wie man sowas machen könnte:

    scxml-obj.php
    [code
    <?php

    class SCXML {

    var $host="shoutcast_server_ip_address"; // host or ip of shoutcast server
    var $port="shoutcast_server_port_number"; // port of shoutcast server
    var $password="shoutcast_server_password"; // password for shoutcast server

    var $depth = 0;
    var $lastelem= array();
    var $xmlelem = array();
    var $xmldata = array();
    var $stackloc = 0;

    var $parser;

    function set_host(host) { this->host=$host;
    }

    function set_port(port) { this->port=$port;
    }

    function set_password(password) { this->password=$password;
    }

    function startElement($parser, $name, attrs) { this->stackloc++;
    this->lastelem[this->stackloc]=name;name; this->depth++;
    }

    function endElement($parser, name) { unset(this->lastelem[this->stackloc]); this->stackloc--;
    }

    function characterData($parser, data) { data=trim(data);if(data); if (data) {
    this->xmlelem[this->depth]=this->lastelem[this->stackloc];
    this->xmldata[this->depth].=$data;
    }
    }

    function retrieveXML() {
    $rval=1;

    sp=fsockopen(sp=fsockopen(this->host,this->port,&errno,&errstr,10);if(!errstr,10); if (!sp) $rval=0;
    else {

    set_socket_blocking($sp,false);

    fputs(sp,"GET/admin.cgi?pass=sp,"GET /admin.cgi?pass=this->password&mode=viewxml HTTP/1.1\nUser-Agent:Mozilla\n\n");

    for($i=0; $i<30; i++) { if(feof(sp)) break;
    spdata.=fread(sp_data.=fread(sp,31337);
    usleep(500000);
    }

    sp_data=ereg_replace(".<!DOCTYPE","<!DOCTYPE",sp\_data=ereg\_replace("^.*<!DOCTYPE","<!DOCTYPE",sp_data);

    this>parser=xml_parser_create();xml_set_object(this->parser = xml\_parser\_create(); xml\_set\_object(this->parser,&this);xml_set_elementhandler(this); xml\_set\_element_handler(this->parser, "startElement", "endElement");
    xml_set_character_data_handler($this->parser, "characterData");

    if (!xml_parse($this->parser, sp\_data, 1)) { rval=-1;
    }

    xml_parser_free($this->parser);

    }
    return $rval;
    }

    function debugDump(){
    reset(this>xmlelem);while(list(this->xmlelem); while (list(key,val)=each(val) = each(this->xmlelem)) {
    echo "$key. val>".val -> ".this->xmldata[$key]."\n";
    }

    }

    function fetchMatchingArray(tag){ reset(this->xmlelem);
    rval=array();while(list(rval = array(); while (list(key,val)=each(val) = each(this->xmlelem)) {
    if (val==val==tag) rval[]=this->xmldata[$key];
    }
    return $rval;
    }

    function fetchMatchingTag(tag){ reset(this->xmlelem);
    rval="";while(list(rval = ""; while (list(key,val)=each(val) = each(this->xmlelem)) {
    if (val==val==tag) rval=rval=this->xmldata[$key];
    }
    return $rval;
    }

    }

    ?>
    [/code]

    show.php

    <?php
    
    require "scxml-obj.php";
    
    /* confuguration */
    $host = "62.93.201.61"; // host or ip of shoutcast server
    $port = "8000";         // port of shoutcast server
    $password = "UhKKl3f";  // password for shoutcast server
    $maxsongs = "20";       // max number of songs to display (max is 20)
    $rfrshrate = "60";      // reload rate of page
    $timeat = "0";          // display starttime (0) or endtime (1)
    
    $serv1 = new SCXML;
    
    $serv1->set_host("$host");
    $serv1->set_port("$port");
    $serv1->set_password("$password");
    
    if (!$serv1->retrieveXML()) DIE ("Shoutcast server is currently offline !");
    
    $cur_listen=$serv1->fetchMatchingTag("CURRENTLISTENERS");
    if ($cur_listen == "") {
       $cur_listen = 0;
     }
    
    $peak_listen=$serv1->fetchMatchingTag("PEAKLISTENERS");
    $max_listen=$serv1->fetchMatchingTag("MAXLISTENERS");
    $title=$serv1->fetchMatchingTag("SERVERTITLE");
    $song_title=$serv1->fetchMatchingTag("SONGTITLE");
    $con_hostname=$serv1->fetchMatchingArray("HOSTNAME");
    $con_listen=$serv1->fetchMatchingArray("CONNECTTIME");
    $con_song=$serv1->fetchMatchingArray("TITLE");
    /* array: song list */
    $con_song_print=array_slice($con_song, 1, $maxsongs);
    $con_time=$serv1->fetchMatchingArray("PLAYEDAT");
    if(ereg('^[0-9]{10}$',$con_time)) {
       $playtime = date("H:i:s",$con_time);
      }
     else
       {
        $playtime = $con_time;
       }
    
    if ($timeat == "0") {
          $playat = array_shift ($playtime);
       } else {
          $playtime = $playtime;
       }
    ?>
    


  • Deine Vermutung mit SHOUTCAST ist richtig! Danke!
    Werde es mal ausprobieren!


Anmelden zum Antworten