UNPKG

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
(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);