¿Cómo agregar el Estado del Tiempo a tu sitio web?

Abril 11th, 2008

tiempoSupongamos que queremos mostrar en nuestra página información sobre el Estado del Tiempo. Evidentemente nosotros no vamos a estar actualizando a cada instante los valores. Necesitamos sacarla de algún lugar donde eso suceda automáticamente. Hay distintas formas: utilizar algún sitio que nos permita insertar su código (The Weather Channel por ejemplo), utilizar un iframe o lo que les voy a contar a continuación.

PHP nos permite leer archivos de texto de forma local (en la misma computadora donde se ejecuta el script) y de forma remota (cualquier sitio web por ejemplo). La técnica es la siguiente: en cada ejecución del script leemos el HTML de alguna página, de allí extraemos la información que necesitamos y la presentamos como queremos.

La ventaja de esto muy clara: podemos elegir que información mostrar, integrarla a nuestro diseño y no tendremos que soportar publicidad de ningún tipo.

El ejemplo será con el Estado del Tiempo y la víctima de nuestro “robo” Buquebus. Podría aplicarse la misma idea para casi cualquier sitio e información. Otro ejemplo que se me ocurre de similares características es la cotización de la moneda.

Hay una cuestión básica en esto y es que cada página es diferente. Eso significa que no hay un algoritmo genérico: debemos estudiar a la víctima (cómo presenta la información, dónde está esa información y cómo varía en cada actualización del sitio) y en función de eso diseñar el código.

En este caso, Buquebus tiene una marquecina en la parte superior central donde corre el Estado del Tiempo de Buenos Aires, Colonia, Montevideo y Punta del Este. Si analizamos el código vemos que:

  • Las ciudades se presentan siempre en el mismo órden: 1. BsAs, 2. Col, 3. Montevideo y 4. Punta.
  • La información de cada ciudad también sigue un órden: 1. imágen, 2. temperatura y 3. descripción.
  • Las imágenes están en la carpeta clima_up y la carpeta clima_up aparece en el código solamente cuando hay una imágen del tiempo. Ergo, la carpeta clima_up aparece 4 y solo 4 veces en el código: una vez por cada ciudad.

Concluímos que si bien el contenido de la página es muy dinámico, hay algunas referencias fijas. De esas referencias nos vamos a valer para ir directamente a donde precisamos, siendo lo suficientemente flexibles para recabar la información sin saber su largo.

Ahora vamos a ensuciarnos las manos con el código:

$nombre_archivo = “http://www.buquebus.com/cache/HomeARG.html”;
$archivo = fopen($nombre_archivo, rb);
$texto_archivo = stream_get_contents($archivo);

Lo primero es la dirección dónde está el archivo de texto (html en este caso).
Lo segundo es la función que nos abre ese archivo.
La tercera variable, $texto_archivo, es un string (una cadena de caracteres) con todo el código html de la página. De esa cadena justamente vamos a sacar lo que precisamos.

Ahora buscamos la posición de la primera aparición de la cadena clima_up. Sabemos que la información a continuación corresponde a Buenos Aires -por lo que decía del órden anteriormente-, que el próximo caracter será un “/” y que en los siguientes vendrá el nombre de la imágen. Ese nombre de la imágen puede tener cualquier largo pero cuando lleguemos al caracter ” (comillas) se terminó. Esto se traduce en lo siguiente:

$bueno_aires_imagen = “”;
$buenos_aires_numero = strpos($texto_archivo, “clima_up”);
$buenos_aires_numero += 8; //adelantamos 8 posiciones, correspondientes a “c l i m a _ u p /” para llegar a donde comienza el nombre del archivo.
do {
$buenos_aires_numero += 1;
$bueno_aires_imagen .= $texto_archivo[$buenos_aires_numero];
}
while($texto_archivo[$buenos_aires_numero + 1] != \“); //Vamos agregando a la variable con el nombre los caracteres siguientes hasta que lleguemos al caracter comillas.

$buenos_aires_imagen contendría algo así como “nublado.gif”.

Para la temperatura, siguiente dato, hacemos algo similar:

$buenos_aires_numero += 8; //Adelantamos los caracteres ‘ > & n b s p ; ‘ y quedamos prontos para recibir la temperatura.
$buenos_aires_temperatura = “”;
do {
$buenos_aires_numero += 1;
$buenos_aires_temperatura .= $texto_archivo[$buenos_aires_numero];
}
while($texto_archivo[$buenos_aires_numero + 1] != “&”);

$buenos_aires_temperatura es otro string con los grados.

La descripción de la imágen (”Mayormente Nublado”, “Soleado”, “Nublado”, etc.) la armamos con una pequeña función dónde ingresamos el nombre del archivo y nos devuelve el texto. Esto se puede hacer porque a cada nombre de archivo corresponde una y una sola descricpión.

Hasta aquí tendríamos Buenos Aires. Para conseguir el resto de las ciudades aplicamos el mismo proceso con la diferencia que al buscar la carpeta clima_up fijamos un número de caracter a partir del cuál hacer la búsqueda. Ese número de caracter será cualquiera inmediatamente posterior al de Buenos Aires. En mi caso puse $buenos_aires_numero que ya estaba suficientemente adelantado. Me quedó así: $colonia_numero = strpos($texto_archivo, “clima_up”, $buenos_aires_numero);

Cómo presentan la información es problema de ustedes ;) No olviden mis tutoriales anteriores sobre PHP y HTML (aquí y aquí).

Un ejemplito de lo que hice yo: http://martin.com.uy/sitio/tiempo/tiempo.php (las descripciones no están completas un poco por vago y otro poco porque no las ví en el sitio de Buquebus).

A las órdenes por consultas.

PD: Amigos de Buquebus: no se me ofendan y no cambien el código de la página. Gracias. jajaja!!

  1. 11 respuestas a “¿Cómo agregar el Estado del Tiempo a tu sitio web?”

  2. Por Tongo el Abr 11, 2008 | Responder

    Uhhh los amigos de buquebus deben estar re contentos con esto!!!
    Jajajaja y ni te cuento los programadores…

    Lastima que de php no se nada, pero lo tengo pensado estudiar para algun futuro (espero no muy lejano)

  3. Por Daniel Morales el Abr 11, 2008 | Responder

    Muy lindo/útil hack Martin :D
    Como sugerencia, podrías agregarle alguna especie de caché así no hace la petición por cada visitante/click tengas.

    Saludos!

    -
    Daniel

  4. Por martin el Abr 11, 2008 | Responder

    viste que esto del clima es muy cambiante, no? (?) jajaj :lol:

    Igual es bastante light de recursos. Lo que capaz que le agrego después (muy después) es una coordinación con la hora; es medio loco que sean las 00:30 y en Colonia haya terrible sol jajaja

  5. Por Fiore el Abr 14, 2008 | Responder

    Muy bueno!
    Se puede agregar como widget en un blog de wordpress?

    Beso

  6. Por martin el Abr 14, 2008 | Responder

    Sí, no hay problema Fiore. Para usarlo como Widget en Wordpress tenes que agregar un Widget de texto e insertar el código HTML que te voy a pasar (te lo paso por mail porque si lo pongo acá no se va a ver). Si alguien más lo quiere, que me lo pida.

  7. Por Cknu el Abr 23, 2008 | Responder

    Más fácil llevarte un iframe entero. ;)

  8. Por Cknu el Abr 23, 2008 | Responder

    Ah, esto me saca el HTML. :D
    “”

    A ver ahora…

  9. Por Cknu el Abr 23, 2008 | Responder

    Bueno, no se pudo.

    PD: Es “LloviZnas” no “LloviSnas”

  10. Por martin el Abr 23, 2008 | Responder

    Creo que lo copié textual.. jaja después lo acomodo, inclusive hay otros que no los copié.

    Lo del iframe es una posibilidad -los comentarios aquí no lo aceptan jaja-, el problema es que estás atado en cuanto a la personalización. Lo bueno de hacer un script es que vos después decidís como presentar la información.

    Saludos,
    martin.-

  11. Por nico el Jun 28, 2008 | Responder

    martin muy buna el blog.
    me podrias mandar el codigo por mail, es q no se mucho de php y voy a tratar copiar y pegar el mismo
    graciasssssss

  12. Por martin el Jun 29, 2008 | Responder

    Nico, si querés usá el iframe de mi página, no hay problema!

    Saludos,
    martin.-

Postear un comentario