intraday
Version:
Fetch intraday stock data from yahoo
72 lines (63 loc) • 2.06 kB
JavaScript
// Generated by CoffeeScript 1.6.3
(function() {
var KEY_RE, clean, csv, filt, http, toObj;
http = require('http');
csv = require('csv');
filt = function(value, index, array) {
return value.length === 6;
};
toObj = function(list, values) {
var i, j, res, ret, _i, _j, _ref, _ref1;
ret = [];
for (i = _i = 0, _ref = values.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
res = {};
for (j = _j = 0, _ref1 = list.length; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; j = 0 <= _ref1 ? ++_j : --_j) {
res[list[j]] = values[i][j];
}
ret.push(res);
}
return ret;
};
KEY_RE = /:(.+)$/;
clean = function(key) {
var match;
match = key.match(KEY_RE);
if (match && match.length === 2) {
key = match[1].toLowerCase();
}
return key;
};
module.exports = function(symbol, numDays, cb) {
var req, url;
if (arguments.length === 2) {
return module.exports(arguments[0], 1, arguments[1]);
}
url = "http://chartapi.finance.yahoo.com/instrument/1.0/" + symbol + "/chartdata;type=quote;range=" + numDays + "d/csv";
req = http.get(url, function(res) {
if (res.statusCode === 200) {
csv().from(res).to.array(function(data) {
var keys, values;
if (!data) {
return typeof cb === "function" ? cb('No data', null) : void 0;
}
values = data.filter(filt);
keys = values.shift();
if (keys == null) {
return typeof cb === "function" ? cb('Invalid symbol', null) : void 0;
}
keys = typeof keys.map === "function" ? keys.map(clean) : void 0;
return typeof cb === "function" ? cb(null, toObj(keys, values)) : void 0;
});
} else {
if (typeof cb === "function") {
cb(res.statusCode, null);
}
}
return null;
});
req.on('error', function(e) {
return typeof cb === "function" ? cb(e.message, null) : void 0;
});
return null;
};
}).call(this);