Pues eso me gustaría encontrar la manera de poder ir actualizando mi pelicula con unos datos del xml.
getdata.php ( cojo los datos de la web i refresco con un intervalo de 2 segundos)
Código PHP :
header("Refresh: 2; URL='getdata.php'"); $context = stream_context_create(array('http' => array('timeout' => 5))); $url = file_get_contents('http://www.bolsamania.com/bolsa-cotizaciones/acciones/espana--ibex35.html', 0, $context); $doc = new DOMDocument(); libxml_use_internal_errors(true); $doc->loadHTML($url); $fci = $doc->getElementById('ls_table_ficha_cabecera_indice'); $spans = $fci->getElementsByTagName('span'); /* chapuza Nº1; pongo la $j prk hay 4 spans con ese id pero solo me interesan 3 */ $j=0; for ($i = 0; $i < $spans->length && $j<=2; $i++) { echo $spans->item($i)->nodeValue . '<br />'; $j++; } /* * Creo el xml */ // Se crea el XML que guardará la estructura de datos $doc = new DomDocument('1.0','ISO-8859-1'); // create root node /* Indices Generales */ $indicesgrales = $doc->createElement('indicesgrales'); $indicesgrales = $doc->appendChild($indicesgrales); /* Creo elementos Xml para Data*/ /*$zone = 3600*1;// España: GMT+1 $hora = gmdate("G:i", time() + $zone + gmdate("I")); $timestamp = gmdate("l d/m/Y G:i:s", time() + $zone + gmdate("I")); $xmldata = $doc->createElement('data'); $xmldata = $indicesgrales->appendChild($xmldata); $xmldata->setAttribute('timestamp',$timestamp);*/ //$indice = $doc->createElement('indice'); //$indice = $indicesgrales->appendChild($indice); //$xmldata->setAttribute('timestamp',$timestamp); /* Creo elementos Xml para Ibex 35 */ $Ibex35 = $doc->createElement('Valores_Generales_Ibex35'); $Ibex35 = $indicesgrales->appendChild($Ibex35); $Ibex35->setAttribute('nombre',"IBEX 35"); $Ibex35->setAttribute('valor',$spans->item(0)->nodeValue); $Ibex35->setAttribute('dif',$spans->item(1)->nodeValue); /* Indices de Ibex 35*/ $BorsasIbex35 = $doc->createElement('Borsas_de_Ibex_35'); $BorsasIbex35 = $Ibex35->appendChild($BorsasIbex35); $BorsasIbex35->setAttribute('nombre',"telefonica"); $BorsasIbex35->setAttribute('valor',"123"); $BorsasIbex35->setAttribute('dif',"453"); /* Creo elementos Xml para DOW JONES */ $indice = $doc->createElement('indice'); $indice = $indicesgrales->appendChild($indice); $indice->setAttribute('nombre',"DOW JONES"); $indice->setAttribute('valor','0'); $indice->setAttribute('dif','0%'); /* Creo elementos Xml para BORSA BCN MID-50 */ $indice = $doc->createElement('indice'); $indice = $indicesgrales->appendChild($indice); $indice->setAttribute('nombre',"BORSA BCN MID-50"); $indice->setAttribute('valor','0'); $indice->setAttribute('dif','0%'); /* Imprimir xml */ $filename="dataeconomia"; print_r ("<p style='font-family:Arial; font-size:16px'>Salvando fichero: <b>" . $filename . ".xml</b></p>"); $doc->save($filename . ".xml");
Me imprime el siguiente XML;
Código XML :
<?xml version="1.0" encoding="ISO-8859-1"?> <indicesgrales> <Valores_Generales_Ibex35 nombre="IBEX 35" valor="8.798,111" dif="1,08%"> <Borsas_de_Ibex_35 nombre="telefonica" valor="123" dif="453"/> </Valores_Generales_Ibex35> <indice nombre="DOW JONES" valor="0" dif="0%"/> <indice nombre="BORSA BCN MID-50" valor="0" dif="0%"/> </indicesgrales>
Código AS2
Código ActionScript :
// Tenemos que poner esto para no // tener problemas con las tildes // y otros caracteres especiales System.useCodepage = true; // Con esto evitamos que Flash interprete // los saltos de línea del xml como nodos // en blanco XML.prototype.ignoreWhite = true; datos_txt.autoSize = "left"; // definimos el objeto XML datos_xml = new XML(); // Cuando se carguen los datos ejecutaremos // la función cargarDatos datos_xml.onLoad = cargarDatos; // Definimos el array donde almacenaremos // los datos de los coches coches_array = new Array(); // la función cargarDatos se invoca cuando // hago la llamada a datos_xml.load("coches.xml"); // al final del código function cargarDatos(exito) { // si el xml se ha cargado bien... if (exito) { // en el array cochesCargados meto los // nodos <coche> de segundo nivel, pero // como todavía no están en el formato // que nos interesa, nos lo vamos a recorrer // y cada elemento lo pasamos como parámetro // a la función pasar_a_array que daja la // información a nuestro gusto cochesCargados = this.firstChild.childNodes; for (var k = 0; cochesCargados[k]; k++) { pasar_a_array(cochesCargados[k]); } // una vez convertidos los datos, eliminamos // los objetos que ya no vamos a necesitar, así // liberamos memoria delete cochesCargados; delete datos_xml; // muestro los coches verCoches(); } else { // si no se a cargado bien... // aquí las sentencias en caso de error // durante la carga // trace("fallo en la carga"); } } // esta función es la que va ha convertir // cada nodo en un objeto con propiedades // más fácil de controlar. Se invoca // desde la función cargarDatos dentro del for function pasar_a_array(nodo) { // defino el objeto var objetoBorsa = new Object(); // atributos->matriz de atributos del nodo var atributos = nodo.attributes; // asigno todos los atributos dentro // de las propiedades del objeto /*for (item in atributos) { objetoBorsa[item] = atributos[item]; }*/ /* id="1" nombre="IBEX 35" valor="8.225,40" dif="-1,54%" */ objetoBorsa.nombre = atributos.nombre; objetoBorsa.valor = atributos.valor; objetoBorsa.dif = atributos.dif; objetoBorsa.id = Number(atributos.id); // finalmente, añado el objeto al array coches_array.push(objetoBorsa); } // función que escribe la lista de coches dentro // de la caja de texto. Se invoca desde la función // cargarDatos function verCoches() { coches = ""; for (var i = 0; coches_array[i]; i++) { coches += "<b>"+coches_array[i].nombre+" Valor: "+coches_array[i].valor+"</b> - Diff.: <b>"+coches_array[i].dif+"</b><br>"; } // quito el último <br> coches = coches.substring(0, coches.length-4); } segundos = 2; espera = function () { datos_xml.load("dataeconomia.xml"); }; a = setInterval(espera, segundos*1000); stop();
Todo funciona bien, menos el setInterval... carga una vez el xml ydespués no hace nada más.He probado de hacerlo con un botón pero pasa lo mismo, sólo carga una vez.
EL conflicto lo tengo en;
segundos = 2;
espera = function () {
datos_xml.load("dataeconomia.xml");
};
a = setInterval(espera, segundos*1000);
A ver si podéis echarme una ayudita que estoy por pasar de flash como no encuentre una solución a esto T_T, soy muy novato en action script de echo es elprimer programa que hago . Lo ideal sería tener un depurador que me vaya diciendo donde peta ,esq así uno se vuelve loco!
Grácias .