UNPKG

intraday

Version:

Fetch intraday stock data from yahoo

72 lines (63 loc) 2.06 kB
// 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);