Conexion mediante sockets - Gadget previsión meteo

Conexion mediante sockets - Gadget previsión meteo

Aprende a realizar conexiones socket entre páginas web y ha obtener datos de otras web, para poder tener tu web al dia de manera automática.

En este artículo vamos a aprender a utilizar la conexión por sockets. Para los que no hayan oído hablar de este método decirles que es un modo de conectar con otras páginas web y leer u obtener datos de la misma. En concepto es casi lo mismo que ajax, solo que ajax se ejecuta desde el cliente o el explorador mientras que los sockets de php, en este caso, se ejecutan con el código antes de cargar una página en el explorador.

Con esto, podemos ver que existen muchas de posibilidades para utilizar esta tecnología. Por ejemplo, podemos utilizarla para incluir en nuestras páginas partes de otras sin utilizar frames, o para que podamos formatear y poner los datos a nuestro gusto quedando mucho más integrados en nuestra web.

Nosotros vamos a ilustrar nuestro artículo con un ejemplo que se conecta a la página del INM (instituto Nacional de Meteorología), obtiene la previsión del tiempo y la formatea a nuestro gusto para crear un pequeño gadget que podemos incluir en nuestra web.

Bueno, en primer lugar, las funciones a utilizar:

fsockopen(Servidor, puerto, num. error, error , segundos);

Esta función funciona de manera parecida a mysql_connect(), le pasamos la dirección ip (Servidor), el puerto (suele ser el 80), dos variables para los errores y los segundos de espera para realizar la conexión. Devuelve un identificador de la conexión si esta se ha realizado correctamente si no retorna FALSE.

Dicho esto, el siguiente código se conecta a la web del INM y obtiene el código HTML de la página pasada por url.

 

$Server     =     ’’www.aemet.es’’;
$URL     =     ’’/es/eltiempo/prediccion/localidades?l=46309&p=46’’;
$Server_IP     =     gethostbyname($Server);
 



Definimos las variables de partida, $Server es el dominio de la web a la que queremos conectarnos. $URL es la url de la información que queremos si el dominio y $Server_IP es la dirección IP del servidor, que la obtenemos mediante la función gethostbyname( dominio ).

 

if ($Server==$Server_IP){
$Server_IP      =      ’’193.144.152.138’’;
}
 


Una pequeña comprobación por si falla la función anterior.

 

$sock = @fsockopen($Server_IP, 80, $errno, $errstr, 30);



Nos conectamos mediante Sockets, al servidor guardado en $Server, por el puerto 80, con 30 segundos de espera y con las variables $errno y $errstr que nos guardaran el error en caso de que la conexión falle.

 

if ($sock){

     fwrite($sock, "GET $URL HTTP/1.0\r\n" );
     fwrite($sock, "Host: $Server\r\n" );
     fwrite($sock, "Connection: Close\r\n" );
     fwrite($sock, "\r\n" );

     $headers = "" ;
     while ($str = trim(fgets($sock, 4096))) $headers .= "$str\n" ;

     $body = "" ;
     while (!feof($sock)) $body .= fgets($sock, 4096);

     fclose($sock);

     $body = utf8_decode($body);
}



Una vez nos hemos conectado al servidor, necesitamos que este nos devuelva la información deseada para esto hacemos unas peticiones mediante la función fwrite. Las siguientes líneas se dedican a leer el documento pasado por el servidor como si de un fichero se tratara mediante la función fgets. Y por último, cerramos la conexión y codificamos el contenido de la página que deseábamos a utf-8.

El resultado del script es una variable $body que contiene el código HTML de la pagina que deseamos.
Ahora lo que tenemos que hacer es mediante expresiones regulares sacar los datos limpios de etiquetas HTML, pero esto lo dejamos para el próximo artículo.

Adjuntamos el ejemplo que ilustra la conexión con sockets y también el trabajo con expresiones regulares con php (tema que trataremos la próxima semana).

Descarga los Ejemplos del articulo

COMENTARIOS


[No hay comentarios]


Deja un comentario

Los comentarios no pueden contener ninguna etiqueta xhtml.


Valoración del articulo: 0 1 2 3 4 5


DEBES ESTAR REGISTRADO PARA ENVIAR COMENTARIOS
REGISTRATE!
Google adds Google adds Google adds Google adds