nse-bse-api 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +194 -0
- package/dist/bse/BSE.d.ts +141 -0
- package/dist/bse/BSE.d.ts.map +1 -0
- package/dist/bse/BSE.js +453 -0
- package/dist/bse/BSE.js.map +1 -0
- package/dist/bse/constants/index.d.ts +341 -0
- package/dist/bse/constants/index.d.ts.map +1 -0
- package/dist/bse/constants/index.js +341 -0
- package/dist/bse/constants/index.js.map +1 -0
- package/dist/bse/index.d.ts +12 -0
- package/dist/bse/index.d.ts.map +1 -0
- package/dist/bse/index.js +16 -0
- package/dist/bse/index.js.map +1 -0
- package/dist/bse/types/index.d.ts +120 -0
- package/dist/bse/types/index.d.ts.map +1 -0
- package/dist/bse/types/index.js +20 -0
- package/dist/bse/types/index.js.map +1 -0
- package/dist/bse/utils/SymbolParser.d.ts +16 -0
- package/dist/bse/utils/SymbolParser.d.ts.map +1 -0
- package/dist/bse/utils/SymbolParser.js +58 -0
- package/dist/bse/utils/SymbolParser.js.map +1 -0
- package/dist/bse/utils/helpers.d.ts +21 -0
- package/dist/bse/utils/helpers.d.ts.map +1 -0
- package/dist/bse/utils/helpers.js +77 -0
- package/dist/bse/utils/helpers.js.map +1 -0
- package/dist/bse/utils/throttle.d.ts +4 -0
- package/dist/bse/utils/throttle.d.ts.map +1 -0
- package/dist/bse/utils/throttle.js +38 -0
- package/dist/bse/utils/throttle.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/nse/api/corporate-api.d.ts +30 -0
- package/dist/nse/api/corporate-api.d.ts.map +1 -0
- package/dist/nse/api/corporate-api.js +90 -0
- package/dist/nse/api/corporate-api.js.map +1 -0
- package/dist/nse/api/download-api.d.ts +42 -0
- package/dist/nse/api/download-api.d.ts.map +1 -0
- package/dist/nse/api/download-api.js +144 -0
- package/dist/nse/api/download-api.js.map +1 -0
- package/dist/nse/api/equity-api.d.ts +50 -0
- package/dist/nse/api/equity-api.d.ts.map +1 -0
- package/dist/nse/api/equity-api.js +103 -0
- package/dist/nse/api/equity-api.js.map +1 -0
- package/dist/nse/api/historical-api.d.ts +34 -0
- package/dist/nse/api/historical-api.d.ts.map +1 -0
- package/dist/nse/api/historical-api.js +126 -0
- package/dist/nse/api/historical-api.js.map +1 -0
- package/dist/nse/api/index.d.ts +11 -0
- package/dist/nse/api/index.d.ts.map +1 -0
- package/dist/nse/api/index.js +11 -0
- package/dist/nse/api/index.js.map +1 -0
- package/dist/nse/api/ipo-api.d.ts +26 -0
- package/dist/nse/api/ipo-api.d.ts.map +1 -0
- package/dist/nse/api/ipo-api.js +46 -0
- package/dist/nse/api/ipo-api.js.map +1 -0
- package/dist/nse/api/market-api.d.ts +34 -0
- package/dist/nse/api/market-api.d.ts.map +1 -0
- package/dist/nse/api/market-api.js +58 -0
- package/dist/nse/api/market-api.js.map +1 -0
- package/dist/nse/api/options-api.d.ts +35 -0
- package/dist/nse/api/options-api.d.ts.map +1 -0
- package/dist/nse/api/options-api.js +207 -0
- package/dist/nse/api/options-api.js.map +1 -0
- package/dist/nse/constants/index.d.ts +29 -0
- package/dist/nse/constants/index.d.ts.map +1 -0
- package/dist/nse/constants/index.js +43 -0
- package/dist/nse/constants/index.js.map +1 -0
- package/dist/nse/http/http-client.d.ts +38 -0
- package/dist/nse/http/http-client.d.ts.map +1 -0
- package/dist/nse/http/http-client.js +164 -0
- package/dist/nse/http/http-client.js.map +1 -0
- package/dist/nse/index.d.ts +19 -0
- package/dist/nse/index.d.ts.map +1 -0
- package/dist/nse/index.js +24 -0
- package/dist/nse/index.js.map +1 -0
- package/dist/nse/nse/nse-client.d.ts +85 -0
- package/dist/nse/nse/nse-client.d.ts.map +1 -0
- package/dist/nse/nse/nse-client.js +105 -0
- package/dist/nse/nse/nse-client.js.map +1 -0
- package/dist/nse/types/index.d.ts +123 -0
- package/dist/nse/types/index.d.ts.map +1 -0
- package/dist/nse/types/index.js +5 -0
- package/dist/nse/types/index.js.map +1 -0
- package/dist/nse/utils/date-formatter.d.ts +36 -0
- package/dist/nse/utils/date-formatter.d.ts.map +1 -0
- package/dist/nse/utils/date-formatter.js +70 -0
- package/dist/nse/utils/date-formatter.js.map +1 -0
- package/dist/nse/utils/file-operations.d.ts +16 -0
- package/dist/nse/utils/file-operations.d.ts.map +1 -0
- package/dist/nse/utils/file-operations.js +74 -0
- package/dist/nse/utils/file-operations.js.map +1 -0
- package/dist/nse/utils/index.d.ts +6 -0
- package/dist/nse/utils/index.d.ts.map +1 -0
- package/dist/nse/utils/index.js +6 -0
- package/dist/nse/utils/index.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist-cjs/bse/BSE.js +493 -0
- package/dist-cjs/bse/BSE.js.map +1 -0
- package/dist-cjs/bse/constants/index.js +352 -0
- package/dist-cjs/bse/constants/index.js.map +1 -0
- package/dist-cjs/bse/index.js +36 -0
- package/dist-cjs/bse/index.js.map +1 -0
- package/dist-cjs/bse/types/index.js +26 -0
- package/dist-cjs/bse/types/index.js.map +1 -0
- package/dist-cjs/bse/utils/SymbolParser.js +62 -0
- package/dist-cjs/bse/utils/SymbolParser.js.map +1 -0
- package/dist-cjs/bse/utils/helpers.js +117 -0
- package/dist-cjs/bse/utils/helpers.js.map +1 -0
- package/dist-cjs/bse/utils/throttle.js +42 -0
- package/dist-cjs/bse/utils/throttle.js.map +1 -0
- package/dist-cjs/index.js +54 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/nse/api/corporate-api.js +94 -0
- package/dist-cjs/nse/api/corporate-api.js.map +1 -0
- package/dist-cjs/nse/api/download-api.js +151 -0
- package/dist-cjs/nse/api/download-api.js.map +1 -0
- package/dist-cjs/nse/api/equity-api.js +107 -0
- package/dist-cjs/nse/api/equity-api.js.map +1 -0
- package/dist-cjs/nse/api/historical-api.js +130 -0
- package/dist-cjs/nse/api/historical-api.js.map +1 -0
- package/dist-cjs/nse/api/index.js +21 -0
- package/dist-cjs/nse/api/index.js.map +1 -0
- package/dist-cjs/nse/api/ipo-api.js +50 -0
- package/dist-cjs/nse/api/ipo-api.js.map +1 -0
- package/dist-cjs/nse/api/market-api.js +62 -0
- package/dist-cjs/nse/api/market-api.js.map +1 -0
- package/dist-cjs/nse/api/options-api.js +211 -0
- package/dist-cjs/nse/api/options-api.js.map +1 -0
- package/dist-cjs/nse/constants/index.js +46 -0
- package/dist-cjs/nse/constants/index.js.map +1 -0
- package/dist-cjs/nse/http/http-client.js +171 -0
- package/dist-cjs/nse/http/http-client.js.map +1 -0
- package/dist-cjs/nse/index.js +50 -0
- package/dist-cjs/nse/index.js.map +1 -0
- package/dist-cjs/nse/nse/nse-client.js +109 -0
- package/dist-cjs/nse/nse/nse-client.js.map +1 -0
- package/dist-cjs/nse/types/index.js +6 -0
- package/dist-cjs/nse/types/index.js.map +1 -0
- package/dist-cjs/nse/utils/date-formatter.js +80 -0
- package/dist-cjs/nse/utils/date-formatter.js.map +1 -0
- package/dist-cjs/nse/utils/file-operations.js +82 -0
- package/dist-cjs/nse/utils/file-operations.js.map +1 -0
- package/dist-cjs/nse/utils/index.js +22 -0
- package/dist-cjs/nse/utils/index.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/types/index.js +47 -0
- package/dist-cjs/types/index.js.map +1 -0
- package/package.json +99 -0
package/dist/bse/BSE.js
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { BSEError, TimeoutError, ConnectionError } from './types/index.js';
|
|
5
|
+
import { SymbolParser } from './utils/SymbolParser.js';
|
|
6
|
+
import { Throttle } from './utils/throttle.js';
|
|
7
|
+
import { getPath, formatDate, formatDateSlash, unzipFile } from './utils/helpers.js';
|
|
8
|
+
/**
|
|
9
|
+
* Unofficial TypeScript API for BSE India
|
|
10
|
+
*/
|
|
11
|
+
export class BSE {
|
|
12
|
+
static version = '1.0.0';
|
|
13
|
+
static baseUrl = 'https://www.bseindia.com/';
|
|
14
|
+
static apiUrl = 'https://api.bseindia.com/BseIndiaAPI/api';
|
|
15
|
+
static validGroups = [
|
|
16
|
+
'A', 'B', 'E', 'F', 'FC', 'GC', 'I', 'IF', 'IP', 'M', 'MS', 'MT',
|
|
17
|
+
'P', 'R', 'T', 'TS', 'W', 'X', 'XD', 'XT', 'Y', 'Z', 'ZP', 'ZY'
|
|
18
|
+
];
|
|
19
|
+
session;
|
|
20
|
+
dir;
|
|
21
|
+
symbolParser;
|
|
22
|
+
constructor(config = {}) {
|
|
23
|
+
this.dir = getPath(config.downloadFolder || './downloads', true);
|
|
24
|
+
this.symbolParser = new SymbolParser();
|
|
25
|
+
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0';
|
|
26
|
+
this.session = axios.create({
|
|
27
|
+
timeout: config.timeout || 10000,
|
|
28
|
+
headers: {
|
|
29
|
+
'User-Agent': userAgent,
|
|
30
|
+
'Accept': 'application/json, text/plain, */*',
|
|
31
|
+
'Accept-Language': 'en-US,en;q=0.5',
|
|
32
|
+
'Origin': BSE.baseUrl,
|
|
33
|
+
'Referer': BSE.baseUrl,
|
|
34
|
+
'Connection': 'keep-alive',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Close the HTTP session
|
|
40
|
+
*/
|
|
41
|
+
close() {
|
|
42
|
+
// Axios doesn't need explicit closing like Python requests
|
|
43
|
+
}
|
|
44
|
+
async download(url, folder, params, filename) {
|
|
45
|
+
const fname = filename || url.split('/').pop() || 'download';
|
|
46
|
+
const filePath = path.join(folder, fname);
|
|
47
|
+
await Throttle.check();
|
|
48
|
+
try {
|
|
49
|
+
const response = await this.session.get(url, {
|
|
50
|
+
params,
|
|
51
|
+
responseType: 'stream',
|
|
52
|
+
timeout: 30000, // 30 seconds for downloads
|
|
53
|
+
});
|
|
54
|
+
if (response.status === 404) {
|
|
55
|
+
throw new BSEError('Report is unavailable or not yet updated.');
|
|
56
|
+
}
|
|
57
|
+
const writer = fs.createWriteStream(filePath);
|
|
58
|
+
response.data.pipe(writer);
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
writer.on('finish', () => resolve(filePath));
|
|
61
|
+
writer.on('error', reject);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error.code === 'ECONNABORTED') {
|
|
66
|
+
throw new TimeoutError('Request timed out');
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async request(url, params, timeout = 10000) {
|
|
72
|
+
try {
|
|
73
|
+
const response = await this.session.get(url, {
|
|
74
|
+
params,
|
|
75
|
+
timeout,
|
|
76
|
+
});
|
|
77
|
+
return response;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error.code === 'ECONNABORTED') {
|
|
81
|
+
throw new TimeoutError('Request timed out');
|
|
82
|
+
}
|
|
83
|
+
if (error.response) {
|
|
84
|
+
throw new ConnectionError(`${error.response.status}: ${error.response.statusText}`);
|
|
85
|
+
}
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async lookup(scrip) {
|
|
90
|
+
const url = `${BSE.apiUrl}/PeerSmartSearch/w`;
|
|
91
|
+
const params = { Type: 'SS', text: scrip };
|
|
92
|
+
await Throttle.check('lookup');
|
|
93
|
+
const response = await this.request(url, params);
|
|
94
|
+
return response.data.replace(/ /g, ' ');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Download the daily bhavcopy report for specified date
|
|
98
|
+
*/
|
|
99
|
+
async bhavcopyReport(date, folder) {
|
|
100
|
+
const targetFolder = folder ? getPath(folder, true) : this.dir;
|
|
101
|
+
const dateStr = formatDate(date);
|
|
102
|
+
const url = `${BSE.baseUrl}/download/BhavCopy/Equity/BhavCopy_BSE_CM_0_0_0_${dateStr}_F_0000.CSV`;
|
|
103
|
+
const filePath = await this.download(url, targetFolder);
|
|
104
|
+
if (!fs.existsSync(filePath)) {
|
|
105
|
+
throw new BSEError(`Failed to download file: ${path.basename(filePath)}`);
|
|
106
|
+
}
|
|
107
|
+
return filePath;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Download the daily delivery report for specified date
|
|
111
|
+
*/
|
|
112
|
+
async deliveryReport(date, folder) {
|
|
113
|
+
const targetFolder = folder ? getPath(folder, true) : this.dir;
|
|
114
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
115
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
116
|
+
const year = date.getFullYear();
|
|
117
|
+
const url = `${BSE.baseUrl}/BSEDATA/gross/${year}/SCBSEALL${day}${month}.zip`;
|
|
118
|
+
let filePath = await this.download(url, targetFolder);
|
|
119
|
+
if (!fs.existsSync(filePath)) {
|
|
120
|
+
throw new BSEError(`Failed to download file: ${path.basename(filePath)}`);
|
|
121
|
+
}
|
|
122
|
+
// Extract zip file
|
|
123
|
+
filePath = await unzipFile(filePath, targetFolder);
|
|
124
|
+
// Convert pipe-separated to CSV
|
|
125
|
+
const content = fs.readFileSync(filePath);
|
|
126
|
+
const csvContent = content.toString().replace(/\|/g, ',');
|
|
127
|
+
const csvPath = filePath.replace(path.extname(filePath), '.csv');
|
|
128
|
+
fs.writeFileSync(csvPath, csvContent);
|
|
129
|
+
if (filePath !== csvPath) {
|
|
130
|
+
fs.unlinkSync(filePath);
|
|
131
|
+
}
|
|
132
|
+
return csvPath;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* All corporate announcements
|
|
136
|
+
*/
|
|
137
|
+
async announcements(options = {}) {
|
|
138
|
+
const { pageNo = 1, fromDate = new Date(), toDate = new Date(), segment = 'equity', scripcode, category = '-1', subcategory = '-1' } = options;
|
|
139
|
+
const segmentType = segment === 'equity' ? 'C' : (segment === 'debt' ? 'D' : 'M');
|
|
140
|
+
if (fromDate > toDate) {
|
|
141
|
+
throw new BSEError("'fromDate' cannot be greater than 'toDate'");
|
|
142
|
+
}
|
|
143
|
+
if (subcategory !== '-1' && category === '-1') {
|
|
144
|
+
throw new BSEError(`Specify a 'category' for subcategory: ${subcategory}`);
|
|
145
|
+
}
|
|
146
|
+
const url = `${BSE.apiUrl}/AnnSubCategoryGetData/w`;
|
|
147
|
+
const params = {
|
|
148
|
+
pageno: pageNo,
|
|
149
|
+
strCat: category,
|
|
150
|
+
subcategory: subcategory,
|
|
151
|
+
strPrevDate: formatDate(fromDate),
|
|
152
|
+
strToDate: formatDate(toDate),
|
|
153
|
+
strSearch: 'P',
|
|
154
|
+
strscrip: scripcode,
|
|
155
|
+
strType: segmentType,
|
|
156
|
+
};
|
|
157
|
+
await Throttle.check();
|
|
158
|
+
const response = await this.request(url, params);
|
|
159
|
+
return response.data;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* All forthcoming corporate actions
|
|
163
|
+
*/
|
|
164
|
+
async actions(options = {}) {
|
|
165
|
+
const { segment = 'equity', fromDate, toDate, byDate = 'ex', scripcode, sector = '', purposeCode } = options;
|
|
166
|
+
const segmentType = segment === 'equity' ? '0' : (segment === 'debt' ? '1' : '2');
|
|
167
|
+
const byType = byDate === 'ex' ? 'E' : (byDate === 'record' ? 'R' : 'B');
|
|
168
|
+
const params = {
|
|
169
|
+
ddlcategorys: byType,
|
|
170
|
+
ddlindustrys: sector,
|
|
171
|
+
segment: segmentType,
|
|
172
|
+
strSearch: 'D',
|
|
173
|
+
};
|
|
174
|
+
if (fromDate && toDate) {
|
|
175
|
+
if (fromDate > toDate) {
|
|
176
|
+
throw new BSEError("'fromDate' cannot be greater than 'toDate'");
|
|
177
|
+
}
|
|
178
|
+
params.Fdate = formatDate(fromDate);
|
|
179
|
+
params.TDate = formatDate(toDate);
|
|
180
|
+
}
|
|
181
|
+
if (purposeCode) {
|
|
182
|
+
params.Purposecode = purposeCode;
|
|
183
|
+
}
|
|
184
|
+
if (scripcode) {
|
|
185
|
+
params.scripcode = scripcode;
|
|
186
|
+
}
|
|
187
|
+
const response = await this.request(`${BSE.apiUrl}/DefaultData/w`, params);
|
|
188
|
+
return response.data;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Corporate result calendar
|
|
192
|
+
*/
|
|
193
|
+
async resultCalendar(options = {}) {
|
|
194
|
+
const { fromDate, toDate, scripcode } = options;
|
|
195
|
+
const params = {};
|
|
196
|
+
if (fromDate && toDate) {
|
|
197
|
+
if (fromDate > toDate) {
|
|
198
|
+
throw new BSEError("'fromDate' cannot be greater than 'toDate'");
|
|
199
|
+
}
|
|
200
|
+
params.fromdate = formatDate(fromDate);
|
|
201
|
+
params.todate = formatDate(toDate);
|
|
202
|
+
}
|
|
203
|
+
if (scripcode) {
|
|
204
|
+
params.scripcode = scripcode;
|
|
205
|
+
}
|
|
206
|
+
const url = `${BSE.apiUrl}/Corpforthresults/w`;
|
|
207
|
+
const response = await this.request(url, params);
|
|
208
|
+
return response.data;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Advance decline values for all BSE indices
|
|
212
|
+
*/
|
|
213
|
+
async advanceDecline() {
|
|
214
|
+
const url = `${BSE.apiUrl}/advanceDecline/w`;
|
|
215
|
+
await Throttle.check();
|
|
216
|
+
const response = await this.request(url, { val: 'Index' });
|
|
217
|
+
return response.data;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* List of top gainers
|
|
221
|
+
*/
|
|
222
|
+
async gainers(options = {}) {
|
|
223
|
+
const { by = 'group', name, pctChange = 'all' } = options;
|
|
224
|
+
const params = {
|
|
225
|
+
GLtype: 'gainer',
|
|
226
|
+
IndxGrp: by,
|
|
227
|
+
orderby: pctChange,
|
|
228
|
+
};
|
|
229
|
+
if (by === 'group') {
|
|
230
|
+
const groupName = name || 'A';
|
|
231
|
+
if (!BSE.validGroups.includes(groupName.toUpperCase())) {
|
|
232
|
+
throw new BSEError(`${groupName}: Not a valid BSE stock group`);
|
|
233
|
+
}
|
|
234
|
+
params.IndxGrpval = groupName.toUpperCase();
|
|
235
|
+
}
|
|
236
|
+
else if (by === 'index') {
|
|
237
|
+
params.IndxGrpval = (name || 'S&P BSE SENSEX').toUpperCase();
|
|
238
|
+
}
|
|
239
|
+
const url = `${BSE.apiUrl}/MktRGainerLoserData/w`;
|
|
240
|
+
const response = await this.request(url, params);
|
|
241
|
+
return response.data.Table;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* List of top losers
|
|
245
|
+
*/
|
|
246
|
+
async losers(options = {}) {
|
|
247
|
+
const { by = 'group', name, pctChange = 'all' } = options;
|
|
248
|
+
const params = {
|
|
249
|
+
GLtype: 'loser',
|
|
250
|
+
IndxGrp: by,
|
|
251
|
+
orderby: pctChange,
|
|
252
|
+
};
|
|
253
|
+
if (by === 'group') {
|
|
254
|
+
const groupName = name || 'A';
|
|
255
|
+
if (!BSE.validGroups.includes(groupName.toUpperCase())) {
|
|
256
|
+
throw new BSEError(`${groupName}: Not a valid BSE group`);
|
|
257
|
+
}
|
|
258
|
+
params.IndxGrpval = groupName.toUpperCase();
|
|
259
|
+
}
|
|
260
|
+
else if (by === 'index') {
|
|
261
|
+
params.IndxGrpval = (name || 'S&P BSE SENSEX').toUpperCase();
|
|
262
|
+
}
|
|
263
|
+
const url = `${BSE.apiUrl}/MktRGainerLoserData/w`;
|
|
264
|
+
const response = await this.request(url, params);
|
|
265
|
+
return response.data.Table;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get stocks near 52 week highs and lows
|
|
269
|
+
*/
|
|
270
|
+
async near52WeekHighLow(options = {}) {
|
|
271
|
+
const { by = 'group', name } = options;
|
|
272
|
+
const url = `${BSE.apiUrl}/MktHighLowData/w`;
|
|
273
|
+
const params = {
|
|
274
|
+
HLflag: 'H',
|
|
275
|
+
Grpcode: '',
|
|
276
|
+
indexcode: '',
|
|
277
|
+
scripcode: '',
|
|
278
|
+
};
|
|
279
|
+
if (by === 'group') {
|
|
280
|
+
const groupName = name || 'A';
|
|
281
|
+
if (!BSE.validGroups.includes(groupName.toUpperCase())) {
|
|
282
|
+
throw new BSEError(`${groupName}: Not a valid BSE stock group`);
|
|
283
|
+
}
|
|
284
|
+
params.Grpcode = groupName.toUpperCase();
|
|
285
|
+
}
|
|
286
|
+
else if (by === 'index') {
|
|
287
|
+
params.indexcode = name || 'S&P BSE SENSEX';
|
|
288
|
+
}
|
|
289
|
+
await Throttle.check();
|
|
290
|
+
const response = await this.request(url, params);
|
|
291
|
+
const data = response.data;
|
|
292
|
+
const result = {};
|
|
293
|
+
if (data.Table) {
|
|
294
|
+
result.highs = data.Table;
|
|
295
|
+
}
|
|
296
|
+
if (data.Table1) {
|
|
297
|
+
result.lows = data.Table1;
|
|
298
|
+
}
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Get OHLC quotes for given scripcode
|
|
303
|
+
*/
|
|
304
|
+
async quote(scripcode) {
|
|
305
|
+
const url = `${BSE.apiUrl}/getScripHeaderData/w`;
|
|
306
|
+
const params = {
|
|
307
|
+
scripcode: scripcode,
|
|
308
|
+
};
|
|
309
|
+
await Throttle.check();
|
|
310
|
+
const response = await this.request(url, params);
|
|
311
|
+
const header = response.data.Header;
|
|
312
|
+
const fields = ['PrevClose', 'Open', 'High', 'Low', 'LTP'];
|
|
313
|
+
const data = {};
|
|
314
|
+
for (const field of fields) {
|
|
315
|
+
data[field] = parseFloat(header[field]);
|
|
316
|
+
}
|
|
317
|
+
return data;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get 52 week and monthly high & low data for given stock
|
|
321
|
+
*/
|
|
322
|
+
async quoteWeeklyHL(scripcode) {
|
|
323
|
+
const params = { Type: 'EQ', flag: 'C', scripcode: scripcode };
|
|
324
|
+
await Throttle.check();
|
|
325
|
+
const response = await this.request(`${BSE.apiUrl}/HighLow/w`, params);
|
|
326
|
+
const data = response.data;
|
|
327
|
+
const [wHigh, wLow] = data.WeekHighLow.split(' / ');
|
|
328
|
+
const [mHigh, mLow] = data.MonthHighLow.split(' / ');
|
|
329
|
+
return {
|
|
330
|
+
fifty2WeekHigh: parseFloat(data.Fifty2WkHigh_adj),
|
|
331
|
+
dateHigh: data.Fifty2WkHigh_adjDt.replace(/[()]/g, '').trim(),
|
|
332
|
+
fifty2WeekLow: parseFloat(data.Fifty2WkLow_adj),
|
|
333
|
+
dateLow: data.Fifty2WkLow_adjDt.replace(/[()]/g, '').trim(),
|
|
334
|
+
monthlyHigh: parseFloat(mHigh),
|
|
335
|
+
monthlyLow: parseFloat(mLow),
|
|
336
|
+
weeklyHigh: parseFloat(wHigh),
|
|
337
|
+
weeklyLow: parseFloat(wLow),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* List securities and their meta info
|
|
342
|
+
*/
|
|
343
|
+
async listSecurities(options = {}) {
|
|
344
|
+
const { industry = '', scripcode = '', group = 'A', segment = 'Equity', status = 'Active' } = options;
|
|
345
|
+
const url = `${BSE.apiUrl}/ListofScripData/w`;
|
|
346
|
+
const params = {
|
|
347
|
+
scripcode,
|
|
348
|
+
Group: group,
|
|
349
|
+
industry,
|
|
350
|
+
segment,
|
|
351
|
+
status,
|
|
352
|
+
};
|
|
353
|
+
if (group && !BSE.validGroups.includes(group.toUpperCase())) {
|
|
354
|
+
throw new BSEError(`${group} not a valid BSE stock group`);
|
|
355
|
+
}
|
|
356
|
+
await Throttle.check();
|
|
357
|
+
const response = await this.request(url, params);
|
|
358
|
+
return response.data;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Search by Company name, stock symbol, ISIN or BSE code
|
|
362
|
+
*/
|
|
363
|
+
async lookupSymbol(text) {
|
|
364
|
+
const response = await this.lookup(text);
|
|
365
|
+
this.symbolParser.feed(response);
|
|
366
|
+
const result = this.symbolParser.getResult();
|
|
367
|
+
this.symbolParser.resetData();
|
|
368
|
+
return result;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Get stock symbol name for BSE scrip code
|
|
372
|
+
*/
|
|
373
|
+
async getScripName(scripcode) {
|
|
374
|
+
// <span>HDFC INE001A01036<strong>500010
|
|
375
|
+
const regex = new RegExp(`<\\w+>([A-Z0-9]+)\\s+\\w+\\s+<\\w+>${scripcode}`);
|
|
376
|
+
const response = await this.lookup(scripcode);
|
|
377
|
+
const match = response.match(regex);
|
|
378
|
+
if (match) {
|
|
379
|
+
return match[1];
|
|
380
|
+
}
|
|
381
|
+
throw new BSEError(`Could not find scrip name for ${scripcode}`);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Get BSE scrip code for stock symbol name
|
|
385
|
+
*/
|
|
386
|
+
async getScripCode(scripname) {
|
|
387
|
+
// <strong>HDFC</strong> INE001A01036 500010
|
|
388
|
+
const regex = new RegExp(`<\\w+>${scripname.toUpperCase()}<\\/\\w+>\\s+\\w+\\s+(\\d{6})`);
|
|
389
|
+
const response = await this.lookup(scripname);
|
|
390
|
+
const match = response.match(regex);
|
|
391
|
+
if (match) {
|
|
392
|
+
return match[1];
|
|
393
|
+
}
|
|
394
|
+
throw new BSEError(`Could not find scrip code for ${scripname}`);
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Fetch daily data for all indices for a given date
|
|
398
|
+
*/
|
|
399
|
+
async fetchAllIndicesDataByDate(date) {
|
|
400
|
+
await Throttle.check();
|
|
401
|
+
const dateStr = formatDateSlash(date);
|
|
402
|
+
const response = await this.request(`${BSE.apiUrl}/IndexArchDailyAll/w`, {
|
|
403
|
+
fmdt: dateStr,
|
|
404
|
+
todt: dateStr,
|
|
405
|
+
index: 'All',
|
|
406
|
+
period: 'D',
|
|
407
|
+
});
|
|
408
|
+
return response.data;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Download historical data for the specified index for the given date range
|
|
412
|
+
*/
|
|
413
|
+
async fetchHistoricalIndexData(options) {
|
|
414
|
+
const { index, fromDate, toDate, period = 'D', folder } = options;
|
|
415
|
+
if (toDate < fromDate) {
|
|
416
|
+
throw new BSEError('`toDate` must be greater than `fromDate`');
|
|
417
|
+
}
|
|
418
|
+
await Throttle.check();
|
|
419
|
+
const targetFolder = folder ? getPath(folder, true) : this.dir;
|
|
420
|
+
const fname = `${index}_${formatDate(fromDate)}_${formatDate(toDate)}.csv`;
|
|
421
|
+
const filePath = await this.download(`${BSE.apiUrl}/ProduceCSVForDate/w`, targetFolder, {
|
|
422
|
+
strIndex: index,
|
|
423
|
+
dtFromDate: formatDateSlash(fromDate),
|
|
424
|
+
dtToDate: formatDateSlash(toDate),
|
|
425
|
+
period: period,
|
|
426
|
+
}, fname);
|
|
427
|
+
if (fs.statSync(filePath).size > 0) {
|
|
428
|
+
return filePath;
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
fs.unlinkSync(filePath);
|
|
432
|
+
return null;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Fetch the list of Indices
|
|
437
|
+
*/
|
|
438
|
+
async fetchIndexNames() {
|
|
439
|
+
const url = `${BSE.apiUrl}/FillddlIndex/w?fmdt=&todt=`;
|
|
440
|
+
await Throttle.check();
|
|
441
|
+
const response = await this.request(url);
|
|
442
|
+
return response.data;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Returns metadata about AllIndices report
|
|
446
|
+
*/
|
|
447
|
+
async fetchIndexReportMetadata() {
|
|
448
|
+
await Throttle.check();
|
|
449
|
+
const response = await this.request(`${BSE.apiUrl}/Indexarchive_filedownload/w`);
|
|
450
|
+
return response.data;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
//# sourceMappingURL=BSE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BSE.js","sourceRoot":"","sources":["../../src/bse/BSE.ts"],"names":[],"mappings":"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"}
|