-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
101 lines (95 loc) · 3.64 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'use strict';
const request = require('request');
const getUrl = (symbol, extension) => {
if (extension === undefined || extension === '') {
extension = '';
} else {
extension = `.${extension}`;
}
let url = `https://query1.finance.yahoo.com/v10/finance/\
quoteSummary/${symbol}${extension}?&modules=financialData`;
return url;
};
const getJson = url =>
new Promise((resolve, reject) => {
let requestOpts = {
url: url,
json: true,
headers: { 'User-agent': 'request' },
};
request.get(requestOpts, (err, res, data) => {
if (err) {
reject(err);
} else if (res.statusCode !== 200) {
reject(res.statusCode);
} else {
resolve(data);
}
});
});
const getQuote = (symbol, extension) =>
new Promise((resolve, reject) => {
let url = getUrl(symbol, extension);
getJson(url)
.then(data => {
resolve({
symbol,
currency:
data.quoteSummary.result[0].financialData
.financialCurrency,
currentPrice:
data.quoteSummary.result[0].financialData.currentPrice
.raw,
totalRevenue:
data.quoteSummary.result[0].financialData.totalRevenue
.fmt,
ebitda:
data.quoteSummary.result[0].financialData.ebitda.fmt,
cashPerShare:
data.quoteSummary.result[0].financialData
.totalCashPerShare.raw,
currentRatio:
data.quoteSummary.result[0].financialData.currentRatio
.raw,
quickRatio:
data.quoteSummary.result[0].financialData.quickRatio
.raw,
debtToEquity:
data.quoteSummary.result[0].financialData.debtToEquity
.raw,
revenuePerShare:
data.quoteSummary.result[0].financialData
.revenuePerShare.raw,
returnOnEquity:
data.quoteSummary.result[0].financialData.returnOnEquity
.fmt,
grossProfits:
data.quoteSummary.result[0].financialData.grossProfits
.fmt,
freeCashflow:
data.quoteSummary.result[0].financialData.freeCashflow
.fmt,
operatingCashflow:
data.quoteSummary.result[0].financialData
.operatingCashflow.fmt,
grossMargins:
data.quoteSummary.result[0].financialData.grossMargins
.fmt,
operatingMargins:
data.quoteSummary.result[0].financialData
.operatingMargins.fmt,
profitMargins:
data.quoteSummary.result[0].financialData.profitMargins
.fmt,
ebitdaMargins:
data.quoteSummary.result[0].financialData.ebitdaMargins
.fmt,
});
})
.catch(err => {
reject(err);
});
});
module.exports = {
getQuote: getQuote,
};