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

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