Posteado por: creadorsa | 4 agosto 2011

Tutorial Extracción de Valores Económicos del BCI

Muchas veces necesitamos los valores económicos tales como el valor del dólar, la UF, la UTM, el Euro o de alguna acción, para mostrarlas a nuestros usuarios, o bien calcular el valor del dólar en nuestra moneda. Estos, existen en portales públicos, y en especial, podemos estar seguros que la información será fidedigna si proviene de un banco.

En esta ocasión veremos cómo utilizando unas pocas líneas de código, podemos extraer los valores económicos del portal del Banco BCI. Una vez los tengamos, los podrán guardar en una base de datos local (modelo), o externalizar como un webservice.

El sitio de BCI que contiene la información es http://www.bci.cl/personas.

Si vemos su código fuente directamente desde ver Código, nos daremos cuenta que el contenido de la sección que queremos en realidad es el resultado de la ejecución de un script Javascript, y por lo tanto, debe ser interpretada por el navegador antes de estar disponible.

      

En cualquier otro caso, esto nos imposibilitaria la extracción; sin embargo, Creador te entrega acceso a su poderoso componente cSelenium, que te permite controlar un navegador y de esta forma, obtener el código de la página deseada “tal como lo ve el navegador”.

Como podemos ver en la captura de arriba, el navegador interpreta estos datos para mostrarlos al usuario, y en “su versión del código”, los valores que buscamos se encuentran escritos, por lo que podremos procesarlos con nuestro componente de extracciones sParser.

Veamos a continuación cómo obtener el código “como lo ve el navegador firefox” utilizando el componente cSelenium:

<cfset selenium=CreateObject("component","creador.base.apis.cselenium").init(4446, "", "firefox")>
<cfset selenium.open("http://www.bci.cl/personas/").wait(2)>
<cfset codigo_pagina_personas=selenium.getPageSource()>
<cfset selenium.quit().stop()>

El código de arriba, inicializa el componente cSelenium, configura el navegador a utilizar Firefox, abre la página deseada y espera 2 segundos a que cargue, luego asigna el código fuente de la página (como lo visualiza Firefox) a la variable codigo_pagina_personas, y ejecuta el comando salir del navegador y apagar la instancia de Selenium. Con solo 4 lineas de código tenemos la información como la interpreta el navegador, lista para ser procesada por nuestro componente de extracciones sParser.

Ahora veremos cómo extraer la información segmentada de los valores utilizando nuestro componente sParser.

<cfset object=CreateObject("component","creador.base.apis.sparser")>
<cfset parser=object.init(codigo_pagina_personas)>
<cfset parser.selector("script").replaceWith(" ")>
<cfset valores=parser.selector("div.indicadores td").query()>

La primera linea, inicializa el componente sParser (recuerda utilizar componente sparser2 si utilizas Adobe Coldfusion). La segunda inicializa el parser con el código fuente obtenido de Firefox. La tercera, busca todos los tags script y los reemplaza por un espacio vacío, efectivamente eliminándolos (ya que nos los queremos). Por último, la cuarta linea busca todos los tags td que se encuentran dentro de un div de class indicadores, y los obtiene en la forma de una query (o consulta).

Por último, en el código siguiente asignamos los resultados a una variable de estructura llamada resultados:

<cfset resultados=StructNew()>
<cfset resultados.fecha=parser.removeTags(valores._content[1])>
<cfset resultados.uf=parser.removeTags(valores._content[2])>
<cfset resultados.utm=parser.removeTags(valores._content[3])>
<cfset resultados.ipc=parser.removeTags(valores._content[4])>
<cfset resultados.ipsa=parser.removeTags(valores._content[5])>
<cfset resultados.dolar=parser.removeTags(valores._content[6])>
<cfset resultados.euro=parser.removeTags(valores._content[7])>

El código anterior, básicamente indica que en la columna _content, del primer resultado, se encuentra la fecha de los indicadores, y que queremos eliminar cualquier tag que en este se encuentre (función parser.removeTags()), para obtener un valor de texto limpio (ya que, como podemos observar en la captura del código de firefox mostrado arriba, la fecha estaba dentro de un tag strong), y este resultado lo asignamos al campo “fecha” de la estructura “resultados”. Repetimos el paso para los demás valores (primer resultado=fecha, segundo resultado=uf, tercer resultado=utm, cuarto resultado=ipc, etc).

Como podemos ver, la utilización de los componentes de Creador, nos permite traducir de manera muy directa nuestros requerimientos en código, efectivamente logrando el proceso en muy pocos pasos.

Ahora solo resta que utilicen los valores de la variable resultados como lo estimen conveniente.

Script completo (versión bundle nativa – Open Bluedragon):
http://cl.ly/403h3e2y280C2i393E1k
Script completo (versión compatible con Adobe Coldfusion):
http://cl.ly/1p3r3Q0f1I13271X3a17

Aprende esto y mucho más con nuestros cursos de Desarrollo Móvil, de forma rápida, fácil y sencilla. Visítanos en http://www.creador.cl

Advertisement

Respuestas

  1. [...] Mira también el ejemplo de extracción alternativa, más sencillo: Extracción Valores Económicos del BCI (utilizando Selenium y sParser) [...]

  2. Hola, averigue por ahi, y todos los que utilizamos este js tenemos que cambiarlo, por que es ilegal utilizarlo, ya que BCI paga a una empresa por estos datos….
    Existirá otra fuente que sea libre??


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Categorías

Seguir

Get every new post delivered to your Inbox.