// qStr can only accept 1 stock query.
// Multiple stocks query will be done later.
private GoogleFinance getStockDetail(String qStr)
{
GoogleFinance gf = new GoogleFinance();
String q = this.getStockString("http://finance.google.com/finance/info?client=ig&q=" + qStr).Trim();
if (q.Equals(""))
{
return null;
}
else
{
// parsing, only one stock
// 1. { }
String[] op = { "{", "}" };
String[] s1 = q.Split(op,StringSplitOptions.RemoveEmptyEntries);
String s1f = s1[1];
// 2. , \n
s1f = s1f.Replace(" : ", ":");
s1f = s1f.Replace(": ", ":");
s1f = s1f.Replace(" :", ":");
s1f = s1f.Replace(",", "");
String[] op2 = {"\n"};
String[] s2 = s1f.Split(op2,StringSplitOptions.RemoveEmptyEntries);
foreach(String s2f in s2)
{
// 3. ":"
String[] op3 = { "\":\"" };
String[] s3 = s2f.Split(op3, StringSplitOptions.RemoveEmptyEntries);
String param, value;
param = s3[0].Replace("\"", "");
value = s3[1].Replace("\"", "");
// 4. addin
/*
id : Internal Google Security ID?
t : Ticker
e : Exchange Name
l : Last Price
l_cur : Last Price with Currency
lt : Last Trade Date/Time
c : Change (in ccy) - formatted with +/-
cp : Change (%)
*/
if (param.Equals("id"))
gf.id = value;
else if (param.Equals("t"))
gf.ticker = value;
else if (param.Equals("e"))
gf.exchangeName = value;
else if (param.Equals("l"))
gf.lastPrice = value;
else if (param.Equals("l_cur"))
gf.lastPriceCurrency = value;
else if (param.Equals("lt"))
gf.lastTradeDateTime = value;
else if (param.Equals("c"))
gf.changeInCCY = value;
else if (param.Equals("cp"))
gf.changPercentage = value;
}
return gf;
}
}
private String getStockString(String qStr)
{
try
{
HttpWebRequest request = WebRequest.Create(qStr) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
return reader.ReadToEnd();
}
}
catch (Exception ex)
{
return "";
}
}
more fucntions:
protected void Timer2_Tick(object sender, EventArgs e)
{
gf = this.getStockDetail("NASDAQ:GOOG");
String lp = gf.lastPrice;
float llp = 0;
if (Session["lastPrice"] == null)
{
Session.Add("lastPrice", lp);
llp = float.Parse(lp);
}
else
{
llp = float.Parse(Session["lastPrice"].ToString());
Session["lastPrice"] = lp;
}
float diff = llp - float.Parse(lp);
if (diff == 0)
{
lp = "<font color='black'>" + lp + "</font>";
}
else if (diff > 0)
{
lp = "<font color='red'>" + lp + "</font>";
}
else if (diff < 0)
{
lp = "<font color='green'>" + lp + "</font>";
}
String changccy = gf.changeInCCY;
String frontc = changccy.Substring(0, 1);
if(frontc.Equals("+"))
{
changccy = "<font color='green'>" + changccy + "</font>";
}
else if(frontc.Equals("-"))
{
changccy = "<font color='red'>" + changccy + "</font>";
}
StringBuilder output = new StringBuilder();
output.AppendFormat("id:{0}<br/>Ticker:{1}<br/>Exchange Name:{2}<br/>Last Price:{3}<br/>Trade Time:{4}<br/>Change in CCY:{5}<br/>Change in Percentage:{6}<br/>{7}<br/>"
, gf.id, gf.ticker, gf.exchangeName, lp, gf.lastTradeDateTime, changccy, gf.changPercentage, DateTime.UtcNow.ToString());
Label1.Text = output.ToString();
}