hola,
ok mirad,
Tengo un getdata.php (faltan cojer mas datos de la web pero bueno)
Código PHP:
//header("Refresh: 10; 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
*/
$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"));
// Se crea el XML que guardará la estructura de datos
$doc = new DomDocument('1.0','ISO-8859-1');
// create root node
$xmldata = $doc->createElement('data');
$xmldata = $doc->appendChild($xmldata);
$xmldata->setAttribute('timestamp',$timestamp);
/* Indices Generales */
$indicesgrales = $doc->createElement('indicesgrales');
$indicesgrales = $xmldata->appendChild($indicesgrales);
/* Creo elementos Xml para Ibex 35 */
$indice = $doc->createElement('indice');
$indice = $indicesgrales->appendChild($indice);
$indice->setAttribute('nombre',"IBEX 35");
$indice->setAttribute('valor',$spans->item(0)->nodeValue);
$indice->setAttribute('dif',$spans->item(1)->nodeValue);
/* 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");
Que genera un xml
Código XML:
Ver original<?xml version="1.0" encoding="ISO-8859-1"?>
<data ..>
<indicesgrales>
<indice nombre="IBEX 35" valor="8.225,40" dif="-1,54%"/>
<indice nombre="DOW JONES" valor="0" dif="0%"/>
<indice nombre="BORSA BCN MID-50" valor="0" dif="0%"/>
</indicesgrales>
</data>
Después de action script tengo esto.
Código Action Script:
Ver original// 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 borsa
borsa_array = new Array();
// la función cargarDatos se invoca cuando
// hago la llamada a datos_xml.load("borsa.xml");
// al final del código
function cargarDatos(exito) {
// si el xml se ha cargado bien...
if (exito) {
// en el array borsaCargados meto los
// nodos <borsa> 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
borsaCargados = this.firstChild.childNodes;
for (var k = 0; borsaCargados[k]; k++) {
pasar_a_array(borsaCargados[k]);
}
// una vez convertidos los datos, eliminamos
// los objetos que ya no vamos a necesitar, así
// liberamos memoria
delete borsaCargados;
delete datos_xml;
// muestro los borsa
verborsa();
} 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
borsa_array.push(objetoBorsa);
}
// función que escribe la lista de borsa dentro
// de la caja de texto. Se invoca desde la función
// cargarDatos
function verborsa() {
borsa = "";
for (var i = 0; borsa_array[i]; i++) {
borsa += "<b>"+borsa_array[i].nombre+" Valor: "+borsa_array[i].valor+"</b> - Diff.: <b>"+borsa_array[i].dif+"</b><br>";
}
// quito el último <br>
borsa = borsa.substring(0, borsa.length-4);
}
datos_xml.load("dataeconomia.xml");
stop();
Grácias,