Haga una aplicación de cotización de acciones Visualización de gráficos con Raphael JS

En esta serie de tutoriales, te enseñaré cómo crear una aplicación de cotización de acciones con Raphael JS, Titanium Mobile y el servicio web de Yahoo YQL. Los gráficos de Raphael JS se utilizarán para presentar gráficamente la información de cotización de acciones, se usará Titanium Mobile para compilar de forma cruzada una aplicación iOS nativa, y las tablas de datos YQL realmente recuperarán la información de existencias.

Donde dejamos?

El último tutorial de esta serie presentó a YQL y Raphael JS como componentes de una aplicación Titanium Mobile y demostró los pasos necesarios para crear nuestra interfaz de aplicación de cotización de acciones y buscar cotizaciones de acciones con YQL. En este tutorial, terminaremos nuestra aplicación de cotización de acciones agregando los gráficos de Raphael JS que trazan los datos históricos obtenidos usando YQL.

Paso 5: Configuración de Raphael JS Charting Library

Antes de que podamos comenzar a implementar un gráfico en nuestra aplicación Stocks, primero debemos descargar las bibliotecas de Raphael, incluidos los archivos JavaScript de gráficos que necesitaremos para crear nuestro gráfico de barras. Para hacer esto, siga estos pasos:

  1. Descargue la biblioteca principal de RaphaelJS desde http://raphaeljs.com
    (Enlace directo: http://github.com/DmitryBaranovskiy/raphael/raw/master/raphael-min.js).
  2. Descargue la biblioteca principal de gráficos desde http://g.raphaeljs.com
    (Enlace directo: http://github.com/DmitryBaranovskiy/g.raphael/blob/master/g.raphael-min.js?raw=true) y cualquier otra biblioteca de gráficos que desee utilizar. Para este ejemplo, simplemente implementaremos el gráfico de barras, que se encuentra aquí: http://github.com/DmitryBaranovskiy/g.raphael/blob/master/g.bar-min.js?raw=true
  3. Ponga sus archivos descargados en su directorio de "Recursos". Puede colocarlos en una subcarpeta si lo desea, pero tenga en cuenta que debe asegurarse de que sus referencias en los siguientes pasos sean correctas.
  4. El siguiente paso es cambiar el nombre de su raphael-min.js archivar a algo como raphael-min.lib. La razón principal es que si su archivo es un archivo JavaScript conocido (como en el que termina en '.js'), el validador JSLint en Titanium intentará validar la biblioteca Raphael JS y fallará, lo que provocará que Titanium se bloquee, lo que significa que no podrá ejecutar su aplicación!

Ahora ejecute la aplicación nuevamente, es posible que aparezcan algunas advertencias de validación en la consola Titanium desde el código de Raphael, pero todo debería seguir funcionando y funcionando como estaba en el Paso 4..

Paso 6: Implementando un WebView para el Raphael JS Chart

Vamos a utilizar un WebView para presentar nuestro gráfico en la pantalla. Agreguemos un WebView ahora y apúntelo a un archivo HTML que crearemos en el siguiente paso. También agregaremos una etiqueta para describir la vista web. Este código debe ir antes de la línea. scrollArea.add (quoteChartBox);, que estará cerca del final de su archivo de código:

 // Agregue la etiqueta del gráfico y la vista web que necesitamos para mostrar nuestro gráfico de Raphael var lblChartName = Titanium.UI.createLabel (width: 280, height: 30, left: 10, top: 10, color: '# 003366', font: fontSize: 17, fontWeight: 'bold', fontFamily: 'Helvetica', texto: '12 Week Historical Chart '); quoteChartBox.add (lblChartName); var webview = Titanium.UI.createWebView (width: 280, height: 240, left: 10, top: 40, url: 'chart.html'); quoteChartBox.add (webview); var twelveWeekStartLabel = Titanium.UI.createLabel (width: 100, left: 10, top: 285, height: 10, textAlign: 'left', fuente: fontSize: 9, fontFamily: 'Helvetica', color: '# 000 '); quoteChartBox.add (twelveWeekStartLabel); var twelveWeekEndLabel = Titanium.UI.createLabel (width: 100, right: 10, top: 285, height: 10, textAlign: 'right', fuente: fontSize: 9, fontFamily: 'Helvetica', color: '# 000 '); quoteChartBox.add (twelveWeekEndLabel);

Ejecute su aplicación en el emulador y ahora debería ver un WebView vacío y una etiqueta en el tercer cuadro. Deberá desplazarse hasta el final de la pantalla para ver el tercer cuadro en su totalidad..

Paso 7: Creando el Raphael Chart HTML y Event Listener

Ahora vamos a crear un archivo HTML que incluye todas las bibliotecas de Raphael necesarias y que contiene un

etiqueta donde se representará nuestra carta. Crear un nuevo archivo HTML en blanco llamado chart.html y escriba el siguiente código:

   RaphaelJS gráfico       

Guarda tu chart.html archivo en su directorio de "Recursos" si aún no lo ha hecho. Lo que este código está haciendo es crear una plantilla HTML básica, incluidas las bibliotecas de Raphael que descargaste anteriormente, y crear un div llamado chartDiv, que es en lo que Rafael convertirá nuestra carta en. Con las etiquetas de script debajo de esta div, estamos creando un detector de eventos Titanium estándar, que se ejecutará cada vez que se produzca un evento llamado renderChart Se dispara desde algún lugar dentro del titanio. Esta función tomará cualquier dato pasado y lo pondrá en Raphael para renderizar. los r.g.barchart () La función toma la siguiente lista de parámetros para crear el gráfico (en orden):
Izquierda, Superior, Anchura, Altura, Datos (una matriz de matrices de un solo valor), Atributos de estilo. La función de desplazamiento al final de este método le dice a Raphael que genere una aparición gradual, una desaparición gradual y mostrar los valores de las columnas cuando se toca una barra..

Paso 8: Obtener datos históricos de YQL y pasarlos a chart.html

Ahora es el momento para el paso final en nuestro tutorial: ¡renderizar el gráfico! Entra en tu searchYQL función, y después de su código anterior para obtener los datos de stock, escriba lo siguiente:

 // Obtenga la fecha de hoy y divídala en valores de mes, día y año var currentTime = new Date (); var month = currentTime.getMonth () + 1; var day = currentTime.getDate (); var año = currentTime.getFullYear (); // ahora cree las dos fechas formateadas en formato aaaa-mm-dd para la consulta YQL var today = year + '-' + month + '-' + day; // hoy // obtener la fecha hace 12 semanas? 1000 milisegundos * segundos en minuto * minutos en hora * 2016 horas (12 semanas, 12 * 7 días) var currentTimeMinus12Weeks = new Date ((new Date ()). GetTime () - (1000 * 60 * 60 * 2016)); var month2 = currentTimeMinus12Weeks.getMonth () + 1; var day2 = currentTimeMinus12Weeks.getDate (); var year2 = currentTimeMinus12Weeks.getFullYear (); var todayMinus12Weeks = year2 + '-' + month2 + '-' + day2; // hoy - 12 semanas // realice una consulta histórica para el código de stock de nuestro gráfico var query2 = 'select * from yahoo.finance.historicaldata donde symbol = "' + txtStockCode.value + '" y startDate = "' + todayMinus12Weeks + '"y endDate ="' + today + '"'; // ejecuta la consulta y obtén los resultados Titanium.Yahoo.yql (query2, function (e) var data = e.data; var chartData = []; // coloca en bucle nuestros datos json devueltos durante las últimas 12 semanas para (var i = (data.quote.length -1); i> = 0; i--) // insertar este valor de cierre de los marcos de tiempo en nuestra matriz chartData chartData.push (parseFloat (data.quote [i] .Close)); if (i == (data.quote.length - 1)) twelveWeekStartLabel.text = data.quote [i] .Close; if (i == 0) twelveWeekEndLabel.text = data.quote [i] .Close ; // Raphael espera un conjunto de arreglos, así que vamos a hacer que var formattedChartData = [chartData]; // active un evento que pasará los datos del gráfico al archivo chart.html // donde el Raphael lo procesará Motor de gráficos JS Ti.App.fireEvent ('renderChart', data: formattedChartData, startDate: todayMinus12Weeks, endDate: today););

El bloque final de código está haciendo otra llamada YQL, pero esta vez la llamada es a la tabla de datos de servicio llamada yahoo.finance.historicaldata que nos va a devolver una matriz JSON de valores de datos históricos. En nuestro caso, estamos buscando en las últimas doce semanas de datos para el código de stock seleccionado. Una vez que tenemos estos datos, es simplemente un caso de iteración a través de ellos hacia atrás (el elemento más antiguo es el último en la matriz JSON), y empujar la Cerrar valor de la propiedad en nuestra nueva matriz llamada chartData. Raphael utilizará los valores flotantes para representar los valores en el gráfico de barras. Finalmente, utilizamos Ti.App.fireEvent para activar el evento renderChart que creamos en el paso anterior, pasando nuestros valores a la chart.html archivo mientras lo hacemos!

Ejecute la aplicación en su simulador ahora y debería terminar con un gráfico que se presenta en nuestro tercer cuadro!

Conclusión

Bueno, como dice Porky, ¡eso es todo amigos! Hemos cubierto mucho en este tutorial, que incluye la consulta y utilización de datos de Yahoo YQL, la implementación de una biblioteca de terceros en Raphael JS Charts y la creación de una aplicación útil y bien diseñada con Titanium Mobile. Espero que hayas disfrutado siguiéndolo y me encantaría ver qué más haces con Appcelerator Titanium. Realmente es una gran plataforma móvil. Diviértete programando!