AddThis Social Bookmark Button

Despues del abandono por parte de google al retirar su weather api, muchos quedamos a la deriva,  a su vez y no se bien si tengan relacion pero the weather channel tambien se fue del dominio publico y ahora tienes que pagar.

Busque muchas opciones como siempre y la solucion no se veia llegar puesto que quienes no son de paga, te limitan a X o Y consultas al dia de su api, otras son muy engorrosas de entender y algunas mas tienen codigo [CDATA] que puff... nada mas no le encuentro por donde...

Total que pues, el dia de hoy vamos a trabajar con el api de yahoo, el ultimo que queda vivo pero que su api es un tanto engorrosa, pero ya quedo la solucion y se las explico a continuacion:

Vamos por pasos y conforme avanzemos espero poder explicarme, los fundamentos de esta nota vienen de varias paginas en las que busque, dejo las referencias para que vena los articulos originales, los cuales no tienen que ver totalmente con esta programacion, pero si me dieron la idea y el procedimiento a seguir, asi que pues, agradescamos a:

 

Foros del web ( entendimiento del xml )

http://www.forosdelweb.com/f14/analizar-xml-yahoo-weather-651979/

Dr. Danger (ubicacion de los elementos del weather)

http://vida.danguer.com/2008/09/27/ejemplo-de-api-de-yahoo-weather/

Logan bailey ( la lectura del objeto XML )

http://stackoverflow.com/users/436548/logan-bailey

Y porsupuesto a Yahoo quien nos provee del xml para el weather y forecast

http://developer.yahoo.com/weather/

Dadas las referencias, entonces procedamos :::

 La opcion w y c las sacan de yahoo weather, estos dos son  meramente para obtener la clave de tu ciudad y el modo en que quieres ver los grados, C para Centigrados  F para Fahrenheit, mi ejemplo es para la comunidad chalca, pero pueden buscar su ciudad utilizando el api de yahoo.

     #Ponemos la direccion a buscar
     $feed_url = "http://weather.yahooapis.com/forecastrss?w=115566&u=c";
    
    #recuperamos el contenido del xml 
    $xmlString = file_get_contents($feed_url);
     
     #con una busqueda simple, cambiamos la variable de yahoo por una personal, esto para que nos aparezca como parte de un array y no un dato del xml
     $xmlString = str_replace('yweather:condition','condition',$xmlString);

     #buscamos y reemplazamos tambien el forecast para obtener la maxima y minima del dia, el el forecast dia 0
     $xmlString = str_replace('yweather:forecast','forecast',$xmlString);    
     
     #ya con los cambios instanciamos un nuevo elemento xml
     $xml = new SimpleXMLElement($xmlString);
     
     #navegamos hasta los contenidos para manipular
     $items = $xml->xpath('channel/item');
    
     #como ya cambiamos arriba las variables de yahoo por elementos de xml (solo nombres) podemos ir a por ellos para instanciarlos
     $temp = $items[0]->condition;
     $frss = $items[0]->forecast[0];
     
     #los anteriores vienen en un array que no se puede acceder como objeto simple, llegan como [@attributes], los reasignamos para una facil lectura
     $attr = $temp->attributes();
     $fore = $frss->attributes();

     #al final, solo ponemos variables personalizadas para obtener los datos que necesitamos manipular
     $clima_txt = $attr->text;
     $clima_tmp = $attr->temp;
     $clima_cod = $attr->code;
     $clima_max = $fore->high;
     $clima_min = $fore->low;
     $clima_day = $fore->day;
     
     echo "<img src=\"http://l.yimg.com/us.yimg.com/i/us/we/52/". $clima_cod .".gif\"> Hoy {$clima_day} temperatura actual de {$clima_tmp} &deg;C, max {$clima_max} &deg; / min {$clima_min} &deg; ";
 

El ejemplo en vivo es el siguiente:

 

 

Tambien dentro de las opciones que podemos cambiar para utilizar los elementos tambien encontramos:

geo:lat
geo:long
yweather:location
yweather:units
yweather:wind
yweather:astronomy
yweather:atmosphere
 
Salu2 y suerte
 

 

Leave your comments

0
  • No comments found