Crea un'app Quote di quotazione Visualizza grafici con Raphael JS

In questa serie di tutorial, ti insegnerò come creare un'applicazione di quotazione azionaria con Raphael JS, Titanium Mobile e il servizio web YQL di Yahoo. I grafici di Raphael JS saranno utilizzati per presentare graficamente le informazioni di quotazione di borsa, Titanium Mobile verrà utilizzato per compilare a croce un'app nativa per iOS e le tabelle di dati YQL recupereranno effettivamente le informazioni di borsa.

Da dove siamo partiti?

L'ultimo tutorial di questa serie ha introdotto YQL e Raphael JS come componenti di un'applicazione Titanium Mobile e ha dimostrato i passaggi necessari per creare la nostra interfaccia dell'app Stock Quote e cercare quotazioni azionarie utilizzando YQL. In questo tutorial, completeremo la nostra app di quotazione azionaria aggiungendo nei grafici di Raphael JS che tracciano i dati storici ottenuti utilizzando YQL.

Passaggio 5: impostazione della libreria Charting di Raphael JS

Prima di iniziare a implementare un grafico nell'app Stocks, dobbiamo prima scaricare le librerie di Raphael, inclusi i file JavaScript grafici di cui abbiamo bisogno per creare il nostro grafico a barre. Per effettuare questa operazione, attenersi alla seguente procedura:

  1. Scarica la libreria RaphaelJS principale da http://raphaeljs.com
    (Link diretto: http://github.com/DmitryBaranovskiy/raphael/raw/master/raphael-min.js).
  2. Scarica la libreria principale di Charting da http://g.raphaeljs.com
    (Link diretto: http://github.com/DmitryBaranovskiy/g.raphael/blob/master/g.raphael-min.js?raw=true) e qualsiasi altra libreria di grafici che desideri utilizzare. Per questo esempio implementeremo semplicemente il grafico a barre, che è qui: http://github.com/DmitryBaranovskiy/g.raphael/blob/master/g.bar-min.js?raw=true
  3. Metti i tuoi file scaricati nella directory "Risorse". Potresti metterli in una sottocartella se lo desideri, ma tieni presente che dovresti assicurarti che i tuoi riferimenti nei seguenti passaggi siano corretti.
  4. Il prossimo passo è rinominare il tuo raphael-min.js file per qualcosa di simile raphael-min.lib. Il motivo principale è che se il tuo file è un file JavaScript conosciuto (dato che finisce con ".js"), il validatore JSLint in Titanium proverà a convalidare la libreria Raphael JS e fallirà, facendo in modo che Titanium si blocchi - il che significa che tu non sarà in grado di eseguire la tua app!

Ora esegui nuovamente la tua app, potresti ricevere alcuni avvisi di convalida nella Console di titanio dal codice Raphael, ma tutto dovrebbe funzionare e funzionare come al punto 4.

Passaggio 6: implementazione di una WebView per il grafico Raphael JS

Utilizzeremo una WebView per presentare il nostro grafico sullo schermo. Aggiungiamo ora una WebView e la indirizziamo a un file HTML che creeremo nel passaggio successivo. Aggiungeremo anche un'etichetta per descrivere la WebView. Questo codice dovrebbe andare prima della linea scrollArea.add (quoteChartBox);, che sarà vicino alla fine del tuo file di codice:

 // Aggiungi l'etichetta del grafico e la webview, dobbiamo mostrare il nostro grafico raphael var lblChartName = Titanium.UI.createLabel (width: 280, height: 30, left: 10, top: 10, color: '# 003366', font: fontSize: 17, fontWeight: 'bold', fontFamily: 'Helvetica', testo: '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', font: fontSize: 9, fontFamily: 'Helvetica', colore: '# 000 '); quoteChartBox.add (twelveWeekStartLabel); var twelveWeekEndLabel = Titanium.UI.createLabel (width: 100, right: 10, top: 285, height: 10, textAlign: 'right', font: fontSize: 9, fontFamily: 'Helvetica', colore: '# 000 '); quoteChartBox.add (twelveWeekEndLabel);

Esegui la tua app nell'emulatore e ora dovresti vedere una WebView vuota e un'etichetta nella terza casella. Dovrai scorrere fino alla fine dello schermo per vedere la terza casella nella sua interezza.

Passaggio 7: Creazione del listato Raphael HTML ed elenco degli eventi

Ora stiamo andando a creare un file HTML che include tutte le librerie di Raphael necessarie e contiene un vuoto

tag dove verrà reso il nostro grafico. Crea un nuovo file HTML vuoto chiamato chart.html e digitare il seguente codice:

   RaphaelJS Chart       

Salva il tuo chart.html file nella directory "Risorse" se non lo hai già fatto. Quello che sta facendo questo codice è la creazione di un modello HTML di base, incluse le librerie raphael che hai scaricato in precedenza e la creazione di un div chiamato chartDiv, che è ciò in cui Raffaello renderà la nostra carta. Con i tag script sotto questo div, stiamo creando un listener di eventi Titanium standard, che verrà eseguito ogni volta che viene chiamato un evento renderChart viene sparato da qualche parte all'interno di Titanium. Questa funzione prenderà qualsiasi dato passato e lo inserirà in Raffaello per il rendering. Il r.g.barchart () funzione prende il seguente elenco di parametri per creare il grafico (in ordine):
Sinistra, In alto, Larghezza, Altezza, Dati (una matrice di matrici a valore singolo), Attributi di stile. La funzione al passaggio del mouse al termine di questo metodo dice a Raffaello di eseguire il rendering di un valore di dissolvenza in apertura, in chiusura e di visualizzazione quando viene toccata una linea di barre.

Passaggio 8: recupero dei dati storici YQL e passaggio a chart.html

Ora è il momento per il passaggio finale del nostro tutorial: rendere il grafico! Vai nel tuo searchYQL funzione, e dopo il codice precedente per ottenere i dati di magazzino, digitare quanto segue:

 // Ottieni la data odierna e suddividila in valori di mese, giorno e anno var currentTime = new Date (); var month = currentTime.getMonth () + 1; var day = currentTime.getDate (); var year = currentTime.getFullYear (); // ora creiamo le due date formattate nel formato aaaa-mm-gg per la query YQL var today = year + '-' + month + '-' + day; // oggi // ricevi la data 12 settimane fa? 1000 millisecondi * secondi in minuto * minuti in ora * 2016 ore (12 settimane, 12 * 7 giorni) 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; // oggi - 12 settimane // esegue una query storica per il codice azionario per il nostro grafico var query2 = 'seleziona * da yahoo.finance.historicaldata dove symbol = "' + txtStockCode.value + '" e startDate = "' + todayMinus12Weeks + '"e endDate ="' + today + '"'; // esegue la query e ottiene i risultati Titanium.Yahoo.yql (query2, funzione (e) var data = e.data; var chartData = []; // esegue il loop dei dati json restituiti per le ultime 12 settimane per (var i = (data.quote.length -1); i> = 0; i--) // spinge questo timeframes close value nel nostro array 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] .Chiudi ; // raphael si aspetta un array di array, quindi lascia che var formattedChartData = [chartData]; // licenzi un evento che passerà i dati del grafico attraverso il file chart.html // dove verrà reso dal Raphael Motore grafico JS Ti.App.fireEvent ('renderChart', data: formattedChartData, startDate: todayMinus12Weeks, endDate: today););

L'ultimo blocco di codice sta eseguendo un'altra chiamata YQL, ma questa volta la chiamata è alla tabella dei dati del servizio chiamata yahoo.finance.historicaldata che restituirà a noi una matrice JSON di valori di dati storici. Nel nostro caso, stiamo cercando le ultime dodici settimane di dati per il codice stock selezionato. Una volta che abbiamo questi dati, è semplicemente un caso di iterarlo indietro (l'elemento più vecchio è l'ultimo nell'array JSON), e spingendo il Vicino valore di proprietà nel nostro nuovo array chiamato ChartData. Raphael utilizzerà i valori float per rendere i valori sul grafico a barre. Finalmente, usiamo Ti.App.fireEvent per attivare l'evento renderChart che abbiamo creato nel passaggio precedente, passando i nostri valori fino a chart.html file come facciamo noi!

Esegui l'applicazione nel tuo simulatore ora e dovresti finire con un grafico presentato nella nostra terza scatola!

Conclusione

Bene, come dice Porky, è tutto gente! Abbiamo coperto molto in questo tutorial, incluso l'interrogazione e l'utilizzo dei dati di Yahoo YQL, l'implementazione di una libreria di terze parti in Raphael JS Charts e la creazione di un'app utile e ben progettata con Titanium Mobile mentre eravamo lì. Spero ti sia piaciuto seguirlo e mi piacerebbe vedere cos'altro fai con Appcelerator Titanium. È davvero una grande piattaforma mobile. Divertiti con la programmazione!