stock-sdk 1.0.0 → 1.0.1
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/{src/index.ts → dist/index.cjs} +127 -113
- package/dist/index.cjs.map +1 -0
- package/dist/{types.d.ts → index.d.cts} +65 -8
- package/dist/index.d.ts +180 -5
- package/dist/index.js +251 -284
- package/dist/index.js.map +1 -0
- package/package.json +27 -6
- package/.cursor/worktrees.json +0 -5
- package/.yarn/install-state.gz +0 -0
- package/dist/index.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/new-doc.md +0 -98
- package/origin.md +0 -480
- package/src/index.test.ts +0 -97
- package/src/types.ts +0 -177
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -9
|
@@ -1,92 +1,116 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
29
|
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
TencentStockSDK: () => TencentStockSDK,
|
|
34
|
+
default: () => index_default
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(index_exports);
|
|
37
|
+
var import_axios = __toESM(require("axios"), 1);
|
|
38
|
+
var BASE_URL = "http://qt.gtimg.cn";
|
|
39
|
+
function isBrowser() {
|
|
40
|
+
return typeof window !== "undefined" && typeof window.document !== "undefined";
|
|
41
|
+
}
|
|
42
|
+
async function decodeGBK(data) {
|
|
43
|
+
if (isBrowser()) {
|
|
44
|
+
const decoder = new TextDecoder("gbk");
|
|
45
|
+
return decoder.decode(data);
|
|
46
|
+
} else {
|
|
47
|
+
const iconvModule = await import("iconv-lite");
|
|
48
|
+
const iconv = iconvModule.default || iconvModule;
|
|
49
|
+
return iconv.decode(Buffer.from(data), "gbk");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function safeNumber(val) {
|
|
53
|
+
if (!val || val === "") return 0;
|
|
19
54
|
const n = parseFloat(val);
|
|
20
55
|
return Number.isNaN(n) ? 0 : n;
|
|
21
56
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (!val || val === '') return null;
|
|
57
|
+
function safeNumberOrNull(val) {
|
|
58
|
+
if (!val || val === "") return null;
|
|
25
59
|
const n = parseFloat(val);
|
|
26
60
|
return Number.isNaN(n) ? null : n;
|
|
27
61
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
*/
|
|
32
|
-
function parseResponse(text: string): { key: string; fields: string[] }[] {
|
|
33
|
-
const lines = text.split(';').map((l) => l.trim()).filter(Boolean);
|
|
34
|
-
const results: { key: string; fields: string[] }[] = [];
|
|
62
|
+
function parseResponse(text) {
|
|
63
|
+
const lines = text.split(";").map((l) => l.trim()).filter(Boolean);
|
|
64
|
+
const results = [];
|
|
35
65
|
for (const line of lines) {
|
|
36
|
-
const eqIdx = line.indexOf(
|
|
66
|
+
const eqIdx = line.indexOf("=");
|
|
37
67
|
if (eqIdx < 0) continue;
|
|
38
68
|
let key = line.slice(0, eqIdx).trim();
|
|
39
|
-
if (key.startsWith(
|
|
69
|
+
if (key.startsWith("v_")) key = key.slice(2);
|
|
40
70
|
let raw = line.slice(eqIdx + 1).trim();
|
|
41
71
|
if (raw.startsWith('"') && raw.endsWith('"')) {
|
|
42
72
|
raw = raw.slice(1, -1);
|
|
43
73
|
}
|
|
44
|
-
const fields = raw.split(
|
|
74
|
+
const fields = raw.split("~");
|
|
45
75
|
results.push({ key, fields });
|
|
46
76
|
}
|
|
47
77
|
return results;
|
|
48
78
|
}
|
|
49
|
-
|
|
50
|
-
export class TencentStockSDK {
|
|
51
|
-
private client: AxiosInstance;
|
|
52
|
-
|
|
79
|
+
var TencentStockSDK = class {
|
|
53
80
|
constructor() {
|
|
54
|
-
this.client =
|
|
81
|
+
this.client = import_axios.default.create({
|
|
55
82
|
baseURL: BASE_URL,
|
|
56
|
-
responseType:
|
|
57
|
-
timeout:
|
|
83
|
+
responseType: "arraybuffer",
|
|
84
|
+
timeout: 1e4
|
|
58
85
|
});
|
|
59
86
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const text = iconv.decode(Buffer.from(resp.data), 'gbk');
|
|
87
|
+
async fetch(params) {
|
|
88
|
+
const resp = await this.client.get("/", { params: { q: params } });
|
|
89
|
+
const text = await decodeGBK(resp.data);
|
|
64
90
|
return parseResponse(text);
|
|
65
91
|
}
|
|
66
|
-
|
|
67
92
|
// ---------- 实时全量行情 ----------
|
|
68
93
|
/**
|
|
69
94
|
* 获取 A 股 / 指数 全量行情
|
|
70
95
|
* @param codes 如 ['sz000858', 'sh600000']
|
|
71
96
|
*/
|
|
72
|
-
async getFullQuotes(codes
|
|
73
|
-
const data = await this.fetch(codes.join(
|
|
97
|
+
async getFullQuotes(codes) {
|
|
98
|
+
const data = await this.fetch(codes.join(","));
|
|
74
99
|
return data.map((d) => this.parseFullQuote(d.fields));
|
|
75
100
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const bid: { price: number; volume: number }[] = [];
|
|
101
|
+
parseFullQuote(f) {
|
|
102
|
+
const bid = [];
|
|
79
103
|
for (let i = 0; i < 5; i++) {
|
|
80
104
|
bid.push({ price: safeNumber(f[9 + i * 2]), volume: safeNumber(f[10 + i * 2]) });
|
|
81
105
|
}
|
|
82
|
-
const ask
|
|
106
|
+
const ask = [];
|
|
83
107
|
for (let i = 0; i < 5; i++) {
|
|
84
108
|
ask.push({ price: safeNumber(f[19 + i * 2]), volume: safeNumber(f[20 + i * 2]) });
|
|
85
109
|
}
|
|
86
110
|
return {
|
|
87
|
-
marketId: f[0] ??
|
|
88
|
-
name: f[1] ??
|
|
89
|
-
code: f[2] ??
|
|
111
|
+
marketId: f[0] ?? "",
|
|
112
|
+
name: f[1] ?? "",
|
|
113
|
+
code: f[2] ?? "",
|
|
90
114
|
price: safeNumber(f[3]),
|
|
91
115
|
prevClose: safeNumber(f[4]),
|
|
92
116
|
open: safeNumber(f[5]),
|
|
@@ -95,7 +119,7 @@ export class TencentStockSDK {
|
|
|
95
119
|
innerVolume: safeNumber(f[8]),
|
|
96
120
|
bid,
|
|
97
121
|
ask,
|
|
98
|
-
time: f[30] ??
|
|
122
|
+
time: f[30] ?? "",
|
|
99
123
|
change: safeNumber(f[31]),
|
|
100
124
|
changePercent: safeNumber(f[32]),
|
|
101
125
|
high: safeNumber(f[33]),
|
|
@@ -109,49 +133,45 @@ export class TencentStockSDK {
|
|
|
109
133
|
pb: safeNumberOrNull(f[46]),
|
|
110
134
|
limitUp: safeNumberOrNull(f[47]),
|
|
111
135
|
limitDown: safeNumberOrNull(f[48]),
|
|
112
|
-
raw: f
|
|
136
|
+
raw: f
|
|
113
137
|
};
|
|
114
138
|
}
|
|
115
|
-
|
|
116
139
|
// ---------- 简要行情 ----------
|
|
117
140
|
/**
|
|
118
141
|
* 获取简要行情
|
|
119
142
|
* @param codes 如 ['s_sz000858', 's_sh000001']
|
|
120
143
|
*/
|
|
121
|
-
async getSimpleQuotes(codes
|
|
122
|
-
const data = await this.fetch(codes.join(
|
|
144
|
+
async getSimpleQuotes(codes) {
|
|
145
|
+
const data = await this.fetch(codes.join(","));
|
|
123
146
|
return data.map((d) => this.parseSimpleQuote(d.fields));
|
|
124
147
|
}
|
|
125
|
-
|
|
126
|
-
private parseSimpleQuote(f: string[]): SimpleQuote {
|
|
148
|
+
parseSimpleQuote(f) {
|
|
127
149
|
return {
|
|
128
|
-
marketId: f[0] ??
|
|
129
|
-
name: f[1] ??
|
|
130
|
-
code: f[2] ??
|
|
150
|
+
marketId: f[0] ?? "",
|
|
151
|
+
name: f[1] ?? "",
|
|
152
|
+
code: f[2] ?? "",
|
|
131
153
|
price: safeNumber(f[3]),
|
|
132
154
|
change: safeNumber(f[4]),
|
|
133
155
|
changePercent: safeNumber(f[5]),
|
|
134
156
|
volume: safeNumber(f[6]),
|
|
135
157
|
amount: safeNumber(f[7]),
|
|
136
158
|
marketCap: safeNumberOrNull(f[9]),
|
|
137
|
-
marketType: f[10] ??
|
|
138
|
-
raw: f
|
|
159
|
+
marketType: f[10] ?? "",
|
|
160
|
+
raw: f
|
|
139
161
|
};
|
|
140
162
|
}
|
|
141
|
-
|
|
142
163
|
// ---------- 资金流向 ----------
|
|
143
164
|
/**
|
|
144
165
|
* 获取资金流向
|
|
145
166
|
* @param codes 如 ['ff_sz000858']
|
|
146
167
|
*/
|
|
147
|
-
async getFundFlow(codes
|
|
148
|
-
const data = await this.fetch(codes.join(
|
|
168
|
+
async getFundFlow(codes) {
|
|
169
|
+
const data = await this.fetch(codes.join(","));
|
|
149
170
|
return data.map((d) => this.parseFundFlow(d.fields));
|
|
150
171
|
}
|
|
151
|
-
|
|
152
|
-
private parseFundFlow(f: string[]): FundFlow {
|
|
172
|
+
parseFundFlow(f) {
|
|
153
173
|
return {
|
|
154
|
-
code: f[0] ??
|
|
174
|
+
code: f[0] ?? "",
|
|
155
175
|
mainInflow: safeNumber(f[1]),
|
|
156
176
|
mainOutflow: safeNumber(f[2]),
|
|
157
177
|
mainNet: safeNumber(f[3]),
|
|
@@ -161,52 +181,48 @@ export class TencentStockSDK {
|
|
|
161
181
|
retailNet: safeNumber(f[7]),
|
|
162
182
|
retailNetRatio: safeNumber(f[8]),
|
|
163
183
|
totalFlow: safeNumber(f[9]),
|
|
164
|
-
name: f[12] ??
|
|
165
|
-
date: f[13] ??
|
|
166
|
-
raw: f
|
|
184
|
+
name: f[12] ?? "",
|
|
185
|
+
date: f[13] ?? "",
|
|
186
|
+
raw: f
|
|
167
187
|
};
|
|
168
188
|
}
|
|
169
|
-
|
|
170
189
|
// ---------- 盘口大单占比 ----------
|
|
171
190
|
/**
|
|
172
191
|
* 获取盘口大单占比
|
|
173
192
|
* @param codes 如 ['s_pksz000858']
|
|
174
193
|
*/
|
|
175
|
-
async getPanelLargeOrder(codes
|
|
176
|
-
const data = await this.fetch(codes.join(
|
|
194
|
+
async getPanelLargeOrder(codes) {
|
|
195
|
+
const data = await this.fetch(codes.join(","));
|
|
177
196
|
return data.map((d) => this.parsePanelLargeOrder(d.fields));
|
|
178
197
|
}
|
|
179
|
-
|
|
180
|
-
private parsePanelLargeOrder(f: string[]): PanelLargeOrder {
|
|
198
|
+
parsePanelLargeOrder(f) {
|
|
181
199
|
return {
|
|
182
200
|
buyLargeRatio: safeNumber(f[0]),
|
|
183
201
|
buySmallRatio: safeNumber(f[1]),
|
|
184
202
|
sellLargeRatio: safeNumber(f[2]),
|
|
185
203
|
sellSmallRatio: safeNumber(f[3]),
|
|
186
|
-
raw: f
|
|
204
|
+
raw: f
|
|
187
205
|
};
|
|
188
206
|
}
|
|
189
|
-
|
|
190
207
|
// ---------- 港股扩展行情 ----------
|
|
191
208
|
/**
|
|
192
209
|
* 获取港股扩展行情
|
|
193
210
|
* @param codes 如 ['r_hk09988']
|
|
194
211
|
*/
|
|
195
|
-
async getHKQuotes(codes
|
|
196
|
-
const data = await this.fetch(codes.join(
|
|
212
|
+
async getHKQuotes(codes) {
|
|
213
|
+
const data = await this.fetch(codes.join(","));
|
|
197
214
|
return data.map((d) => this.parseHKQuote(d.fields));
|
|
198
215
|
}
|
|
199
|
-
|
|
200
|
-
private parseHKQuote(f: string[]): HKQuote {
|
|
216
|
+
parseHKQuote(f) {
|
|
201
217
|
return {
|
|
202
|
-
marketId: f[0] ??
|
|
203
|
-
name: f[1] ??
|
|
204
|
-
code: f[2] ??
|
|
218
|
+
marketId: f[0] ?? "",
|
|
219
|
+
name: f[1] ?? "",
|
|
220
|
+
code: f[2] ?? "",
|
|
205
221
|
price: safeNumber(f[3]),
|
|
206
222
|
prevClose: safeNumber(f[4]),
|
|
207
223
|
open: safeNumber(f[5]),
|
|
208
224
|
volume: safeNumber(f[6]),
|
|
209
|
-
time: f[30] ??
|
|
225
|
+
time: f[30] ?? "",
|
|
210
226
|
change: safeNumber(f[31]),
|
|
211
227
|
changePercent: safeNumber(f[32]),
|
|
212
228
|
high: safeNumber(f[33]),
|
|
@@ -215,67 +231,65 @@ export class TencentStockSDK {
|
|
|
215
231
|
lotSize: safeNumberOrNull(f[40]),
|
|
216
232
|
circulatingMarketCap: safeNumberOrNull(f[46]),
|
|
217
233
|
totalMarketCap: safeNumberOrNull(f[47]),
|
|
218
|
-
currency: f[f.length - 3] ??
|
|
219
|
-
raw: f
|
|
234
|
+
currency: f[f.length - 3] ?? "",
|
|
235
|
+
raw: f
|
|
220
236
|
};
|
|
221
237
|
}
|
|
222
|
-
|
|
223
238
|
// ---------- 美股简要行情 ----------
|
|
224
239
|
/**
|
|
225
240
|
* 获取美股简要行情
|
|
226
241
|
* @param codes 如 ['s_usBABA']
|
|
227
242
|
*/
|
|
228
|
-
async getUSQuotes(codes
|
|
229
|
-
const data = await this.fetch(codes.join(
|
|
243
|
+
async getUSQuotes(codes) {
|
|
244
|
+
const data = await this.fetch(codes.join(","));
|
|
230
245
|
return data.map((d) => this.parseUSQuote(d.fields));
|
|
231
246
|
}
|
|
232
|
-
|
|
233
|
-
private parseUSQuote(f: string[]): USQuote {
|
|
247
|
+
parseUSQuote(f) {
|
|
234
248
|
return {
|
|
235
|
-
marketId: f[0] ??
|
|
236
|
-
name: f[1] ??
|
|
237
|
-
code: f[2] ??
|
|
249
|
+
marketId: f[0] ?? "",
|
|
250
|
+
name: f[1] ?? "",
|
|
251
|
+
code: f[2] ?? "",
|
|
238
252
|
price: safeNumber(f[3]),
|
|
239
253
|
change: safeNumber(f[4]),
|
|
240
254
|
changePercent: safeNumber(f[5]),
|
|
241
255
|
volume: safeNumber(f[6]),
|
|
242
256
|
amount: safeNumber(f[7]),
|
|
243
257
|
marketCap: safeNumberOrNull(f[8]),
|
|
244
|
-
raw: f
|
|
258
|
+
raw: f
|
|
245
259
|
};
|
|
246
260
|
}
|
|
247
|
-
|
|
248
261
|
// ---------- 公募基金行情 ----------
|
|
249
262
|
/**
|
|
250
263
|
* 获取公募基金行情
|
|
251
264
|
* @param codes 如 ['jj000001']
|
|
252
265
|
*/
|
|
253
|
-
async getFundQuotes(codes
|
|
254
|
-
const data = await this.fetch(codes.join(
|
|
266
|
+
async getFundQuotes(codes) {
|
|
267
|
+
const data = await this.fetch(codes.join(","));
|
|
255
268
|
return data.map((d) => this.parseFundQuote(d.fields));
|
|
256
269
|
}
|
|
257
|
-
|
|
258
|
-
private parseFundQuote(f: string[]): FundQuote {
|
|
270
|
+
parseFundQuote(f) {
|
|
259
271
|
return {
|
|
260
|
-
code: f[0] ??
|
|
261
|
-
name: f[1] ??
|
|
272
|
+
code: f[0] ?? "",
|
|
273
|
+
name: f[1] ?? "",
|
|
262
274
|
nav: safeNumber(f[5]),
|
|
263
275
|
accNav: safeNumber(f[6]),
|
|
264
276
|
change: safeNumber(f[7]),
|
|
265
|
-
navDate: f[8] ??
|
|
266
|
-
raw: f
|
|
277
|
+
navDate: f[8] ?? "",
|
|
278
|
+
raw: f
|
|
267
279
|
};
|
|
268
280
|
}
|
|
269
|
-
|
|
270
281
|
// ---------- 批量混合查询 ----------
|
|
271
282
|
/**
|
|
272
283
|
* 批量混合查询,返回原始解析结果(key + fields)
|
|
273
284
|
* @param params 如 'sz000858,s_sh000001,jj000001'
|
|
274
285
|
*/
|
|
275
|
-
async batchRaw(params
|
|
286
|
+
async batchRaw(params) {
|
|
276
287
|
return this.fetch(params);
|
|
277
288
|
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
export
|
|
281
|
-
|
|
289
|
+
};
|
|
290
|
+
var index_default = TencentStockSDK;
|
|
291
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
292
|
+
0 && (module.exports = {
|
|
293
|
+
TencentStockSDK
|
|
294
|
+
});
|
|
295
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport {\n FullQuote,\n SimpleQuote,\n FundFlow,\n PanelLargeOrder,\n HKQuote,\n USQuote,\n FundQuote,\n} from './types';\n\nexport * from './types';\n\nconst BASE_URL = 'http://qt.gtimg.cn';\n\n/**\n * 检测是否在浏览器环境\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n}\n\n/**\n * 将 ArrayBuffer 解码为 GBK 字符串\n * 浏览器端使用 TextDecoder,Node.js 端使用 iconv-lite\n */\nasync function decodeGBK(data: ArrayBuffer): Promise<string> {\n if (isBrowser()) {\n // 浏览器端使用 TextDecoder (原生支持 GBK)\n const decoder = new TextDecoder('gbk');\n return decoder.decode(data);\n } else {\n // Node.js 端使用 iconv-lite\n // 动态导入返回模块对象,需要处理 ESM/CJS 兼容性\n const iconvModule = await import('iconv-lite');\n const iconv = iconvModule.default || iconvModule;\n return iconv.decode(Buffer.from(data), 'gbk');\n }\n}\n\nfunction safeNumber(val: string | undefined): number {\n if (!val || val === '') return 0;\n const n = parseFloat(val);\n return Number.isNaN(n) ? 0 : n;\n}\n\nfunction safeNumberOrNull(val: string | undefined): number | null {\n if (!val || val === '') return null;\n const n = parseFloat(val);\n return Number.isNaN(n) ? null : n;\n}\n\n/**\n * 解析响应文本,按 `;` 拆行,提取 `v_xxx=\"...\"` 里的内容,返回 { key, fields }[]\n */\nfunction parseResponse(text: string): { key: string; fields: string[] }[] {\n const lines = text.split(';').map((l) => l.trim()).filter(Boolean);\n const results: { key: string; fields: string[] }[] = [];\n for (const line of lines) {\n const eqIdx = line.indexOf('=');\n if (eqIdx < 0) continue;\n let key = line.slice(0, eqIdx).trim();\n if (key.startsWith('v_')) key = key.slice(2);\n let raw = line.slice(eqIdx + 1).trim();\n if (raw.startsWith('\"') && raw.endsWith('\"')) {\n raw = raw.slice(1, -1);\n }\n const fields = raw.split('~');\n results.push({ key, fields });\n }\n return results;\n}\n\nexport class TencentStockSDK {\n private client: AxiosInstance;\n\n constructor() {\n this.client = axios.create({\n baseURL: BASE_URL,\n responseType: 'arraybuffer',\n timeout: 10000,\n });\n }\n\n private async fetch(params: string): Promise<{ key: string; fields: string[] }[]> {\n const resp = await this.client.get('/', { params: { q: params } });\n const text = await decodeGBK(resp.data);\n return parseResponse(text);\n }\n\n // ---------- 实时全量行情 ----------\n /**\n * 获取 A 股 / 指数 全量行情\n * @param codes 如 ['sz000858', 'sh600000']\n */\n async getFullQuotes(codes: string[]): Promise<FullQuote[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parseFullQuote(d.fields));\n }\n\n private parseFullQuote(f: string[]): FullQuote {\n const bid: { price: number; volume: number }[] = [];\n for (let i = 0; i < 5; i++) {\n bid.push({ price: safeNumber(f[9 + i * 2]), volume: safeNumber(f[10 + i * 2]) });\n }\n const ask: { price: number; volume: number }[] = [];\n for (let i = 0; i < 5; i++) {\n ask.push({ price: safeNumber(f[19 + i * 2]), volume: safeNumber(f[20 + i * 2]) });\n }\n return {\n marketId: f[0] ?? '',\n name: f[1] ?? '',\n code: f[2] ?? '',\n price: safeNumber(f[3]),\n prevClose: safeNumber(f[4]),\n open: safeNumber(f[5]),\n volume: safeNumber(f[6]),\n outerVolume: safeNumber(f[7]),\n innerVolume: safeNumber(f[8]),\n bid,\n ask,\n time: f[30] ?? '',\n change: safeNumber(f[31]),\n changePercent: safeNumber(f[32]),\n high: safeNumber(f[33]),\n low: safeNumber(f[34]),\n volume2: safeNumber(f[36]),\n amount: safeNumber(f[37]),\n turnoverRate: safeNumberOrNull(f[38]),\n pe: safeNumberOrNull(f[39]),\n circulatingMarketCap: safeNumberOrNull(f[44]),\n totalMarketCap: safeNumberOrNull(f[45]),\n pb: safeNumberOrNull(f[46]),\n limitUp: safeNumberOrNull(f[47]),\n limitDown: safeNumberOrNull(f[48]),\n raw: f,\n };\n }\n\n // ---------- 简要行情 ----------\n /**\n * 获取简要行情\n * @param codes 如 ['s_sz000858', 's_sh000001']\n */\n async getSimpleQuotes(codes: string[]): Promise<SimpleQuote[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parseSimpleQuote(d.fields));\n }\n\n private parseSimpleQuote(f: string[]): SimpleQuote {\n return {\n marketId: f[0] ?? '',\n name: f[1] ?? '',\n code: f[2] ?? '',\n price: safeNumber(f[3]),\n change: safeNumber(f[4]),\n changePercent: safeNumber(f[5]),\n volume: safeNumber(f[6]),\n amount: safeNumber(f[7]),\n marketCap: safeNumberOrNull(f[9]),\n marketType: f[10] ?? '',\n raw: f,\n };\n }\n\n // ---------- 资金流向 ----------\n /**\n * 获取资金流向\n * @param codes 如 ['ff_sz000858']\n */\n async getFundFlow(codes: string[]): Promise<FundFlow[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parseFundFlow(d.fields));\n }\n\n private parseFundFlow(f: string[]): FundFlow {\n return {\n code: f[0] ?? '',\n mainInflow: safeNumber(f[1]),\n mainOutflow: safeNumber(f[2]),\n mainNet: safeNumber(f[3]),\n mainNetRatio: safeNumber(f[4]),\n retailInflow: safeNumber(f[5]),\n retailOutflow: safeNumber(f[6]),\n retailNet: safeNumber(f[7]),\n retailNetRatio: safeNumber(f[8]),\n totalFlow: safeNumber(f[9]),\n name: f[12] ?? '',\n date: f[13] ?? '',\n raw: f,\n };\n }\n\n // ---------- 盘口大单占比 ----------\n /**\n * 获取盘口大单占比\n * @param codes 如 ['s_pksz000858']\n */\n async getPanelLargeOrder(codes: string[]): Promise<PanelLargeOrder[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parsePanelLargeOrder(d.fields));\n }\n\n private parsePanelLargeOrder(f: string[]): PanelLargeOrder {\n return {\n buyLargeRatio: safeNumber(f[0]),\n buySmallRatio: safeNumber(f[1]),\n sellLargeRatio: safeNumber(f[2]),\n sellSmallRatio: safeNumber(f[3]),\n raw: f,\n };\n }\n\n // ---------- 港股扩展行情 ----------\n /**\n * 获取港股扩展行情\n * @param codes 如 ['r_hk09988']\n */\n async getHKQuotes(codes: string[]): Promise<HKQuote[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parseHKQuote(d.fields));\n }\n\n private parseHKQuote(f: string[]): HKQuote {\n return {\n marketId: f[0] ?? '',\n name: f[1] ?? '',\n code: f[2] ?? '',\n price: safeNumber(f[3]),\n prevClose: safeNumber(f[4]),\n open: safeNumber(f[5]),\n volume: safeNumber(f[6]),\n time: f[30] ?? '',\n change: safeNumber(f[31]),\n changePercent: safeNumber(f[32]),\n high: safeNumber(f[33]),\n low: safeNumber(f[34]),\n amount: safeNumber(f[36]),\n lotSize: safeNumberOrNull(f[40]),\n circulatingMarketCap: safeNumberOrNull(f[46]),\n totalMarketCap: safeNumberOrNull(f[47]),\n currency: f[f.length - 3] ?? '',\n raw: f,\n };\n }\n\n // ---------- 美股简要行情 ----------\n /**\n * 获取美股简要行情\n * @param codes 如 ['s_usBABA']\n */\n async getUSQuotes(codes: string[]): Promise<USQuote[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parseUSQuote(d.fields));\n }\n\n private parseUSQuote(f: string[]): USQuote {\n return {\n marketId: f[0] ?? '',\n name: f[1] ?? '',\n code: f[2] ?? '',\n price: safeNumber(f[3]),\n change: safeNumber(f[4]),\n changePercent: safeNumber(f[5]),\n volume: safeNumber(f[6]),\n amount: safeNumber(f[7]),\n marketCap: safeNumberOrNull(f[8]),\n raw: f,\n };\n }\n\n // ---------- 公募基金行情 ----------\n /**\n * 获取公募基金行情\n * @param codes 如 ['jj000001']\n */\n async getFundQuotes(codes: string[]): Promise<FundQuote[]> {\n const data = await this.fetch(codes.join(','));\n return data.map((d) => this.parseFundQuote(d.fields));\n }\n\n private parseFundQuote(f: string[]): FundQuote {\n return {\n code: f[0] ?? '',\n name: f[1] ?? '',\n nav: safeNumber(f[5]),\n accNav: safeNumber(f[6]),\n change: safeNumber(f[7]),\n navDate: f[8] ?? '',\n raw: f,\n };\n }\n\n // ---------- 批量混合查询 ----------\n /**\n * 批量混合查询,返回原始解析结果(key + fields)\n * @param params 如 'sz000858,s_sh000001,jj000001'\n */\n async batchRaw(params: string): Promise<{ key: string; fields: string[] }[]> {\n return this.fetch(params);\n }\n}\n\nexport default TencentStockSDK;\n\n"],"mappings":"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","names":["axios"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A 股 / 指数 全量行情
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
interface FullQuote {
|
|
5
5
|
/** 市场标识 */
|
|
6
6
|
marketId: string;
|
|
7
7
|
/** 名称 */
|
|
@@ -64,7 +64,7 @@ export interface FullQuote {
|
|
|
64
64
|
/**
|
|
65
65
|
* 简要行情(股票 / 指数)
|
|
66
66
|
*/
|
|
67
|
-
|
|
67
|
+
interface SimpleQuote {
|
|
68
68
|
marketId: string;
|
|
69
69
|
name: string;
|
|
70
70
|
code: string;
|
|
@@ -82,7 +82,7 @@ export interface SimpleQuote {
|
|
|
82
82
|
/**
|
|
83
83
|
* 资金流向
|
|
84
84
|
*/
|
|
85
|
-
|
|
85
|
+
interface FundFlow {
|
|
86
86
|
code: string;
|
|
87
87
|
/** 主力流入 */
|
|
88
88
|
mainInflow: number;
|
|
@@ -109,7 +109,7 @@ export interface FundFlow {
|
|
|
109
109
|
/**
|
|
110
110
|
* 盘口大单占比
|
|
111
111
|
*/
|
|
112
|
-
|
|
112
|
+
interface PanelLargeOrder {
|
|
113
113
|
/** 买盘大单占比 */
|
|
114
114
|
buyLargeRatio: number;
|
|
115
115
|
/** 买盘小单占比 */
|
|
@@ -123,7 +123,7 @@ export interface PanelLargeOrder {
|
|
|
123
123
|
/**
|
|
124
124
|
* 港股扩展行情
|
|
125
125
|
*/
|
|
126
|
-
|
|
126
|
+
interface HKQuote {
|
|
127
127
|
marketId: string;
|
|
128
128
|
name: string;
|
|
129
129
|
code: string;
|
|
@@ -146,7 +146,7 @@ export interface HKQuote {
|
|
|
146
146
|
/**
|
|
147
147
|
* 美股简要行情
|
|
148
148
|
*/
|
|
149
|
-
|
|
149
|
+
interface USQuote {
|
|
150
150
|
marketId: string;
|
|
151
151
|
name: string;
|
|
152
152
|
code: string;
|
|
@@ -161,7 +161,7 @@ export interface USQuote {
|
|
|
161
161
|
/**
|
|
162
162
|
* 公募基金行情
|
|
163
163
|
*/
|
|
164
|
-
|
|
164
|
+
interface FundQuote {
|
|
165
165
|
code: string;
|
|
166
166
|
name: string;
|
|
167
167
|
/** 最新单位净值 */
|
|
@@ -174,4 +174,61 @@ export interface FundQuote {
|
|
|
174
174
|
navDate: string;
|
|
175
175
|
raw: string[];
|
|
176
176
|
}
|
|
177
|
-
|
|
177
|
+
|
|
178
|
+
declare class TencentStockSDK {
|
|
179
|
+
private client;
|
|
180
|
+
constructor();
|
|
181
|
+
private fetch;
|
|
182
|
+
/**
|
|
183
|
+
* 获取 A 股 / 指数 全量行情
|
|
184
|
+
* @param codes 如 ['sz000858', 'sh600000']
|
|
185
|
+
*/
|
|
186
|
+
getFullQuotes(codes: string[]): Promise<FullQuote[]>;
|
|
187
|
+
private parseFullQuote;
|
|
188
|
+
/**
|
|
189
|
+
* 获取简要行情
|
|
190
|
+
* @param codes 如 ['s_sz000858', 's_sh000001']
|
|
191
|
+
*/
|
|
192
|
+
getSimpleQuotes(codes: string[]): Promise<SimpleQuote[]>;
|
|
193
|
+
private parseSimpleQuote;
|
|
194
|
+
/**
|
|
195
|
+
* 获取资金流向
|
|
196
|
+
* @param codes 如 ['ff_sz000858']
|
|
197
|
+
*/
|
|
198
|
+
getFundFlow(codes: string[]): Promise<FundFlow[]>;
|
|
199
|
+
private parseFundFlow;
|
|
200
|
+
/**
|
|
201
|
+
* 获取盘口大单占比
|
|
202
|
+
* @param codes 如 ['s_pksz000858']
|
|
203
|
+
*/
|
|
204
|
+
getPanelLargeOrder(codes: string[]): Promise<PanelLargeOrder[]>;
|
|
205
|
+
private parsePanelLargeOrder;
|
|
206
|
+
/**
|
|
207
|
+
* 获取港股扩展行情
|
|
208
|
+
* @param codes 如 ['r_hk09988']
|
|
209
|
+
*/
|
|
210
|
+
getHKQuotes(codes: string[]): Promise<HKQuote[]>;
|
|
211
|
+
private parseHKQuote;
|
|
212
|
+
/**
|
|
213
|
+
* 获取美股简要行情
|
|
214
|
+
* @param codes 如 ['s_usBABA']
|
|
215
|
+
*/
|
|
216
|
+
getUSQuotes(codes: string[]): Promise<USQuote[]>;
|
|
217
|
+
private parseUSQuote;
|
|
218
|
+
/**
|
|
219
|
+
* 获取公募基金行情
|
|
220
|
+
* @param codes 如 ['jj000001']
|
|
221
|
+
*/
|
|
222
|
+
getFundQuotes(codes: string[]): Promise<FundQuote[]>;
|
|
223
|
+
private parseFundQuote;
|
|
224
|
+
/**
|
|
225
|
+
* 批量混合查询,返回原始解析结果(key + fields)
|
|
226
|
+
* @param params 如 'sz000858,s_sh000001,jj000001'
|
|
227
|
+
*/
|
|
228
|
+
batchRaw(params: string): Promise<{
|
|
229
|
+
key: string;
|
|
230
|
+
fields: string[];
|
|
231
|
+
}[]>;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export { type FullQuote, type FundFlow, type FundQuote, type HKQuote, type PanelLargeOrder, type SimpleQuote, TencentStockSDK, type USQuote, TencentStockSDK as default };
|