Witam.

Stworzylem taka klase do statystyk shoutcast

  1. <?php
  2.  
  3. /*
  4. * Autor: Rafał Robakowski
  5. * Kontakt: rafal.robakowski@gmail.com
  6. */
  7. class SHOUTcast {
  8.  
  9. /*
  10. * Łączenie z serwerem shoutcast
  11. * i pobieranie zawartosci pliku xml
  12. */
  13. function connect($host, $port, $pass) {
  14. global $xml;
  15.  
  16. $fp = @fsockopen ($host, $port, $errno, $errstr, 5); 
  17.  
  18. if (!$fp) { 
  19. return false; 
  20. } else { 
  21. fputs($fp, "GET /admin.cgi?pass={$pass}&mode=viewxml HTTP/1.1\r\n");
  22. fputs($fp, "User-Agent: XML Getter (Mozilla Compatible)\r\n\r\n");
  23.  
  24. while (!feof($fp)) { 
  25. $xml .= fgets($fp, 1024); 
  26. }
  27. fclose($fp);
  28. return $xml;
  29. }
  30. }
  31.  
  32. /*
  33. * Zwracanie danej pozycji, oto ich lista:
  34. * CURRENTLISTENERS - ilość aktualnych słuchaczy
  35. * PEAKLISTENERS - dotychczasowy rekord liczby słuchaczy
  36. * MAXLISTENERS - maksymalna ilość słuchaczy
  37. * SERVERGENRE - rodzaj serwera
  38. * SERVERURL - adres URL strony
  39. * SERVERTITLE - nazwa serwera
  40. * SONGTITLE - nazwa utworu aktualnie odtwarzanego
  41. * IRC - identyfikator IRC
  42. * AIM - identyfikator AIM
  43. * ICQ - identyfikator ICQ
  44. * STREAMSTATUS - status strumienia
  45. * BITRATE - jakość nadawania
  46. */
  47. function show($item) {
  48. global $xml;
  49.  
  50. $show = $xml;
  51.  
  52. list(,$show) = explode('<'.strtoupper($item).'>',$show); 
  53. list($show,) = explode('</'.strtoupper($item).'>',$show); 
  54. return $show; 
  55. }
  56.  
  57. /*
  58. * Zwracanie rekordu radia
  59. */
  60.  
  61. function show_rekord($filename) {
  62. global $xml;
  63. $file = $filename;
  64.  
  65. $peak = $this -> show('PEAKLISTENERS');
  66. $current = $this -> show('CURRENTLISTENERS');
  67.  
  68. if ( $current <= $peak ) {
  69. include_once($file);
  70. return $peak_file;
  71. } else {
  72. if (is_writable($file)) {
  73. $fp = fopen($file, 'a');
  74. $new = '<?php $peak_file = '.$current.'; ?>';
  75. @fwrite($fp, $new);
  76. fclose($fp);
  77.  
  78. return $current;
  79. } else {
  80. return 'Wystąpił bład, sprawdź chmody pliku rekord.txt';
  81. }
  82. }
  83.  
  84. }
  85.  
  86. }
  87.  
  88. /*
  89. * Przykład wykorzystania
  90. */
  91. /*
  92. $statystyki = new SHOUTcast();
  93.  
  94. if( !$statystyki -> connect('127.0.0.1', '8000', 'haslo'))
  95. echo 'Serwer jest wyłączony';
  96. else {
  97. if( $statystyki -> show('STREAMSTATUS') == 0 )
  98. echo 'Aktualnie nikt nie nadaje';
  99. else {
  100. echo '<table border="0" cellspacing="0" cellpadding="0">';
  101. echo '<tr><td>Audycja: </td><td>' . $statystyki -> show('BITRATE') . '</td></tr>';
  102. echo '<tr><td>Prowadzi: </td><td>' . $statystyki -> show('SERVERGENRE') . '</td></tr>';
  103. echo '<tr><td>Godziny: </td><td>' . $statystyki -> show('AIM') . '</td></tr>';
  104. echo '<tr><td>Słucha: </td><td>' . $statystyki -> show('BITRATE') . '</td></tr>';
  105. echo '<tr><td>Rekord: </td><td>' . $statystyki -> show_rekord('rekord/rekord_mix.php') . '</td></tr>';
  106. echo '</table>';
  107. }
  108. }
  109. */
  110. ?>


Wywoluje ja w podobny sposob jak jest na samym dole w komentarzu jednakze dwa razy na tej samej stronie. Oczywiscie od nowa pod inna nazwa zmiennej definiuje klase ale mimo to w obydwoch miejscach wyswietla mi sie to samo info z pierwszego serwera :/ Wyglada to tak:

  1. JAKIS KOD HTML
  2.  
  3. <?php
  4. /*
  5. * Statystyki kanalu MIX
  6. */
  7.  
  8. include_once('stat.php');
  9. $statystyki_mix = new SHOUTcast();
  10.  
  11. if( !$statystyki_mix -> connect('IP', 'PORT', 'HASLO'))
  12. echo 'Serwer jest wyłączony';
  13. else {
  14. if( $statystyki_mix -> show('STREAMSTATUS') == 0 )
  15. echo 'Aktualnie nikt nie nadaje';
  16. else {
  17. echo '<table border="0" cellspacing="0" cellpadding="0">';
  18. echo '<tr><td>Audycja: </td><td>' . substr($statystyki_mix -> show('SERVERTITLE'), 20) . '</td></tr>';
  19. echo '<tr><td>Prowadzi: </td><td>' . $statystyki_mix -> show('SERVERGENRE') . '</td></tr>';
  20. echo '<tr><td>Godziny: </td><td>' . $statystyki_mix -> show('AIM') . '</td></tr>';
  21. echo '<tr><td>Słucha: </td><td>' . $statystyki_mix -> show('CURRENTLISTENERS') . '</td></tr>';
  22. echo '<tr><td>Rekord: </td><td>' . $statystyki_mix -> show_rekord('rekord/rekord_mix.php') . '</td></tr>';
  23. echo '</table>';
  24. }
  25. }
  26. ?>
  27.  
  28. JAKIS KOD HTML
  29.  
  30. <?php
  31. /*
  32. * Statystyki kanalu CLUB
  33. */
  34.  
  35. $statystyki_club = new SHOUTcast();
  36.  
  37. if( !$statystyki_club -> connect('IP', 'PORT', 'HASLO'))
  38. echo 'Serwer jest wyłączony';
  39. else {
  40. if( $statystyki_club -> show('STREAMSTATUS') == 0 )
  41. echo 'Aktualnie nikt nie nadaje';
  42. else {
  43. echo '<table border="0" cellspacing="0" cellpadding="0">';
  44. echo '<tr><td>Audycja: </td><td>' . substr($statystyki_club -> show('SERVERTITLE'), 21) . '</td></tr>';
  45. echo '<tr><td>Prowadzi: </td><td>' . $statystyki_club -> show('SERVERGENRE') . '</td></tr>';
  46. echo '<tr><td>Godziny: </td><td>' . $statystyki_club -> show('AIM') . '</td></tr>';
  47. echo '<tr><td>Słucha: </td><td>' . $statystyki_club -> show('CURRENTLISTENERS') . '</td></tr>';
  48. echo '<tr><td>Rekord: </td><td>' . $statystyki_club -> show_rekord('rekord/rekord_club.php') . '</td></tr>';
  49. echo '</table>';
  50. }
  51. }
  52. ?>
  53.  
  54. JAKIS KOD HTML


Oczywisce zamiast IP, PORT i HASLO wpisuje to co trzeba dla obydwoch serwerow oczywiscie inne dane takie jakie serwer posiada.

Jednakze nie wiem gdzie tkwi blad ze drugie statystyki wyswietlaja to samo co pierwsze jedynie rozni sie rekord ktory jest odczytywany z osobnego pliku.

Przy okazji milo bedzie jak ocenicie ta klase i wytkniecie bledy smile.gif