LeoBaraldi – Ejemplos Flash, Ejemplos actionscript, Tutoriales Flash, Tutoriales actionscript, actionscript 3, curso de actionscript

Recursos y ejemplos de actionscript, Flash, AIR, Flex, CSS y HTML. Tutoriales de actionscript 2 y actionscript 3

API Yahoo weather, optener datos del clima en flash AS3

| 45 Comments

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. }

Author: LeoBaraldi

Diseñador gráfico y programador en Web, con experiencia profesional en el rubro desde 1998. Experto en diseño de interfaces Frontend y Backend, sitios, portales y dispositivos móviles. Experto en estándares, CSS y HTML, amplios conocimientos en CEO. Desarrollador de sitios multi plataformas, HTML5, CSS3 y JQuery. Experto programador en Adobe Flex, AIR y ActionScript 3.0. Conocimientos en lenguajes como PHP, Javascript y bases de datos MySQL. Profesor de Diseño y Diseño Web en la Escuela Superior de Diseño Aguas de la Cañada, asesor y colaborador para medios gráficos, editoriales y revistas afines. Actualmente Jefe de Producción en Manifesto solutions.

45 Comments

  1. 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!

  2. Buenisimo!!! 10 Puntos y mil gracias!

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

  4. Nunca mas actualizaste :P

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

    Pd: Mira mi gravatar :P

    Saludos leo!!

  5. 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

  6. 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

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

  8. 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

  9. 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!!!!!!!!!!

  10. 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

  11. 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); } } } } }

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

  12. 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

  13. 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.

  14. 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

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

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

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

  17. Excelente muy buen material!
    gracias

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

  19. 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

  20. 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

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

  22. 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

  23. 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

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

  25. 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?

  26. 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

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

    POR FAVOR ESPERO ME RESPONDAN

  28. 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 ?

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

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

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

  32. 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.

  33. 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

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

  35. 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

  36. 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

  37. 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.

  38. 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

  39. hola porque funciona cuando estoy editando en cs3 y cuando lo pongo en la pagina no anda
    mi web todavia no esta arriba
    gracias

  40. Muchas gracias un gran aporte que me resalvo la vida.
    Para los que tienen el problema de que les funciona haciendo test movie y al exportar no jala nada, esto sucede porque el directorio bin del flash es un directorio especial que te permite acceder a archivos que se encuentren en este directorio y a recursos de red como una llamada a un servidor http remoto por ejemplo. El error se produce cuando se pretende acceder a la direccion de donde saca los datos del clima. Navegando encontre una solucion para esto, les pongo el link espero sirva a mas gente
    http://curtismorley.com/2007/08/31/flash-cs3-flex-2-as3-error-2148/

  41. Hola Leo
    A mi me funciona a la perfección, pero quisiera poner solo una ciudad y no utilizar la barra desplegable. Leo como hago eso
    Muchas gracias

  42. Que lindo trabajo,... FELICITACIONES y antes que nada GRACIAS por compartirlo.

    lo encontre hoy a travez del google,.. pero hace 4 horas que estoy tratando de ENCONTRAR a donde poner el codigo de la ciuda dy como introducirlo en la web =(

    Alguien me podria decir por favor como pongo mi iudad y como hago que aparesca en la web? ESO MAS O MENOS YA LO SE

    pero no se donde poner el codigo de ciudad.

    http://espanol.weather.com/weather/today-San-Luis-ARCS0087

    GRACIAS LEO increible tu trabajo :D

  43. Hola leo , te comento, estoy intentando poner las imagenes a los pronosticos , añadiendoles

    event.data.forecast[x].imageURL

    el caso es que no se exactamente en que linea hay q poner el codigo....

    aqui seguro no es por que hace referencia a los textos y es una variable asignada a una caja de texto..

    esttemp1_txt.text =
    y ya he probado en varios sitios y no me garga ..solo me salen barras diagonales

    muchas gracias de antemano

Deja un comentario

Required fields are marked *.

*