¿Cómo agregar el Estado del Tiempo a tu sitio web?
Abril 11th, 2008
Supongamos 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!!



































11 respuestas a “¿Cómo agregar el Estado del Tiempo a tu sitio web?”
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)
Por Daniel Morales el Abr 11, 2008 | Responder
Muy lindo/útil hack Martin
Como sugerencia, podrías agregarle alguna especie de caché así no hace la petición por cada visitante/click tengas.
Saludos!
-
Daniel
Por martin el Abr 11, 2008 | Responder
viste que esto del clima es muy cambiante, no? (?) jajaj
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
Por Fiore el Abr 14, 2008 | Responder
Muy bueno!
Se puede agregar como widget en un blog de wordpress?
Beso
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.
Por Cknu el Abr 23, 2008 | Responder
Más fácil llevarte un iframe entero.
Por Cknu el Abr 23, 2008 | Responder
Ah, esto me saca el HTML.
“”
A ver ahora…
Por Cknu el Abr 23, 2008 | Responder
Bueno, no se pudo.
PD: Es “LloviZnas” no “LloviSnas”
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.-
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
Por martin el Jun 29, 2008 | Responder
Nico, si querés usá el iframe de mi página, no hay problema!
Saludos,
martin.-