[criamos, desenvolvemos e entregamos seu website.]

{Gostamos de compartilhar nossos conhecimentos, acreditamos assim, que todos melhoram e podemos contruir um mundo mais justo e menos desigual}


Como pegar informações da sua rádio no Shoutcast

Olá pessoal!

Em 2004 entrei no meu primeiro emprego com carteira assinada (como auxiliar administrativo), mas o trabalho na verdade era de troca de links entre sites (link exchange), um sistema extremamente tosco de backlinks que os sites utilizavam para obter na malandragem colocação no Google (pagerank). Tá, e daí?

E daí que esse trabalho foi o começo do meu interesse por programação, pois tinha que alterar o html dos sites na hands para adicionar links e além disso integrar os sites parceiros através da API do site Link Exchanger (que nem existe mais), o ban ban ban do assunto na época. U-A-U! (sqn)

Bem, lá desenvolvi meu primeiro site (tosco, horrível, nojinho) e principalmente: meu primeiro servidor de streaming! \o/ 

- Mas porque você fez um servidor de streaming se seu trabalho era colocar á-agá-réfes nos sites?
- Ué, porque eu queria ouvir minhas músicas de casa no trabalho, claro! haha :P

Desde lá até os dias de hoje, um dos servidores mais populares e estáveis utilizado para web streaming de áudio é o Shoutcast, da empresa Nullsoft que também é criadora do MA-RA-VI-LHO-SO-OSO Winamp (sem críticas sobre meu gosto pelo Winamp aqui, okay?).

Lá no tempo do êpa, quando criei um servidor de streaming pela primeira vez, foi em um 486 (sabe o que é isso?) que tinha em casa, com uma conexão banda larga que nem lembro de quanto era (1 mega, 10, 100 talvez, sei lá, já perdi a noção de tamanho de banda larga), que caia a cada 10 minutos e com muito suor, lágrimas e sofrimento pra fazer funcionar.

Fiz isso com um tutorial do MA-RA-VI-LHO-SO-OSO-OSO Fórum do Baboo (no comments too, óraite?), lugar que frenquento até hoje, volte e meia. Era um winamp tocando todos os mp3 que tinha no HD (baixados pelo MA-RA-VI-LHO-OSO-OSO-OSO Soulseek) aleatóriamente com um plugin do shoutcast instalado. Ah, também usava o No-IP (existe isso ainda produção?) para poder compartilhar a URL da rádio com segurança (aham) com meus vários e diversos 2 amigos que tinham internet boa na época.

Claro que quando uma quarta pessoa tentava ouvir simultaneamente a rádio, tudo caia. Aí o jeito era conectar remoto e reiniciar o servidor. E se acabava a luz em casa = no musiquinha feliz no trabalho, snife...

Pois bem, os tempos mudaram com o ádevanço da internetes e hoje em dia é baba criar uma virtual machine com Debian, pagando 5 doletas num Digital Ocean da vida e rodando o shoutcast pra 100 usuários simultâneos com 20 Gb de mp3 em 'n' tipos de bitrates (MUITO OBRIGADA DO FUNDO DO CORAÇÃO ROBERTO OLIVEIRA FUCKING MÁSTER QUE ME ENSINOU O CAMINHO DAS PEDRAS PRA FAZER ISSO! <3).

Só que mesmo com o sucesso do Shoutcast, que tem cerca de 50.000 rádios e picos de 900.000 ouvintes (dados de maio de 2014 via wikipedia), a documentação continua tão boa quanto a de 2004 = um lixo.

Tudo que temos se resume ao fórum do Winamp, que só tem gente boa disposta a ajudar (sqn) e um wiki que nem os desenvolvedores fazem ideia de como funcionam certas opções que tem lá. Sério. Pra ajudar, um dos fóruns que tinham mais informações extra-oficiais e scripts a respeito foi pra fita.

A esperança é que no início desse ano a Nullsoft foi adiquida pela Radionomy. O futuro do Shoutcast e do Winamp ainda é incerto, mas pelo que dá pra acompanhar no fórum é que a tendência é melhorar. Veremos cenas nos próximos capítulos...

Todo esse léro-léro pra explicar o porquê do assunto desse post: o script que eu tinha pra pegar a música que está tocando começou a dar um monte de erros, PHP 5 e tal. Então montei um, bem simples e fácil de alterar / utilizar. Só conectar com o admin do Shoutcast através da sua URL / Porta, pegar o XML gerado e pronto!

O script de exemplo pode ser baixado no anexo do post e aqui ele funcionando.

<?php
	/**
	 * shoutcast_info.php 
	 * Retrieve shoutcast radio information
	 * 
	 * @author Aline Matos - www.behave.com.br | karenkoltraneradio.com
	 * @version 1.0
	 **/
	$data = array();
	$xmlData = array();
	$error = 0;
	
	// Change IP_RADIO_PORT to your <myradioip>:<port> and RADIO_PASS to your <adminpass>  
	define('IP_RADIO_PORT', 'RADIO-IP:PORT');
	define('RADIO_PASS', 'xxxxx');
	
	// Url of admin area in shoutcast 
	$file = 'http://'.IP_RADIO_PORT.'/admin.cgi?pass='.RADIO_PASS.'&mode=viewxml&sid=1';
	
	// Retrieving shoutcast data
	if(!$xml = simplexml_load_file($file))
	{
		// If something goes wrong, keep the error message
		$error = 1;
		$data['message'] = 'Ops, o servidor caiu! Rapidinho consertamos, volte em breve!';
	}

	// If nothing went wrong...
	if($error < 1)
	{
		// Convert xml to array
		$xmlData = xml2array($xml);
		
		// Uncomment to see all information retrieved
		// print('<pre>'); print_r($xmlData); die;

		// Check if server is up
		if($xmlData['STREAMSTATUS'] == 1)
		{
			$data['radiotitle']  = $xmlData['SERVERTITLE']; 	    // Radio Title
			$data['radiourl']  	 = $xmlData['SERVERURL']; 	    	// Radio Url
			$data['radiogenre']  = $xmlData['SERVERGENRE']; 	    // Radio Genre
			$data['nowplaying']  = $xmlData['SONGTITLE']; 	        // Now playing
			$data['nextsong']    = $xmlData['NEXTTITLE']; 	        // Next song in queue
			$data['listeners']   = $xmlData['UNIQUELISTENERS'];     // How many is listening right now
			$data['songhistory'] = $xmlData['SONGHISTORY']['SONG']; // Song history
		}
		else 
		{
			// If server is down, keep the error message
			$error = 1;
			$data['message'] = 'Ops, o servidor caiu! Rapidinho consertamos, volte em breve!';
		}
	}
	
	/**
	 * http://www.php.net/manual/en/ref.simplexml.php#111227
	 * @param unknown $xmlObject
	 * @param unknown $out
	 * @return unknown
	 */
	function xml2array ( $xmlObject, $out = array () )
	{
		foreach ( (array) $xmlObject as $index => $node )
			$out[$index] = ( is_object ( $node ) ||  is_array ( $node ) ) ? xml2array ( $node ) : $node;

		return $out;
	}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<title>Shoutcast Info</title>		
		<link rel="stylesheet" type="text/css" href="http://behave.com.br/assets/includes/uploads/exemplos/shoutcastinfo/style.css" />
	</head>
	<body>
		<div class="geral">
			<div class="box">
				<h1>SHOUTCAST INFO</h1>
				
				<div class="box-total">
					<?php if(isset($data['message']) && $data['message'] != ''){ ?>
						<!-- error message -->
						<?php print_r( $data['message'] ); ?>
					<?php }else{ ?>
						<p><strong>Radio Title: </strong> <?php print $data['radiotitle']; ?></p>
						<p><strong>Radio URL: </strong> <a href="<?php print $data['radiourl']; ?>" target="_blank" title="<?php print $data['radiotitle']; ?>"><?php print $data['radiourl']; ?></a></p>
						<p><strong>Radio Genre: </strong> <?php print $data['radiogenre']; ?></p>
						<p><strong>Now playing: </strong> <?php print $data['nowplaying']; ?></p>
						<p><strong>Next song: </strong> <?php print $data['nextsong']; ?></p>
						<p><strong>Listeners: </strong> <?php print $data['listeners']; ?></p>
						<p><strong>Soong History: </strong></p>
						<?php foreach($data['songhistory'] as $song) { ?>
							<p><small>[<?php print date('d/m/Y G:i:s', $song['PLAYEDAT']); ?>]</small> - <?php print $song['TITLE']; ?></p>
						<?php } ?>
					<?php } ?>
				</div>
			</div>
			<div class="centro">
				<a href="http://www.behave.com.br/" target="_blank" title="Behave">Behave - 2014</a>
			</div>
		</div>
	</body>
</html>

Dúvidas, avisa aí que dentro do possível vamos ajudando...

Falou, até a próxima!

Ps. esse texto contém palavras escritas erradas, verbos mal conjugados e outros pecados do português / inglês de propósito, óká? ;)

Anexos:


shoutcast_info  
1 comentário(s) =)
Tweetar

  1. Muito bom! Estava procurando isso faz tempo! :D


    Responder
    Lucas Galban
    Comentado Sunday
    07 de May de 2017
    às 15:03:37

O que você acha?