Gepostet am:31.07.2009 16:41
#8
Aw:: Shoutcastmodul
31.07.2009 16:41 Zitat:
frankblack schrieb:
Zitat:selbstaufdieschulterklopp
Ich klopf mit. Kannst du den Code bitte einmal posten? Würde mir evtl. auch die Arbeit bei meinem Modul erleichtern. Du wirst auch in den Credits genannt.
Sicher kann ich das....hab ja auch nur vorhandenes umgemodelt und angepasst :) läuft als eigener Block einwandfrei...müsstest halt nur mal die Textausgabe auf nem ordentlichen Server testen weil ich da wie gesagt nen "Connection Timeout habe wegen Serverstandort und -konfig in den Staaten.
class Radio { var $fields = array(); var $fieldsDefaults = array("Server Status", "Stream Status", "Listener Peak", "Average Listen Time", "Stream Title", "Content Type", "Stream Genre", "Stream URL", "Current Song", "Stream AIM"); var $very_first_str; var $domain, $port, $path; var $errno, $errstr; var $trackLists = array(); var $isShoutcast; var $nonShoutcastData = array( "Server Status" => "n/a", "Stream Status" => "n/a", "Listener Peak" => "n/a", "Average Listen Time" => "n/a", "Stream Title" => "n/a", "Content Type" => "n/a", "Stream Genre" => "n/a", "Stream URL" => "n/a", "Stream AIM" => "n/a", "Stream IRC" => "n/a", "Current Song" => "n/a" ); var $altServer = False; function Radio($url) { $parsed_url = parse_url($url); $this->domain = isset($parsed_url['host']) ? $parsed_url['host'] : ""; $this->port = !isset($parsed_url['port']) || empty($parsed_url['port']) ? "80" : $parsed_url['port']; $this->path = empty($parsed_url['path']) ? "/" : $parsed_url['path']; if (empty($this->domain)) { $this->domain = $this->path; $this->path = ""; } $this->setOffset("Current Stream Information"); $this->setFields(); // setting default fields $this->setTableStart("<table border=0 cellpadding=2 cellspacing=2>"); $this->setTableEnd("</table>"); } function setFields($array=False) { if (!$array) $this->fields = $this->fieldsDefaults; else $this->fields = $array; } function setOffset($string) { $this->very_first_str = $string; } function setTableStart($string) { $this->tableStart = $string; } function setTableEnd($string) { $this->tableEnd = $string; } function getHTML($page=False) { if (!$page) $page = $this->path; $contents = ""; $domain = (substr($this->domain, 0, 7) == "http://") ? substr($this->domain, 7) : $this->domain; if (@$fp = fsockopen($domain, $this->port, $this->errno, $this->errstr, 2)) { fputs($fp, "GET ".$page." HTTP/1.1rn". "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)rn". "Accept: */*rn". "Host: ".$domain."rnrn"); $c = 0; while (!feof($fp) && $c <= 20) { $contents .= fgets($fp, 4096); $c++; } fclose ($fp); preg_match("/(Content-Type:)(.*)/i", $contents, $matches); if (count($matches) > 0) { $contentType = trim($matches[2]); if ($contentType == "text/html") { $this->isShoutcast = True; return $contents; } else { $this->isShoutcast = False; $htmlContent = substr($contents, 0, strpos($contents, "rnrn")); $dataStr = str_replace("r", "n", str_replace("rn", "n", $contents)); $lines = explode("n", $dataStr); foreach ($lines AS $line) { if ($dp = strpos($line, ":")) { $key = substr($line, 0, $dp); $value = trim(substr($line, ($dp+1))); if (preg_match("/genre/i", $key)) $this->nonShoutcastData['Stream Genre'] = $value; if (preg_match("/name/i", $key)) $this->nonShoutcastData['Stream Title'] = $value; if (preg_match("/url/i", $key)) $this->nonShoutcastData['Stream URL'] = $value; if (preg_match("/content-type/i", $key)) $this->nonShoutcastData['Content Type'] = $value; if (preg_match("/icy-br/i", $key)) $this->nonShoutcastData['Stream Status'] = "Stream is up at ".$value."kbps"; if (preg_match("/icy-notice2/i", $key)) { $this->nonShoutcastData['Server Status'] = "This is <span style="color: red;">not</span> a Shoutcast server!"; if (preg_match("/ultravox/i", $value)) $this->nonShoutcastData['Server Status'] .= " But an <a href="http://ultravox.aol.com/" target="_blank">Ultravox</a> Server"; $this->altServer = $value; } } } return nl2br($htmlContent); } } else return $contents; } else { return False; } } function getServerInfo($display_array=null, $very_first_str=null) { if (!isset($display_array)) $display_array = $this->fields; if (!isset($very_first_str)) $very_first_str = $this->very_first_str; if ($html = $this->getHTML()) { // parsing the contents $data = array(); foreach ($display_array AS $key => $item) { if ($this->isShoutcast) { $very_first_pos = stripos($html, $very_first_str); $first_pos = stripos($html, $item, $very_first_pos); $line_start = strpos($html, "<td>", $first_pos); $line_end = strpos($html, "</td>", $line_start) + 4; $difference = $line_end - $line_start; $line = substr($html, $line_start, $difference); $data[$key] = strip_tags($line); } else { $data[$key] = $this->nonShoutcastData[$item]; } } return $data; } else { return $this->errstr." (".$this->errno.")"; } } function createHistoryArray($page) { if (!in_array($page, $this->trackLists)) { $this->trackLists[] = $page; if ($html = $this->getHTML($page)) { $fromPos = stripos($html, $this->tableStart); $toPos = stripos($html, $this->tableEnd, $fromPos); $tableData = substr($html, $fromPos, ($toPos-$fromPos)); $lines = explode("</tr><tr>", $tableData); $tracks = array(); $c = 0; foreach ($lines AS $line) { $info = explode ("</td><td>", $line); $time = trim(strip_tags($info[0])); if (substr($time, 0, 9) != "Copyright" && !preg_match("/Tag Loomis, Tom Pepper and Justin Frankel/i", $info[1])) { $this->tracks[$c]['time'] = $time; $this->tracks[$c++]['track'] = trim(strip_tags($info[1])); } } if (count($this->tracks) > 0) { unset($this->tracks[0]); if (isset($this->tracks[1])) $this->tracks[1]['track'] = str_replace("Current Song", "", $this->tracks[1]['track']); } } else { $this->tracks[0] = array("time"=>$this->errno, "track"=>$this->errstr); } } } } $ip = "xxx.xxx.xxx.xxx"; //Stream-IP oder URL $port = "xxxx"; //Stream-Port $display_array = array("Stream Title", "Stream Genre", "Current Song"); //Ausgabestring erweiterbar mit obigen Variablen $radio = new Radio($ip.":".$port); $data_array = $radio->getServerInfo($display_array); echo "<br>"; echo "<table>n"; if (is_array($data_array)) { foreach ($display_array AS $i => $text) { if ($text == "Stream Genre") { $datastring = "<span style="color: lightgrey; background-color: black;">".$data_array[$i]."</span>"; } else { $datastring = $data_array[$i]; } echo "<tr>n <td><font color='#FF9900'><b>".$text.":</b></span></td>n"; echo " <td>".$datastring."</td>n</tr>n"; } } else { echo "<tr>n <td colspan="2" style="color: red;">".$data_array."</td>n</tr>n"; } echo "</table>n"; echo "<br>"; //Ausgabe Playerlogo und Link echo' <a href="{X_SITEURL}xxx.pls" target="_new"> <img border="0" src="{X_SITEURL}images/winamp.png" width="20px" height="20px" alt="Winamp"></a> <a href="{X_SITEURL}xxx.asx" target="_new"> <img border="0" src="{X_SITEURL}images/wmp.png" width="20px" height="20px" alt="MediaPlayer"></a> <a href="{X_SITEURL}xxx.ram" target="_new"> <img border="0" src="{X_SITEURL}images/realplayer.png" width="20px" height="20px" alt="Realplayer"></a>
<br>
//Alternative Player
<a href="psradio://|ChannelId|9399" target="_new"> <img border="0" src="{X_SITEURL}images/phonostar-logo.gif" width="100px" height="20px alt="Phonostarplayer"></a> <br> <p><a href="{X_SITEURL}webplayer/index.html" target="_new"> <img border="0" src="{X_SITEURL}images/webplayer.jpg" width="100px" height="20px alt="Flash-Webplayer"></a></p>';
*/
ok..der Formatiert das nen bisl komisch also häng ich es nochmal als Zip an
bei der Playerausgabe sind die letzten beiden (phonostar und webplayer) alternative Player..also nicht für jeden brauchbar :)
Gruß
Set
Datei anhängen:
Link nur für registrierte Benutzer