|
$(function () { |
|
var table = d3.select("table") |
|
|
|
table.append("thead") |
|
table.append("tbody"); |
|
table.append("tfoot"); |
|
|
|
function update(res) { |
|
var yahooResult = res; |
|
var keys = Object.keys(yahooResult.query.results.quote[0]); |
|
|
|
var header = table.select("thead") |
|
.selectAll("th") |
|
.data(keys); |
|
|
|
header.exit().remove(); |
|
header.enter().append("th"); |
|
|
|
header.text(function (d, i) { |
|
return d; |
|
}); |
|
|
|
var result = yahooResult.query.results.quote; |
|
var rows = table.select("tbody") |
|
.selectAll("tr") |
|
.data(result); |
|
|
|
rows.exit().remove(); |
|
rows.enter().append("tr"); |
|
|
|
var columns = rows.selectAll("td") |
|
.data(function (d, i) { |
|
var ret = $.map(d, function (v) { |
|
return v; |
|
}); |
|
|
|
for (var j = 0; j < ret.length; j++) { |
|
if (this.length && this[j] && this[j].innerHTML != ret[j]) { |
|
d3.select(this[j]) |
|
.attr("class", "update"); |
|
} |
|
} |
|
return ret; |
|
}); |
|
|
|
//console.log(JSON.stringify(columns.enter())); |
|
|
|
columns.exit().remove(); |
|
columns.enter().append("td"); |
|
|
|
var colorPalette = ["AntiqueWhite", "MistyRose", "Beige", "Azure", "NavajoWhite"]; |
|
|
|
columns |
|
.text(function (d, i) { |
|
return d; |
|
}) |
|
.style("background-color", |
|
function (d) { |
|
if (this.classList.contains("update")) { |
|
return colorPalette[Math.floor(Math.random() * colorPalette.length)]; |
|
} |
|
}) |
|
.attr("class", ""); |
|
} |
|
|
|
tickers = ["YHOO", "AAPL", "GOOG", "MSFT", "VMW", "YELP", "FB", "LNKD", "TWTR", "TRLA"]; |
|
fields = ["symbol", "AverageDailyVolume", "Change", "MarketCapitalization", "LastTradePriceOnly", "DaysRange", "Volume", "StockExchange"]; |
|
|
|
(function refresh() { |
|
tickersWithQuotes = tickers.map(function (d) { |
|
return "'" + d + "'"; |
|
}); |
|
|
|
var preUrl = "http://query.yahooapis.com/v1/public/yql?q="; |
|
var query = encodeURIComponent('select ' + fields.join(",") + ' from yahoo.finance.quote where symbol in (' + tickersWithQuotes.join(",") + ')'); |
|
var postUrl = "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="; |
|
|
|
var yahooFinanceQueryUrl = preUrl + query + postUrl |
|
|
|
$.ajax({ |
|
url: yahooFinanceQueryUrl |
|
}) |
|
.done(function (res) { |
|
update(res); |
|
setTimeout(refresh, 1000); |
|
}) |
|
.fail(function () { |
|
console.log("Error calling Yahoo API"); |
|
}); |
|
})(); |
|
|
|
}); |