topical media & game development
lib-unity-future-HouseOfTheFuture-Assets-Scripts-StockImporter.js / js
/*
* This file is part of the "House of the Future" showcase project by M2H (http://www.M2H.nl)
* The original author of this code Mike Hergaarden.
* Feel free to use this code for your own projects, drop me a line if you made something exciting!
*/
//Buy, sell, sell!
#pragma strict
import System.DateTime;
import System.IO;
private var monthStrings : String[] = new String[13];
private var lineRenderer : LineRenderer;
public var graphLB : Transform;
public var graphTR : Transform;
public var graphDummy : Transform;
private var realMaxY : float;
private var realMinY : float;
private var realMaxX : float;
private var realMinX : float;
private var stockDataList : ArrayList = new ArrayList();
private var maxStockY : float = 0;
private var minStockY : float = 0;
function Awake(){
lineRenderer = GetComponent(LineRenderer);
monthStrings[1]="Jan";
monthStrings[3]="Feb";
monthStrings[4]="Mar";
monthStrings[4]="Apr";
monthStrings[5]="May";
monthStrings[6]="Jun";
monthStrings[7]="Jul";
monthStrings[8]="Aug";
monthStrings[9]="Sep";
monthStrings[10]="Oct";
monthStrings[11]="Nov";
monthStrings[12]="Dec";
realMaxY = graphTR.position.y;
realMinY = graphLB.position.y;
realMaxX = graphTR.localPosition.x;
realMinX = graphLB.localPosition.x;
ReloadStocks();
}
public var stockName : String = "NASDAQ:GOOG";
public var daysBack : int = 14;
public var stockTitle : String = "NASDAQ:GOOG - Last 14 days - Latest: ";
function ReloadStocks () {
minStockY = maxStockY=0;
** DOWNLOAD STOCK DATA *
//
var now : System.DateTime = System.DateTime.Now;
var dayStringNow : int = now.Day;
var monthStringNow : int = now.Month;
var yearStringNow : int = now.Year;
var prev : System.DateTime = now.AddDays(-daysBack);
var dayStringPrev : int = prev.Day;
var monthStringPrev : int = prev.Month;
var yearStringPrev : int = prev.Year;
var url : String = "http://www.google.com/finance/historical?q="+stockName+"&startdate="+monthStrings[monthStringPrev]+"+"+dayStringPrev+","+yearStringPrev+"&enddate="+monthStrings[monthStringNow]+"+"+dayStringNow+","+yearStringNow+"&output=csv";
//Debug.Log(url);
var www : WWW = new WWW (url);
yield www;
var stockData : String = www.data;
var i : int =0;
var splitted : String[] = stockData.Split("\n"[0]);
for(var aLine : String in splitted){
if(i==0){
i++;
continue;
}
if(i>14){
break;
}
var data : String[] = aLine.Split(","[0]);
data[4] = data[4].Replace(".", ",");
var value : float = parseFloat(data[4]);
if(value<minStockY || minStockY==0){
minStockY=value;
}
if(value>maxStockY){
maxStockY=value;
}
stockDataList.Add(value);
i++;
}
//GOT DATA, CREATE DISPLAY
i = 0;
for(var j = stockDataList.Count-1;j>=0;j--){
var valueX : float = stockDataList[j];
graphDummy.position = graphLB.position;
graphDummy.localPosition.x += GetXPosOnChart((i+1), 14);
graphDummy.localPosition.y += GetYPosOnChart(valueX);
lineRenderer.SetPosition(i, graphDummy.position);
i++;
}
var textMesh : TextMesh = GetComponent(TextMesh);
textMesh.text = stockTitle+""+stockDataList[stockDataList.Count-1]+"\nMin: "+minStockY+" Max: "+maxStockY;
}
function GetXPosOnChart(item : int, totalitems: int) : float {
return (((realMaxX-realMinX)/totalitems)*item);
}
function GetYPosOnChart(value : float) : float {
var percent : float = ((value-minStockY)/(maxStockY-minStockY));
return ((realMaxY-realMinY) * percent);
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.