Extraer info de servidor SHOUTcast con un script php

Se pretende crear un sitio programado en php que extraiga informacion de un servidor SHOUTcast cualquiera, para poder con esto manipular libremente estos datos a gusto del usuario e implementarlo facilmente en sitios webs o incluso en un bot irc.

¿Que es SHOUTcast?

SHOUTcast es una tecnología de streaming auditiva freeware, desarrollada por Nullsoft. SHOUTcast utiliza la codificación MP3 o AAC de contenido auditivo y http (Hyper Text Transfer Protocol) como protocolo (también se puede utilizar multicast) para transmitir radio por internet.

Fuente: wikipedia.

En palabras simples, SHOUTcast es un sistema muy utilizado y conocido para transmitir radios via internet, de echo la gran mayoria de radios que pueden encontrar por ahi estan montadas con ese sistema.

¿Que es php?

Php es un muy conocido, amigable y potente lenguaje orientado a la creación de sitios webs dinámicos.

¿Que tiene de especial este script?

No podemos acceder via php con una funcion como fopen() debido a que estos sitios utilizan un metodo llamado GET, un forma seria utilizando curl, pero prefiero hacer algo mas facil y entendible, utilizaré sockets.

SHOUTcast nos proporciona un sitio en donde nos muestra la información que manipularemos de una forma muy ordenada, pero esta información se basa a un estilo y forma predefinida, la manipulacion de esta informacion puede ser compleja, pero lo que no muchos saben, SHOUTcast también proporciona un sitio en donde solo muestran numeros y letras con toda esta información mostrada en base a codigos, esta información es mostrada en la siguiente syntax:

Numero1,Numero2,Numero3,Numero4,Numero5.Numero6,Tema

Por ejemplo:

6,1,16,50,6,64,daddy yankee – llamada de emergencia

Cada uno de estos numeros significa algo, el detalle sobre que significa cada cosa esta descrito a continuación:

Numero1: Corresponde al numero de usuarios que en ese momento se encuentran escuchando la radio.

Numero2: Estado de la radio si es “1″ significa que la radio esta funcionando, caso contrario seria que este valor sea igual a “0″.

Numero3: Es el numero de usuarios máximo que han estado escuchando la radio en el servidor

Numero4: Numero máximo de conexiones posibles al servidor

Numero5: Conexiones activas al servidor.

Numero6: Calidad del audio, valor expresado en Kb/seg

Tema: Artista y nombre del tema que se está reproduciendo en ese instante.

La finalidad seria dejar esta información en las variables $numero1 , $numero2 , $numero3 , $numero4 , $numero5 , $numero6 y $tema respectivamente.

El script que creé con esta finalidad, funcionando es el siguiente:

[php]

// Variables a editar para acomodarlas al servidor que deceen

$servidor=”www.servidor_de_ejemplo.com”;
$puerto=9090; // este puerto fue el utilizado en mi caso
// en mi caso 7.html es la pagina que nos muestra la informacion que deceamos definida en la siguiente variable
$pagina=”7.html”;

// Nos conectamos al servidor

$da = fsockopen($servidor,$puerto,$errno,$errstr,30);

// Mostramos los errores en la conexion si es que existen

if (!$da) {
echo “$errstr ($errno)
n”;
}

// Si la conexion fue un exito continuamos

else {

// Enviamos la cabecera y solicitamos ver la pagina

$salida = “GET /”.$pagina.” HTTP/1.0rnUser-Agent: Mozillarn”;
$salida .= “Host: “.$servidor.”:”.$puerto.”rn”;
$salida .= “Connection: Closernrn”;
fwrite($da, $salida);

// Recibimos la respuesta del servidor y almacenamos los datos en la variable $bufer

$bufer=”";
while (!feof($da)) {
$bufer=$bufer.fgets($da, 128);
}
fclose($da);

// Extraemos lo que necesitamos

$dato1=explode(“”,$bufer);
$dato2=explode(“”,$dato1[1]);
$caracteristicas=explode(“,”,$dato2[0]);

// Guardamos la informacion en nuestras variables

$numero1.$caracteristicas[0];
$numero2=$caracteristicas[1];
$numero3=$caracteristicas[2];
$numero4=$caracteristicas[3];
$numero5=$caracteristicas[4];
$numero6=$caracteristicas[5];
$tema=$caracteristicas[6];

// Listo ya podemos manipular nuestras variables

}

?>
[/php]

10 thoughts on “Extraer info de servidor SHOUTcast con un script php

  1. TiaN

    GENIAL! jajajaj aunque el que porté yo nose si es idea mia pero lo encuentro más rapido…
    pero en sí me gusta más tu codigo…
    cuidate wn un abrazo!

    Reply
  2. barckley

    muy bien el tuto , pero una pregunta ,,hay alguna variable para obtener el tiempo de duracion de la actual cancion,, por favor respondeme eso , si puedes a mi correo que solo me falta eso y tengo todo listo

    Reply
  3. Iván Alexis

    @barckley, en la pagina que trabajé no está esa variable, pero busca una pagina que te muestre la informacion que solicites y por el mismo metodo se puede extraer esa informacion.

    @Franklin, lo mismo es para ti, busca un archivo que provee la imagen y yo te ayudo a extraer el codigo.

    Reply
  4. JhonGdl

    Que tal, oye tengo un error en una función de PHP que no conozco y no se como repararla, el error es el siguiente.

    Warning: explode() [function.explode]: Empty delimiter in C:xampphtdocsradioshoutcast.php on line 42

    Warning: explode() [function.explode]: Empty delimiter in C:xampphtdocsradioshoutcast.php on line 43

    Reply
  5. Gabito

    por lo que veo solo el lenguage agrega a las variables los valores, tu ves como ocupas esas variables

    Reply
  6. DsC

    Hola! Tengo un código muy parecido al tuyo, con el leo el 7.html, pero “Stream Title” no esta en 7.html, alguna forma de leerlo? si la sabes te agradeseria que la comentes :D

    Reply
  7. Alejandro

    tengo una grandisima pregunta, en tu php tienes declarado y especificas que en “7.html” es la pagina que utilizaste para publicar dichos datos del SHOUTcast, pero en ese “7.html” que va dentro, osea ¿cual es el codigo que va dentro de ese fichero para que publique la informacion?, por favor si me podrias ayudar te estaria muy agradecido

    Reply
  8. Mario

    Una pregunta. Yo uso Hardata Dinesat Radio 8 (Un reproductor automatizado para radios) Sin embargo mi servidor de stream es en base a shoutcast. Me funcionaría ese script utilizando el reproductor antes mencionado. Gracias.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>