asd

26

Nov

API Yahoo weather, optener datos del clima en flash AS3

Publicado por: LeoBaraldi

Yahoo API cuenta entre tantas herramientas para desarrolladores una extensa e interesante API en ActionScrip 3 para poder tener los datos climáticos en nuestra web o cualquier aplicación flash, flex o AIR.

La API cuenta con una extensa documentación, excelente estructura y muy fácil de utilizar. Aquí pueden consultar la documentación y también pueden descargar la api completa!

Como todo está en ingles me tome el tiempo de traducir los métodos con mi breve o corto entendimiento del ingles. Cualquiera que quiera hacerle una corrección solo envíeme un email :)

METODOS:

Actionscript:
  1. ///////////datos de geo localización
  2. //event.data.location.city -- nombre de la ciudad
  3. //event.data.location.country -- país
  4. //event.data.location.latitude -- latitud
  5. //event.data.location.longitude -- longitud
  6. ///////////datos generales
  7. //event.data.language -- lenguaje del reporte
  8. //event.data.date -- Mon Oct 13 23:00:00 GMT-0300 2008
  9. //event.data.timeToLive -- tiempo de actualización
  10. //event.data.units.distance -- unidad de distancia
  11. //event.data.units.speed -- unidad de velocidad
  12. //event.data.units.pressure -- unidad de presión
  13. //event.data.units.temperature -- unidad de temperatura
  14. ///////////datos actuales
  15. //event.data.current.temperature -- indica la temperatura actual
  16. //event.data.current.description -- descripción del tiempo
  17. //event.data.current.imageURL -- url de la imagen
  18. //event.data.current.code -- estado del tiempo en referencia a su código
  19. //////////datos del viento
  20. //event.data.current.wind.chill -- temperatura del viento
  21. //event.data.current.wind.direction -- dirección del viento en grados según el norte
  22. //event.data.current.wind.speed -- velocidad según event.data.units.speed
  23. //////////datos asmofericos
  24. //event.data.current.atmosphere.humidity -- humedad
  25. //event.data.current.atmosphere.pressure -- presión
  26. //event.data.current.atmosphere.rising -- diferencia de presión
  27. //event.data.current.atmosphere.visibility -- visibilidad en event.data.units.distance
  28. //////////datos astronomicos
  29. //event.data.current.astronomy.sunrise -- fecha, hora amanecer
  30. //event.data.current.astronomy.sunset -- fecha, hora atardecer
  31. //////////pronostico extendido
  32. //event.data.forecast -- devielve un array con el objeto ForecastConditions
  33. //event.data.forecast[x].code -- estado del tiempo en referencia a su código
  34. //event.data.forecast[x].date -- fecha completa
  35. //event.data.forecast[x].high -- temperatura max
  36. //event.data.forecast[x].low -- temperatura minima
  37. //event.data.forecast[x].imageURL -- url de la imagen
  38. //event.data.forecast[x].description -- descripción

El ejemplo que les prepare es algo simple pero un punto inicial para ir jugando con esto!, simplemente cuenta de un combo con una lista de localidades, y la carga de datos cada vez que cambiamos de localidad. Utilice la posibilidad de recibir el código del clima para poder usar iconos personalizados ya que los que usa Yahoo son medios feuchos. Para el ejemplo también tuve que hacer una traducción de los estados del tiempo ya que esta API solo está en ingles. La traducción esta en un XML así que la pueden mejorar, aquí pueden consultar los códigos de clima y con respecto al codigo de cada localidad lo que hice fue visitar su pagina, localizar la localidad utilizando el buscador y copiar el codigo de la url del navegador.
ejemplo: ...www.weather.com/outlook/travel/businesstraveler/local/ARCA0023?from=recentsearch

En los archivos para descargar incluye la api, documentación y ejemplos varios aparte del mío.

Actionscript:
  1. //importamos las clases necesarias
  2. import com.yahoo.webapis.weather.WeatherService;
  3. import com.yahoo.webapis.weather.Weather;
  4. import com.yahoo.webapis.weather.events.WeatherErrorEvent;
  5. import com.yahoo.webapis.weather.events.WeatherResultEvent;
  6. import fl.data.DataProvider;
  7. //cramos el servicio
  8. var ws:WeatherService = new WeatherService();
  9. //escuchador cuando recivimos los datos
  10. ws.addEventListener(WeatherResultEvent.WEATHER_LOADED, resultTiempo);
  11. //si hay un error al recibir los datos
  12. function xmlError(event:WeatherErrorEvent):void {
  13. //weather_txt.text = event.data.toString();
  14. }
  15. //error al leer el xml
  16. ws.addEventListener(WeatherErrorEvent.XML_LOADING, xmlError);
  17. //
  18. //ACTION PARA ESTE EJEMPLO
  19. //
  20. var periodo:String;
  21. var codigoEstado:int;
  22. var miLoader:Loader = new Loader();
  23. var miReq:URLRequest=new URLRequest();
  24. var mes:Array;
  25. var dia:Array;
  26. var contImgGde:Sprite = new Sprite();
  27. //estados del tiempo en español
  28. var xmlData:XML;
  29. var xmlLoader:URLLoader = new URLLoader();
  30. var urlRequest:URLRequest = new URLRequest("clima-es.xml");
  31. xmlLoader.load(urlRequest);
  32. xmlLoader.addEventListener(Event.COMPLETE, this.iniciarXML);
  33. var xmlList:XMLList = new XMLList();
  34. function iniciarXML(e:Event):void {
  35. xmlData = new XML(xmlLoader.data);
  36. xmlList = XMLList(xmlData.clima);
  37. init();
  38. }
  39. //datos para el combo
  40. var ciudades:Array = new Array({label:"Córdoba",data:"ARCA0023"},{label:"Buenos Aires",data:"ARBA0009"},{label:"Rio Cuarto",data:"ARCA0073"},{label:"Villa Carlos Paz",data:"ARCA0108"},{label:"Ushuaia",data:"ARTF0105"});
  41. var dp:DataProvider = new DataProvider(ciudades);
  42. cb.dataProvider=dp;
  43. cb.addEventListener(Event.CHANGE, cbSelect);
  44. function cbSelect(o:Event):void {
  45. ws.getWeather(cb.selectedItem.data, "metric");
  46. }
  47.  
  48. function init() {
  49. mes = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  50. dia = new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");
  51. time_txt.autoSize = TextFieldAutoSize.LEFT ;
  52. contImgGde.y = time_txt.y+15;
  53.  
  54. var defaud:Object = new Object();
  55. defaud = cb.getItemAt(0);
  56.  
  57. ws.getWeather(defaud.data, "metric");
  58. formatFecha();
  59. }
  60.  
  61. function formatFecha() {
  62. var date:Date = new Date();
  63. var minutos:String;
  64. if (date.getMinutes()<10) {
  65. minutos = "0"+String(date.getMinutes());
  66. } else {
  67. minutos = String(date.getMinutes());
  68. }
  69. if (date.getHours()<12) {
  70. periodo ="am";
  71. } else {
  72. periodo ="pm";
  73. }
  74. time_txt.text = dia[date.day]+" "+String(date.getDate() +" de "+mes[date.getMonth()]+" - "+date.getHours()+":"+minutos+" "+periodo);
  75.  
  76. var contDay:int = date.day;
  77. switch (date.day) {
  78. case 5 :
  79. estado1_txt.text = dia[6];
  80. estado2_txt.text = dia[0];
  81. break;
  82. case 6 :
  83. estado1_txt.text = dia[0];
  84. estado2_txt.text = dia[1];
  85. break;
  86. default :
  87. estado1_txt.text = dia[date.day+1];
  88. estado2_txt.text = dia[date.day+2];
  89. }
  90. }
  91.  
  92. function resultTiempo(event:WeatherResultEvent):void {
  93. codigoEstado = event.data.current.code;
  94. if (codigoEstado==0) {
  95. codigoEstado = 3200;
  96. temperatura_txt.text = "";
  97. estado_txt.text = "";
  98. dtosEx_txt.text ="";
  99. } else {
  100. temperatura_txt.text = event.data.current.temperature+"º";
  101. estado_txt.text = xmlList.@value[codigoEstado];
  102. dtosEx_txt.text = "Viento: "+event.data.current.wind.direction+" "+event.data.current.wind.speed+" "+event.data.units.speed+"n"+"Humedad: "+event.data.current.atmosphere.humidity+"%"+"n"+"Visibilidad: "+event.data.current.atmosphere.visibility+" "+event.data.units.distance+"n"+"Presión atmosférica: "+event.data.current.atmosphere.pressure+" "+event.data.units.pressure;
  103. esttemp1_txt.text  = event.data.forecast[0].high+"º   "+ event.data.forecast[0].low+"º";
  104. esttemp2_txt.text  = event.data.forecast[1].high+"º   "+ event.data.forecast[1].low+"º";
  105. }
  106. var urlImagen:String = "imgactual/"+codigoEstado+".png";
  107. miReq = new URLRequest(urlImagen);
  108. miLoader.load(miReq);
  109. contImgGde.addChild(miLoader);
  110. this.addChild(contImgGde);
  111. formatFecha();
  112. }

40 Respuestas

    Marcelo Dice:

    Muy bueno!

    AmosLee Dice:

    Buen trabajo, lo vamos a publicar en nuestra web, es de una escuela de kitesurf y windsurf, justo lo que necesitaba, muchisimas gracias, un gran abrazo desde España. Genial!

    Marcelo (Otro, no el de arriba) Dice:

    Buenisimo!!! 10 Puntos y mil gracias!

    Daro Dice:

    Grosoooo!!!

    Luciano Dice:

    muy bueno el archivo!pero cuando lo pego en el html no se ven los datos (imagen, numeros, texto)alguna solucion? Muchas Gracias!

    Martin Dice:

    Nunca mas actualizaste :P

    Este año das curso en CEICOS de vuelta? Si das, me inscribo...

    Pd: Mira mi gravatar :P

    Saludos leo!!

    claudio Dice:

    de verdad amigo, sos un capo ,nos ayudas mucho con estos flash,muy amable de tu parte y muy util ademas,se agradece todo lo que nos ayudas,un saludo

    Damian Dice:

    Impecable.!!!!!
    Genial tu web.

    Consulta: No encuentro el evento que recoje sensacion termica (creo que es Feels Like)
    Donde puedo ver estos parametros? (porque pusiste muchos ejemplos pero ese justo no esta.
    Saludos y Gracias

    Damian Dice:

    Otra consulta como se podria hacer para que haga un refresh para qeu si me quedo en al pagina donde esta este widget, no me de la hora y el tiempo retrasado.?

    Gracias Gracias

    Enoel Dice:

    me hace falta usar esto para mi pagina pero no se como modificarlo para k salga solamente la ciudad k yo kiera... ver si pueden ayudarme....muchas gracias

    Damian Dice:

    No tuve respuestas, por si a alguien le interesa lo mas cercano a sensacion termica fue event.data.current.wind.chill
    Que es la temperatura del viento.
    Saludos. Leo No abandones esta web!!!!!!!!!!

    Jose Dice:

    Buenas noches

    No tengo mucha experiencia, pero cuando intento provar el swf, no me funciona solo se ve el fondo.
    Alguien me podria decir lo que pasa.

    Un saludo y gracias

    jfm Dice:

    Que tal! muy bueno lo suyo. yo soy nuevo en flash, y quisiera saber como hacer para usar la función getMonth y he esbozado lo siguiente (no me devuelve ningún error)pero tampoco logro que funcione!

    ------------------------------------------------------------
    var mesActual:Date = new Date(); // instancia de DATE var mes:Number; mes = MesActual.getMonth(); //funcion selector de mes if (mes==0){ // el mes es enero? // carga el archivo del mes enero loadMovieNum (enero.swf, contenedor); if (mes==1){ // el mes es Febero? // es el mes febrero loadMovieNum (febrero.swf, contenedor); if (mes==2){ // el mes es marzo? // es el mes marzo loadMovieNum (marzo.swf, contenedor); if (mes==3){ // el mes es abril? // es el mes abril loadMovieNum (abril.swf, contenedor); if (mes==4){ // el mes es Mayo? // es el mes mayo? loadMovieNum (mayo.swf, contenedor); } } } } }

    ----------------------------------------------------------

    bto Dice:

    Tengo entendido que cuando te sale en la imagen el signo de interrogacion es porque no hay datos. Pero esto a que se debe me podriasn decir por favor

    LeoBaraldi Dice:

    Re -> bto
    Es porque no se pudo recolectar esos datos, pero el problema no es tu swf sino que el sitio no los tiene o no los cargaron todavía.

    LeoBaraldi Dice:

    Re -> Damian
    Así es amigo, lo más cercano a la sensación térmica es la temperatura del viento
    y disculpas por la demora, estoy a full!
    Si puedes hacer un refresh, simplemente vuelve a cargar la función getWeather

    alfredo Dice:

    Hola Leo, alguna posibilidad de hacerlo para AS2, todavia no manejo el as3.
    gracias

    Facundo Dice:

    Leo, me fue muy útil lo del clima ;)

    Podés ver su aplicación en este site:
    http://www.agrupadasfederadas.com/clima.html

    jose Dice:

    Excelente muy buen material!
    gracias

    Nico Dice:

    Alguien sabe la razon por la cual solo me funciona cuando hago un test movie?, cuando lo subo al servidor no muestra ningun dato.

    Nico Dice:

    Hola a todos! tengo el siguiente problema. cuando hago un test movie en flash funciona muy bien pero cuando lo subo a un servidor no carga los datos dinamicos, solo veo lo estatico. Sera un problema de mi servidor?, por que los datos en otras webs cargan enseguida. pd, pobe asignar permisos por las dudas pero tampoco funciono. gracias de antemano

    carlos Dice:

    intento provar el swf, no me funciona solo se ve el fondo
    y cuando lo cargo en el servidor se despliega nadamas el combo y no se ven los demas datos e imagenes pngs salu2

    carlos Dice:

    hola alguien me puede ayudar con el swf porque cuando lo abro no carga nada espero respuesta gracias

    LeoBaraldi Dice:

    Muy raro lo que les pasa!!! estan usando una version portable de flash? si es asi compilen con la version pro, recuerden de compilar con las clases sobre el mismo directorios, es decir que la carpeta com este en la misma carpeta que el swf

    Asdru Dice:

    Hola, excelente herramienta, pero yo tengo una duda, he tratado de agregar mas dias para poder tener el pronostico de 4 o 5 dias mas pero no logro ponerlos, sera q me pueden ayudar como agregarle mas dias?

    Gracias

    LeoBaraldi Dice:

    tengo entendido que solo permite 2 días la api grátis

    Facundo Dice:

    Hola Leo, nose porque pero cuando es de día me aparece de noche y en el dibujito me aparece una luna...
    Como puedo arreglar eso?

    Agustin Dice:

    Muy buen aporte. Una consulta, como agrego los dibujitos del pronostico para los siguientes 2 dias?? Eh probado de muchas formas y no me funciona. Muchas gracias!!! Saludos

    RichRDZ Dice:

    Hola Leo Muy buen aporte pero existe la posibilidad de hacerlo funcionar en AS2??

    POR FAVOR ESPERO ME RESPONDAN

    moritoy Dice:

    hola como lepuedo cambiar las ciudades para que salgan solo las que yo quiero label:"Córdoba",data:"ARCA0023"},{label:"Buenos Aires",data:"ARBA0009"}

    por ejemplo yo le quiero poner miami pero no se que es data: "ARBA0009" alguien me puede ayudar en eso ?

    LeoBaraldi Dice:

    Facundo, puede que la api este enviando mal el code o la imagen que usas este cruzada en el xml

    LeoBaraldi Dice:

    Agustin, utiliza el code de estado para cargar una imagen que represente dicho estado

    LeoBaraldi Dice:

    RichRDZ, no hay manera que funcione en as2, pero cuéntame porque lo quisieras en as2?

    LeoBaraldi Dice:

    moritoy, la linea del combo de las ciudades y código que es la siguiente "te resumo" var ciudades:Array = new Array({label:"Córdoba",data:"ARCA0023"});
    Es un array o arreglo con objetos dentro, es decir que los valores que vas a colocar van de la siguiente manera: {label:"Córdoba",data:"ARCA0023"}
    Donde label es el nombre de la ciudad que ven tus visitante y data es el código de la ciudad para la api, para saber que código usa tu ciudad o las ciudades que deseas cargar entra a esta web http://www.weather.com/ y en el buscador escribí la ciudad que buscas, fíjate en la URL del navegador y busca el código de ciudad que es algo asi: para córdoba ARCA0023, cópialo y pégalo entre las comillas de data.

    Renato Dice:

    Leo impresionante trabajo, me fue de mucha utilidad pero tengo algunos problemas, no se porque el fire fox no me muestra los datos al parecer no lo interpreta ya que pongo un texto fijo de prueba y esto si me lo muestra pero el contenido del tiempo no. si me pudieras ayudar porfa. Ojo que en el explorer aparece perfecto pero en fire fox no

    LeoBaraldi Dice:

    muy extraño! el ejemplo desde mi web tampoco te funciona en firefox?

    Renato Dice:

    tampoco y ya descubri que es por el plug in flash player como tengo 8 no interpreta el AS3. Lo solucione actualizando el plug in al 10, pero te pregunto sabes como detectar y actulizar automaticamente la version del flash player, esto porque me encantaria subirlo a una web y los usuario comunes no saben (obviamente)nada sobre los plug in por lo que quiero que si no lo tiene actualizado lo haga.
    Espero tus comentario y denuevo gracias por compartir tremendo trabajo FELICIDADES

    Gerardo Dice:

    Hola Leobaraldi.. oye muy buena la aplicacion.. tan buena que me ha sacado de un apuro,pero al momento de querer compilarla con las nuevas ciudades todo esta bien.. pero cuando le doy doble click al swf solo se abre la ventana, pero no muestra ningun dato.. me dicen que puede ser un error de Paths, pero lo compilo en el mismo lugar donde estan todos los archivos.. cual puede ser el error ? espero a haberme dado a entender

    Federico Zamudio Dice:

    Hola leo, felicitaciones por tu sitio porque para estudiante como yo es un recurso impresionante. Bueno como veras puede modificar el tema de las ciudad para que me muestre su informacion de clima y cuando pruebo la pelicula me funciona 10 puntos, la exporto de flash cs3 profesional no es portable y junto con sus carpetas la pongo en mi sitio y me funciona el menu de donde selecciono las ciudades y me trae solamente la temperatura de dicha ciudad, no se porque el resto de la informacion no me la presenta, alguna ayudita en esto? desde ya gracias y saludos.

    sebastian Dice:

    Hola. me baje el ejemplo y lo meti en un html, pero al abrirlo no me muestra la información. Solo figura activa la solapa de la localidad. Deberia modificar algo para que me levante los datos desde internet? Poseo Flash CS3 y lo abre perfecto, pero al publicarlo en html no funciona. Muchas gracias

Publicar comentario

IMPORTANTE: Los comentarios son moderados. A la brevedad seran subidos.

Leonardo David Baraldi

Leonardo Baraldi

Nací en Villa Carlos Paz, tengo 33 años y me dedico a desarrollos para la web desde el año 99, preferentemente en las aéreas de ActionScript y CSS. Trabajo para la firma Manifesto Solutions como jefe de producción.

ultimos post

Usa Firefox es mejor che!!!
Copyright © 2008 LeoBaraldi. Todos los derechos reservados.
Designed by LeoBaraldi and powered by Wordpress | RSS Feed
Love WordPress
Manifesto
Manifesto solutions
Sponsort Oficial de LeoBaraldi