Comunidad de diseño web y desarrollo en internet online

Actualizar swf condatos de un xml cambiates

Citar            
MensajeEscrito el 10 Oct 2011 03:12 pm
Hola,

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 .

Por IcEWoLF

34 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Oct 2011 01:05 pm
2 segundos es demasiado poco, posiblemente ni llegue a cargarlo en ese tiempo. Al menos 10 segundos si se trata de un feed con muuuucho recambio (tipo data financiera o agencia de noticias) es lo prudente.
La carga la tienes que hacer desde getdata.php que es el que general el XML, si cargas un XML estático no esperes que cambie. Igual tienes el tema del cache, te conviene agregar random a la llamada>

datos_xml.load("getdata.php?"+Math.random());

Tip: si realmente te interesa depurar y recibir errores consistentes, usa AS3

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.