PHP -> Shoutcast

kodiacc

Mitglied
Hi all!

Ich wollte mal wissen ob jemand nen Tut kennt um mit PHP auf shoutcast zuzugreifen, also Listener etc. auszugeben.

das geht doch irgendwie mit sockets, aber ka wie.

Gruss koDiacc
 
naja hat sich eigentlich erledigt habe über die suchfunktion viel gefunden und gemerkt das das dann noch ne nummer zu krass für mich ist .. man braucht ja einen XML parser etc.
 
Also jemand der das schonmal gemacht hat meint grade das man kein XML parser braucht sondern einfach nur mit FSOCKETOPEN etc.

Aber ich hab ka wie .. kann mir jemand helfen?
 
also prinziell..
fsockopen stellt dir einen filehandle für den zugriff auf einen server
recht viel mehr macht fsockopen nicht

nun kannst du den socket genau wie eine datei behandeln... zwar eine datei die dynamisch auf anfragen antwortet aber immerhin...

nun setzt die eigendliche schwerarbeit an... das protokoll für die übertragung... http://forums.radiotoolbox.com/viewtopic.php?t=74
 
Leider etwas spaet...

Hallo!

Genau vor diesen Problem stand ich auch vor nem Monat. Wollte mich einfach nicht damit zufriedengeben, dass man einen aufwendigen XML-Parser auf den Shoutcast losjagen muss. Hab dann ein bisschen mit den Sockets am Shoutcastdaemon rumgeschustert und hab dann letztendlich ne ziemlich simple Funktion gefunden.

PHP:
/* 
** 
** author: Johannes Distler 
** 
** grep shoutcast informations, without 
** processing its XML output. streaminfo() 
** delivers connected users, max users, 
** user peak, bitrate and current played song. 
** 
** $file = shoutcasts ip/domain 
** $port = shoutcasts listen port 
** usage: streaminfo("seth4you-radio.de",8010); 
**
** have phun! 
** 
************************************************** 
*************************************************/ 


function streaminfo($file,$port) { 
  $fp = @fsockopen ($file, $port, &$errno, &$errstr, 5); 
  if (!$fp) { 
          echo "Could not connect to <b>{$file}:{$port}</b> ({$errno}) - {$errstr}\n"; 
  } else { 
     fputs ($fp, "GET /7 HTTP/1.1\r\nUser-Agent:Mozilla\r\n\r\n"); 
     while (!feof($fp)) { 
      $stream = fgets($fp,1024); 
       } 
     list(,$stream) = explode("<body>",$stream); 
     list($stream) = explode("</body>",$stream); 
     list($user, $status, $user_peak, $user_max, ,$bitrate, $song) = explode(",",$stream); 
     if($status=="0") { 
      echo "<b>{$file}:{$port}</b> is offline!"; 
     } else { 
        echo "<b>{$file}:{$port} on air!</b><br><br> 
    <b>user still connected:</b> {$user} of {$user_max}<br> 
    <b>user peak:</b> {$user_peak}<br> 
    <b>bitrate:</b> {$bitrate} kbits/s<br> 
    <b>current song:</b> {$song}<br>"; 
     } 
     fclose($fp); 
  } 
}


Ja, ich weiss, ziemlich haesslich etwas innerhalb einer Funktion auszugeben, aber das war damals quick 'n dirty. Hoffe ich konnte noch irgendjemand damit helfen. ;-)

Gruesse,
stanleyB
 
Kann das sein, dass er bei mir statt dem song für die Variable $song die bitrate ausgibt!

Bis auf $status, funktionieren die anderen auch nicht so wirklich...

Habe win32 shoutcast 1.9.2...

-Danke-
 
Hi

ich muss sagen ich bin ein totaler newbee in Sachen PHP.
Ich habe den Code so wie er oben steht in eine php-datei gepackt und noch nichts geändert. Muss man in der php datei etwas ändern oder muss mann sie nur in die jeweilige datei einbinden wo es angezeigt werden soll
Wenn ja dann sagt mir bitte wie man es einbindet

THX
 
Du musst diesen Code in eine PHP-Datei packen. Dann nur noch streaminfo(Serverip, Serverport); eingeben und fertig. Script ausführen und hoffentlich freuen :-)

mfg
 
Ich wollte das Script auch testen !

Hab den Shoutcast lokal auf meinem Rechner laufen, der geht auch das ist getestet !

Aber das Script scheint nichts zu tun, es lädt sich zu tote !

Woran kann das liegen ?

Hab die Ports an meinem Router weitergeleitet an meine IP, die Desktopfirewall hatte ich deaktiviert !

Was kann noch der Fehler sein ?

-----------------------------

Wenn ich es lokal teste, d.h. mit xampp und rausgehe zeigt er mir die Stats an, njhur sind alle Vars leer ! Wieso ?
 
Zuletzt bearbeitet:
Zurück