yahoo-stock-client
Version:
Module to fetch stock information via yahoo's stock api. Returns data in csv format.
213 lines (193 loc) • 5.22 kB
JavaScript
(function() {
var cat, category, categoryIdx, categoryKey, flatten, format, formatSym, formatSymbol, formats, invFormats;
formats = {
Pricing: {
a: 'Ask',
b: 'Bid',
b2: 'Ask (Realtime)',
b3: 'Bid (Realtime)',
p: 'Previous Close',
o: 'Open'
},
Dividends: {
y: 'Dividend Yield',
d: 'Dividend per Share',
r1: 'Dividend Pay Date',
q: 'Ex-Dividend Date'
},
'Date': {
c1: 'Change',
d1: 'Last Trade Date',
c: 'Change & Percent Change',
d2: 'Trade Date',
c6: 'Change (Realtime)',
t1: 'Last Trade Time',
k2: 'Change Percent (Realtime)',
p2: 'Change in Percent'
},
Averages: {
c8: 'After Hours Change (Realtime)',
m5: 'Change From 200 Day Moving Average',
c3: 'Commission',
m6: 'Percent Change From 200 Day Moving Average',
g: 'Day’s Low',
m7: 'Change From 50 Day Moving Average',
h: 'Day’s High',
m8: 'Percent Change From 50 Day Moving Average',
k1: 'Last Trade (Realtime) With Time',
m3: '50 Day Moving Average',
l: 'Last Trade (With Time)',
m4: '200 Day Moving Average',
l1: 'Last Trade (Price Only)',
t8: '1 yr Target Price'
},
Misc: {
w1: 'Day’s Value Change',
g1: 'Holdings Gain Percent',
w4: 'Day’s Value Change (Realtime)',
g3: 'Annualized Gain',
p1: 'Price Paid',
g4: 'Holdings Gain',
m: 'Day’s Range',
g5: 'Holdings Gain Percent (Realtime)',
m2: 'Day’s Range (Realtime)',
g6: 'Holdings Gain (Realtime)',
t7: 'Ticker Trend',
t6: 'Trade Links',
i5: 'Order Book (Realtime)',
l2: 'High Limit',
l3: 'Low Limit',
v1: 'Holdings Value',
v7: 'Holdings Value (Realtime)',
s6: 'Revenue'
},
'52 Week Pricing': {
k: '52 Week High',
j: '52 week Low',
j5: 'Change From 52 Week Low',
k4: 'Change From 52 week High',
j6: 'Percent Change From 52 week Low',
k5: 'Percent Change From 52 week High',
w: '52 week Range'
},
'Symbol Info': {
v: 'More Info',
j1: 'Market Capitalization',
j3: 'Market Cap (Realtime)',
f6: 'Float Shares',
n: 'Name',
n4: 'Notes',
s: 'Symbol',
s1: 'Shares Owned',
x: 'Stock Exchange',
j2: 'Shares Outstanding'
},
Volume: {
v: 'Volume',
a5: 'Ask Size',
b6: 'Bid Size',
k3: 'Last Trade Size',
a2: 'Average Daily Volume'
},
Ratios: {
e: 'Earnings per Share',
e7: 'EPS Estimate Current Year',
e8: 'EPS Estimate Next Year',
e9: 'EPS Estimate Next Quarter',
b4: 'Book Value',
j4: 'EBITDA',
p5: 'Price / Sales',
p6: 'Price / Book',
r: 'P/E Ratio',
r2: 'P/E Ratio (Realtime)',
r5: 'PEG Ratio',
r6: 'Price / EPS Estimate Current Year',
r7: 'Price / EPS Estimate Next Year',
s7: 'Short Ratio'
}
};
flatten = function(arr) {
var innerVal, newArr, val, _i, _j, _len, _len1;
newArr = [];
for (_i = 0, _len = arr.length; _i < _len; _i++) {
val = arr[_i];
for (_j = 0, _len1 = val.length; _j < _len1; _j++) {
innerVal = val[_j];
newArr.push(innerVal);
}
}
return newArr;
};
/*
Inversion of the Key Value Map of Formats
Discards the categories
*/
invFormats = {};
for (cat in formats) {
category = formats[cat];
for (formatSymbol in category) {
format = category[formatSymbol];
invFormats[format] = formatSymbol;
}
}
exports.formatsToFormatSymbols = function(formats) {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = formats.length; _i < _len; _i++) {
format = formats[_i];
_results.push(invFormats[format]);
}
return _results;
};
/*
Array of format options supported by Yahoo API
*/
exports.Formats = (function() {
var _results;
_results = [];
for (categoryIdx in formats) {
category = formats[categoryIdx];
_results.push((function() {
var _results1;
_results1 = [];
for (formatSymbol in category) {
format = category[formatSymbol];
_results1.push(format);
}
return _results1;
})());
}
return _results;
})();
exports.Formats = flatten(exports.Formats);
/*
Categories of format options
*/
exports.Categories = {
'All': exports.Formats
};
for (categoryKey in formats) {
category = formats[categoryKey];
exports.Categories[categoryKey] = (function() {
var _results;
_results = [];
for (formatSym in category) {
format = category[formatSym];
_results.push(format);
}
return _results;
})();
}
/*
Added category can be used with new client
*/
exports.addCategory = function(name, formatOptions) {
if (typeof name === !'string') {
throw Error('Name must be a string');
}
if (!(formatOptions instanceof Array)) {
throw Error('formatOptions must be an Array');
}
return exports.Categories[name] = formatOptions;
};
}).call(this);