¿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. 18 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.-

  13. Por José el Oct 22, 2008 | Responder

    Hola soy de Concordia Entre Ríos Argentina,mirá estoy haciendo un sitio y quiero agregarle la información del clima y me gustaría que sea de The Weather Channel,me podrías explicar en un mail o enviarme el ejemplo de como hacerlo,el tema es que soy bastante novato en esto,por no decir que no se nada. Muchas gracias. José.

  14. Por samtarem el Oct 23, 2008 | Responder

    Hola, Me interesa mucho aprender sobre este asunto, El caso es que soy novato total, y copiando tu codigo para mostrar el tiempo de buquebus pues no consigo mas que errores, me podrias enviar un archivo php preparado para ver donde meto la pata, yo te escribo desde España, y no me sirve el tiempo de esta pagina, pero podria intentar adaptarlo al aemet que es la agencia meteorologica de España
    Un saludo y gracias

  15. Por martin el Oct 26, 2008 | Responder

    Te respondo por mail.

  16. Por andres el Nov 28, 2008 | Responder

    hola martin
    antes que nada felicidades por tu pagina
    yo no entiendo mucho en programacion lo hago es de atrevido y me interesa lo del clima en mi sitio pero en html
    me lo podrias pasar como seria
    desde ya gracias y muchas felicidades en estas fiesta

  17. Por ignacio el Dic 20, 2008 | Responder

    Me podrías pasar el archivo a mi tambien? muchas gracias!

  18. Por martin el Ene 4, 2009 | Responder

    Gente, en el artículo están explicadas las funciones y el código PHP necesario para aplicarlo a cualquier página!

    Por cualquier duda específica estoy a las órdenes para responder.

    Saludos,
    martin.-

  19. Por mozky el Ene 5, 2009 | Responder

    Pa loco fenomenal tu blog, te felicito, seria mucha joda si te pido publiques el ejemplo de nuevo, noy azul en php y me gustaria copiartelo :D.. feliz año y saludos

Postear un comentario