Ejemplo de API de Yahoo/Weather.com

La pagina de Yahoo developers tiene el API de Weather.com (que compro hace tiempo), Weather.com ya tenia un xml que ha simplificado Yahoo.com

Esta API nos permite obtener informacion del clima de practicamente cualquier lugar del mundo y sin duda es muy utilizada para varios widgets dentro de páginas o como widgets de escritorio.

Básicamente para usar esta API se hace una llamada a la siguiente dirección:
http://weather.yahooapis.com/forecastrss?p=CODIGO&u=c

Donde código puede ser un Código Postal de Estados Unidos, o un ID de una ciudad en el mundo, el API de yahoo developers, dice brevemente que para conseguir este ID se necesita ir a la página de Yahoo Weather y copiar de la URL el código de la ciudad.

Esto es realmente muy malo ya que lo que se busca es optimizar, pero ahi entra el API viejo de Weather.com, donde podemos enviarle una cadena con la ciudad a buscar y nos regresará diversos resultados que pueden concordar con el código de la ciudad y su nombre “legible”, la url es: 
http://xoap.weather.com/weather/search/search?where=NOMBRE_CIUDAD

Por ejemplo para buscar la ciudad de Puebla, Mexico haremos:
http://xoap.weather.com/weather/search/search?where=Puebla

El resultado nos dará como resultado:

<!-- This document is intended only for use by authorized licensees of The  -->
<!-- Weather Channel. Unauthorized use is prohibited.  Copyright 1995-2008, -->
<!-- The Weather Channel Interactive, Inc.  All Rights Reserved.            -->
<search ver="2.0">
  <loc id="MXPA0070" type="1">Puebla, Mexico</loc>
</search>

 

Que vemos que el elemento loc provee el ID de la ciudad y el nombre legible; ahora si podemos contruir la nueva URL que será:

http://weather.yahooapis.com/forecastrss?p=MXPA0070&u=c

El resultado es un documento RSS con un nombre de espacio (namespace) de yweather, la página contiene mucha información, mucha de ella redundante, pero lo que más nos importa es lo que tiene ese nombre de espacios como:

<yweather:condition  text="Partly Cloudy"  code="30"  temp="19"  date="Sat, 27 Sep 2008 5:49 pm CDT" />
<yweather:location city="Puebla" region=""   country="MX"/>
<yweather:units temperature="C" distance="km" pressure="mb" speed="kph"/>
<yweather:wind chill="19"   direction="150"   speed="11.27" />
<yweather:atmosphere humidity="60"  visibility="1607.69"  pressure="0"  rising="0" />
<yweather:astronomy sunrise="7:23 am"   sunset="7:24 pm"/>

El primero es lo más importante (condition), nos mostrará la información del clima, el código de estado (code), la temperatura (temp) y la fecha de cuando se obtuvo la información.
El segundo (location) nos dice información del lugar.
El tercero (units) nos dice en qué unidades está expresada la información, como hemos solicitado en formato de grados Centigrados el sistema muestra la información en sistema métrico.
El cuarto (wind) nos da información del viento.
El quinto (atmosphere) nos da información del medio ambiente en cuanto a humedad, visibilidad, etc
El último (astronomy) nos da una breve información de cuando el sol aparece y se oculta en el horizonte.

La página también incluye una liga a la imagen del estado, yo he decidido utilizar las que provee Weather.com

El nombre del estado no lo usaremos ya que está en inglés, por lo que hice una traducción del estado al nombre correspondiente, los códigos se pueden ver aqui:
http://developer.yahoo.com/weather/#codes

 

Aqui tenemos un ejemplo ensamblado en PHP y Javascript:
http://demo.livesourcing.com/blog_vida/articulos/DanguerArticle_Clima/

 

Básicamente tiene tres partes, la primera nos permite introducir un nombre y obtener el ID de los lugares, obviamente está en ingles por lo que se tienen que hacer busquedas como “Mexico City” para encontrar la información del clima del D.F.

La segunda parte nos permite seleccionar de las distintas opciones de los lugares el que queramos ver su clima, después de seleccionarlo le damos click a “Obtener clima” y obtendremos el clima ;)

El sistema muestra solamente el Estado (en español), la temperatura y la fecha con la imagen correspondiente del estado; en el ejemplo no obtuve información extra como información del viento o del medio ambiente, pero en base al ejemplo se puede extender fácilmente.

 

Descargar el código fuente del ejemplo: 
http://demo.livesourcing.com/blog_vida/articulos/DanguerArticle_Clima.tar.gz

 

Más información:

 

Temas similares

  • Carolina

    Holaa muy bueno el ejemplo solo tengo una duda que versión de PHP están utilizando y además si tengo que utilizar alguna librería específica en php extra gracias.

  • http://www.danguer.com admin

    Hola, estoy utilizando la versión 5.2 utilizando la librería DOM para leer XML (viene por defecto en las instalaciones de PHP, excepto en CentOS por lo que puedes leer otro post que tengo de como compilarlo como extension ;) )

    No tiene librerías extra, pero si lo quieres utilizar en php4 necesitas cambiar la lectura del archivo XML de DOM a DOMXML, quitar el file_get_contents por posiblemente la llamada a file() y buscar una librería que convierta las variables PHP a JSON, aunque el ejemplo es muy básico así que lo puedes mandar directamente con un print.

    Saludos,

  • Miguel

    Estoy creando una página. Soy novato en PHP, pero esta explicación me parece genial. Sin embargo, no sé cómo hago para que aparezca el tiempo en la página. Donde pongo el código, cómo lo llamo. Realmente, la explicación que ofreces es genial, pero si pudieras dar(nos) un poco más de info para los que recién empezamos sería excelente y estaría muy agradecido. Saludos.

  • http://www.tel-ar.com.ar Martin Carmona

    Hola no andan los vinculos con la descargas, por lo demas muy bueno

  • http://www.danguer.com admin

    Hola Martin, gracias por el aviso, ya han sido corregidos, es que me mudé de servidor y se me olvidó subir estos ejemplos =)

    Miguel, para que funcione “directamente” necesitas primero haber ubicado tu localidad, después puedes copiar simplemente el código que viene en ajax.php, en el bloque que comienza con:
    } else if ($op == ‘clima’) {

    }

    Básicamente ahi tiene una traducción de los estados y llama al rss de yahoo, saca los datos básicos:
    $url = “http://weather.yahooapis.com/forecastrss?p={$localidad_i
    d}&u=c”;

    $namespace_yweather = ‘http://xml.weather.yahoo.com/ns/rss/1.0';

    $xml_string = file_get_contents($url);
    $xml = new DOMDocument();
    $xml->loadXML($xml_string);

    $clima = $xml->getElementsByTagNameNS($namespace_yweather, ‘condition’);
    $clima = $clima->item(0);

    $resultado['clima']['codigo'] = $clima->getAttribute(‘code’);
    $resultado['clima']['estado'] = $mensajes[$resultado['clima']['codigo']];
    $resultado['clima']['temperatura'] = $clima->getAttribute(‘temp’);
    $resultado['clima']['fecha_unix'] = strtotime($clima->getAttribute(‘date’));
    $resultado['clima']['fecha'] = date(‘d/m/Y h:i:s’, $resultado['clima']['fecha_unix']);

    Con eso ya tienes tanto la temperatura como el código y el estado (el código es utilizado para mostrar la imagen correspondiente), ya con esto lo puedes mandar a imprimir directamente en tu página.

    Saludos,

  • http://www.tel-ar.com.ar Martin Carmona

    excelente script, cuando lo tenga en uso, les mano la dire para que vean, pienso hacer una modificacion, ya les comentare

    saludos

  • Martin desde argentina

    Muy bueno, la verdad que me puse a investigar sobre este tema y esta es la solucion mas practica que he encontrado (por supuesto todavia faltaria cachear los datos y eso si se desea), sino hay que luchar bastante con el phpweather, para integrarlo a un sitio. Excelente

  • Luis Miguel

    Ante todo ¡gracias por compartir el script con nosotros!… pero tengo un problema (o varios). Después de publicarlo en una página de prueba de mi sitio no parece funcionar correctamente:

    http://doctorfalken.com/tiempo/danguer/

    No encuentro donde puede estar el fallo…

  • http://www.danguer.com admin

    Hola Luis Miguel, el problem que marca es del AJAX que no puede leer datos externos, aqui puedes leer más:
    http://mx.php.net/manual/es/features.remote-files.php

    La única solución es utilizar (si es que tienes la extensión instalada) curl: http://mx.php.net/curl

    Reemplaza la parte de file_get_contents($url); por la parte de curl y debería funcionar

    Saludos,

  • Gorka

    Hola, estoy interesado en hacer una aplicación en JAVA que permita hacer la predicción del tiempo utilizando las APIS de Yahoo antes comentadas.
    Estoy intentando hacer WebServices que utilicen los métodos de las APIS de Yahoo. La pregunta que tengo es ¿ cuál sería la url del servidor en el que están contenidos los Web Services?
    Muchas gracias

  • ricardo

    tengo una duda
    tengo que hacer un programa en lenguaje C# que de el clima
    alguno me puede dar una idea de como hacerlo
    por que simple mento no puedo Xd
    ya intente con datos de rss y trate de usar el api de Weather.com pero nada mas no puedo

  • http://www.gds-sv.com mariano

    Me podrias dar un ejemplo del uso de curl…he tratado de hacerlo, y me recupera las ciudades pero no despliega la informacion de dichas ciudades
    gracias

  • http://www.gds-sv.com mariano

    Me podrias dar un ejemplo del uso de curl…he tratado de hacerlo, y me recupera las ciudades pero no despliega la informacion de dichas ciudades

  • Wicho

    Ijole es lo que estaba buscando, muy bueeeeen trabajo, Saludos desde Chihuahua Mexico!!!

  • Lucas Randazzo

    Muy bueno loco. Te pasaste.

  • http://www.facebook.com/profile.php?id=676557705 Matute Román

    Hola, quiero utilizar el código “directamente”, o sea, sin la consulta y el Javascript pero no puedo implementarlo. Puedes poner un ejemplo?

    Gracias!

  • jonathan.frez

    I recently develop a weather page with geolocalitation (HTML5), try this api:http://www.theweathernow.net/api/it uses the google weather api.

  • Ricardo Stevez

    Traté de hacerlo pero no me aparece como debe ser. Puedes subir un file que me muestre  directamente el Country: Panama (WOEID: 159386E) para llamarlo ya sea a través de un iframe o url directo. Saludos y en espera de tu pronto apoyo ya que para tí no debe ser dificil (supongo). 

  • Aferdez

    Excelente!!! Me podrias indicar como obtner las imagenes desde  Weather.com

  • http://www.facebook.com/antonioblancooliva Antonio Blanco Oliva

    Simplemente espectacular el artículo !!!! Muy buen trabajo.

  • Bill

    Hola Daniel, excelente ejemplo!, tengo una consulta teórica ¿xq es necesario el archivo php, se podria llamar a los atributos del xml de yahoo weather directamente con un javascript? … por ejemplo incovar a http://weather.yahooapis.com/forecastrss?p=FRXX0076&u=c , leer los atributos que requiera con JS e imprimirlo en el html … de antemano grxs por tu respuesta

  • suly

    lo corri asi como esta pero le doy al boton obtener ciudad y no hace nada, no muestra nada.. m podrias decir cual es el error?