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:
-
///////////datos de geo localización
-
//event.data.location.city -- nombre de la ciudad
-
//event.data.location.country -- país
-
//event.data.location.latitude -- latitud
-
//event.data.location.longitude -- longitud
-
///////////datos generales
-
//event.data.language -- lenguaje del reporte
-
//event.data.date -- Mon Oct 13 23:00:00 GMT-0300 2008
-
//event.data.timeToLive -- tiempo de actualización
-
//event.data.units.distance -- unidad de distancia
-
//event.data.units.speed -- unidad de velocidad
-
//event.data.units.pressure -- unidad de presión
-
//event.data.units.temperature -- unidad de temperatura
-
///////////datos actuales
-
//event.data.current.temperature -- indica la temperatura actual
-
//event.data.current.description -- descripción del tiempo
-
//event.data.current.imageURL -- url de la imagen
-
//event.data.current.code -- estado del tiempo en referencia a su código
-
//////////datos del viento
-
//event.data.current.wind.chill -- temperatura del viento
-
//event.data.current.wind.direction -- dirección del viento en grados según el norte
-
//event.data.current.wind.speed -- velocidad según event.data.units.speed
-
//////////datos asmofericos
-
//event.data.current.atmosphere.humidity -- humedad
-
//event.data.current.atmosphere.pressure -- presión
-
//event.data.current.atmosphere.rising -- diferencia de presión
-
//event.data.current.atmosphere.visibility -- visibilidad en event.data.units.distance
-
//////////datos astronomicos
-
//event.data.current.astronomy.sunrise -- fecha, hora amanecer
-
//event.data.current.astronomy.sunset -- fecha, hora atardecer
-
//////////pronostico extendido
-
//event.data.forecast -- devielve un array con el objeto ForecastConditions
-
//event.data.forecast[x].code -- estado del tiempo en referencia a su código
-
//event.data.forecast[x].date -- fecha completa
-
//event.data.forecast[x].high -- temperatura max
-
//event.data.forecast[x].low -- temperatura minima
-
//event.data.forecast[x].imageURL -- url de la imagen
-
//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.
-
//importamos las clases necesarias
-
import com.yahoo.webapis.weather.WeatherService;
-
import com.yahoo.webapis.weather.Weather;
-
import com.yahoo.webapis.weather.events.WeatherErrorEvent;
-
import com.yahoo.webapis.weather.events.WeatherResultEvent;
-
import fl.data.DataProvider;
-
//cramos el servicio
-
var ws:WeatherService = new WeatherService();
-
//escuchador cuando recivimos los datos
-
ws.addEventListener(WeatherResultEvent.WEATHER_LOADED, resultTiempo);
-
//si hay un error al recibir los datos
-
function xmlError(event:WeatherErrorEvent):void {
-
//weather_txt.text = event.data.toString();
-
}
-
//error al leer el xml
-
ws.addEventListener(WeatherErrorEvent.XML_LOADING, xmlError);
-
//
-
//ACTION PARA ESTE EJEMPLO
-
//
-
var periodo:String;
-
var codigoEstado:int;
-
var miLoader:Loader = new Loader();
-
var miReq:URLRequest=new URLRequest();
-
var mes:Array;
-
var dia:Array;
-
var contImgGde:Sprite = new Sprite();
-
//estados del tiempo en español
-
var xmlData:XML;
-
var xmlLoader:URLLoader = new URLLoader();
-
var urlRequest:URLRequest = new URLRequest("clima-es.xml");
-
xmlLoader.load(urlRequest);
-
xmlLoader.addEventListener(Event.COMPLETE, this.iniciarXML);
-
var xmlList:XMLList = new XMLList();
-
function iniciarXML(e:Event):void {
-
xmlData = new XML(xmlLoader.data);
-
xmlList = XMLList(xmlData.clima);
-
init();
-
}
-
//datos para el combo
-
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"});
-
var dp:DataProvider = new DataProvider(ciudades);
-
cb.dataProvider=dp;
-
cb.addEventListener(Event.CHANGE, cbSelect);
-
function cbSelect(o:Event):void {
-
ws.getWeather(cb.selectedItem.data, "metric");
-
}
-
-
function init() {
-
mes = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
-
dia = new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");
-
time_txt.autoSize = TextFieldAutoSize.LEFT ;
-
contImgGde.y = time_txt.y+15;
-
-
var defaud:Object = new Object();
-
defaud = cb.getItemAt(0);
-
-
ws.getWeather(defaud.data, "metric");
-
formatFecha();
-
}
-
-
function formatFecha() {
-
var date:Date = new Date();
-
var minutos:String;
-
if (date.getMinutes()<10) {
-
minutos = "0"+String(date.getMinutes());
-
} else {
-
minutos = String(date.getMinutes());
-
}
-
if (date.getHours()<12) {
-
periodo ="am";
-
} else {
-
periodo ="pm";
-
}
-
time_txt.text = dia[date.day]+" "+String(date.getDate() +" de "+mes[date.getMonth()]+" - "+date.getHours()+":"+minutos+" "+periodo);
-
-
var contDay:int = date.day;
-
switch (date.day) {
-
case 5 :
-
estado1_txt.text = dia[6];
-
estado2_txt.text = dia[0];
-
break;
-
case 6 :
-
estado1_txt.text = dia[0];
-
estado2_txt.text = dia[1];
-
break;
-
default :
-
estado1_txt.text = dia[date.day+1];
-
estado2_txt.text = dia[date.day+2];
-
}
-
}
-
-
function resultTiempo(event:WeatherResultEvent):void {
-
codigoEstado = event.data.current.code;
-
if (codigoEstado==0) {
-
codigoEstado = 3200;
-
temperatura_txt.text = "";
-
estado_txt.text = "";
-
dtosEx_txt.text ="";
-
} else {
-
temperatura_txt.text = event.data.current.temperature+"º";
-
estado_txt.text = xmlList.@value[codigoEstado];
-
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;
-
esttemp1_txt.text = event.data.forecast[0].high+"º "+ event.data.forecast[0].low+"º";
-
esttemp2_txt.text = event.data.forecast[1].high+"º "+ event.data.forecast[1].low+"º";
-
}
-
var urlImagen:String = "imgactual/"+codigoEstado+".png";
-
miReq = new URLRequest(urlImagen);
-
miLoader.load(miReq);
-
contImgGde.addChild(miLoader);
-
this.addChild(contImgGde);
-
formatFecha();
-
}
1 diciembre, 2008 at 1:09 pm
Muy bueno!
3 diciembre, 2008 at 9:08 am
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!
14 diciembre, 2008 at 8:17 am
Buenisimo!!! 10 Puntos y mil gracias!
22 diciembre, 2008 at 10:45 pm
Grosoooo!!!
12 enero, 2009 at 4:03 pm
muy bueno el archivo!pero cuando lo pego en el html no se ven los datos (imagen, numeros, texto)alguna solucion? Muchas Gracias!
13 enero, 2009 at 10:39 pm
Nunca mas actualizaste :P
Este año das curso en CEICOS de vuelta? Si das, me inscribo...
Pd: Mira mi gravatar :P
Saludos leo!!
10 febrero, 2009 at 12:23 pm
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
14 febrero, 2009 at 5:02 pm
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
15 febrero, 2009 at 8:17 am
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
16 febrero, 2009 at 3:16 pm
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
18 febrero, 2009 at 8:12 am
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!!!!!!!!!!
23 febrero, 2009 at 5:10 pm
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
13 abril, 2009 at 10:14 am
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); } } } } }
----------------------------------------------------------
25 junio, 2009 at 2:08 pm
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
27 junio, 2009 at 4:41 am
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.
27 junio, 2009 at 4:43 am
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
29 junio, 2009 at 10:08 am
Hola Leo, alguna posibilidad de hacerlo para AS2, todavia no manejo el as3.
gracias
3 julio, 2009 at 4:04 pm
Leo, me fue muy útil lo del clima ;)
Podés ver su aplicación en este site:
http://www.agrupadasfederadas.com/clima.html
20 julio, 2009 at 1:41 pm
Excelente muy buen material!
gracias
11 agosto, 2009 at 9:59 am
Alguien sabe la razon por la cual solo me funciona cuando hago un test movie?, cuando lo subo al servidor no muestra ningun dato.
14 agosto, 2009 at 9:20 am
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
17 agosto, 2009 at 1:45 pm
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
17 agosto, 2009 at 6:11 pm
hola alguien me puede ayudar con el swf porque cuando lo abro no carga nada espero respuesta gracias
18 agosto, 2009 at 4:26 pm
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
16 septiembre, 2009 at 9:46 am
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
17 septiembre, 2009 at 12:16 am
tengo entendido que solo permite 2 días la api grátis
21 octubre, 2009 at 9:33 am
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?
22 octubre, 2009 at 6:11 pm
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
29 octubre, 2009 at 8:52 pm
Hola Leo Muy buen aporte pero existe la posibilidad de hacerlo funcionar en AS2??
POR FAVOR ESPERO ME RESPONDAN
3 enero, 2010 at 2:45 pm
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 ?
5 enero, 2010 at 3:08 am
Facundo, puede que la api este enviando mal el code o la imagen que usas este cruzada en el xml
5 enero, 2010 at 3:09 am
Agustin, utiliza el code de estado para cargar una imagen que represente dicho estado
5 enero, 2010 at 3:10 am
RichRDZ, no hay manera que funcione en as2, pero cuéntame porque lo quisieras en as2?
5 enero, 2010 at 3:53 am
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.
13 enero, 2010 at 11:10 am
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
14 enero, 2010 at 3:39 am
muy extraño! el ejemplo desde mi web tampoco te funciona en firefox?
14 enero, 2010 at 12:06 pm
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
29 enero, 2010 at 5:17 pm
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
2 marzo, 2010 at 11:57 am
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.
21 abril, 2010 at 1:09 pm
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
26 noviembre, 2010 at 6:35 am
hola porque funciona cuando estoy editando en cs3 y cuando lo pongo en la pagina no anda
mi web todavia no esta arriba
gracias
3 diciembre, 2010 at 12:17 pm
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/
10 diciembre, 2010 at 10:45 pm
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
8 diciembre, 2011 at 10:42 am
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
26 diciembre, 2011 at 10:44 am
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