Socket
Socket
Sign inDemoInstall

stock-api

Package Overview
Dependencies
38
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.1 to 2.0.0

dist/stocks/base/transforms/api-code.js

2

dist/index.js

@@ -8,4 +8,4 @@ "use strict";

// Stocks
const index_1 = __importDefault(require("./stocks/index"));
var index_1 = __importDefault(require("./stocks/index"));
exports.stocks = index_1.default;
exports.default = { stocks: index_1.default };
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -6,22 +42,26 @@ /**

*/
class Base {
var Base = {
/**
* 构造函数
*/
constructor() { }
/**
* 获取股票数据
* @param code 需要获取的股票代码
* @param code 股票代码
*/
async getStock(code) {
throw new Error("未实现获取股票数据");
}
getStock: function (code) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
throw new Error("未实现获取股票数据");
});
});
},
/**
* 获取股票组数据
* @param codes 需要获取的股票组代码
* 获取股票数据组
* @param codes 股票代码组
*/
async getStocks(codes) {
throw new Error("未实现获取股票组数据");
getStocks: function (codes) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
throw new Error("未实现获取股票数据组");
});
});
}
}
};
exports.default = Base;

@@ -6,49 +6,51 @@ "use strict";

*/
class BaseStockTransform {
var BaseStockTransform = /** @class */ (function () {
function BaseStockTransform() {
}
/**
* 获取代码
*/
getCode() {
BaseStockTransform.prototype.getCode = function () {
throw new Error('未实现获取代码');
}
};
/**
* 获取名称
*/
getName() {
BaseStockTransform.prototype.getName = function () {
throw new Error('未实现获取名称');
}
};
/**
* 获取现价
*/
getNow() {
BaseStockTransform.prototype.getNow = function () {
throw new Error('未实现获取现价');
}
};
/**
* 获取最低价
*/
getLow() {
BaseStockTransform.prototype.getLow = function () {
throw new Error('未实现获取最低价');
}
};
/**
* 获取最高价
*/
getHigh() {
BaseStockTransform.prototype.getHigh = function () {
throw new Error('未实现获取最高价');
}
};
/**
* 获取昨日收盘价
*/
getYesterday() {
BaseStockTransform.prototype.getYesterday = function () {
throw new Error('未实现获取昨日收盘价');
}
};
/**
* 获取涨跌
*/
getPercent() {
BaseStockTransform.prototype.getPercent = function () {
throw new Error('未实现获取涨跌');
}
};
/**
* 获取股票数据
*/
getStock() {
BaseStockTransform.prototype.getStock = function () {
return {

@@ -63,4 +65,5 @@ code: this.getCode(),

};
}
}
};
return BaseStockTransform;
}());
exports.default = BaseStockTransform;

@@ -8,11 +8,11 @@ "use strict";

// Stocks
const base_1 = __importDefault(require("./base"));
var base_1 = __importDefault(require("./base"));
exports.base = base_1.default;
const sina_1 = __importDefault(require("./sina"));
var sina_1 = __importDefault(require("./sina"));
exports.sina = sina_1.default;
const xueqiu_1 = __importDefault(require("./xueqiu"));
var xueqiu_1 = __importDefault(require("./xueqiu"));
exports.xueqiu = xueqiu_1.default;
const netease_1 = __importDefault(require("./netease"));
var netease_1 = __importDefault(require("./netease"));
exports.netease = netease_1.default;
const tencent_1 = __importDefault(require("./tencent"));
var tencent_1 = __importDefault(require("./tencent"));
exports.tencent = tencent_1.default;

@@ -19,0 +19,0 @@ exports.default = {

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -6,64 +42,76 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
// Stocks
const base_1 = __importDefault(require("../base"));
const stock_1 = __importDefault(require("./transforms/stock"));
const exchange_1 = __importDefault(require("./transforms/exchange"));
var stock_1 = __importDefault(require("./transforms/stock"));
var common_code_1 = __importDefault(require("./transforms/common-code"));
// Utils
const fetch_1 = __importDefault(require("../../utils/fetch"));
var fetch_1 = __importDefault(require("../../utils/fetch"));
/**
* 网易股票代码接口
*/
class Netease extends base_1.default {
var Netease = {
/**
* 构造函数
*/
constructor() {
super();
}
/**
* 获取股票数据
* @param code 需要获取的股票代码
* @param code 股票代码
*/
async getStock(code) {
const transform = (new exchange_1.default).transform(code);
const url = `https://api.money.126.net/data/feed/${transform},money.api?callback=topstock`;
const res = await fetch_1.default.get(url);
const items = JSON.parse(res.body.toString().replace(/\(|\)|;|(topstock)|\s/g, '').replace('{{', '{').replace('}}}', "}}"));
const params = items[transform];
const data = (new stock_1.default(code, params));
return params ? data.getStock() : {
code: transform,
name: '---',
percent: 0,
now: 0,
low: 0,
high: 0,
yesterday: 0,
};
}
getStock: function (code) {
return __awaiter(this, void 0, void 0, function () {
var transform, url, res, items, params, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
transform = (new common_code_1.default).transform(code);
url = "https://api.money.126.net/data/feed/" + transform + ",money.api?callback=topstock";
return [4 /*yield*/, fetch_1.default.get(url)];
case 1:
res = _a.sent();
items = JSON.parse(res.body.toString().replace(/\(|\)|;|(topstock)|\s/g, '').replace('{{', '{').replace('}}}', "}}"));
params = items[transform];
data = (new stock_1.default(code, params));
return [2 /*return*/, params ? data.getStock() : {
code: transform,
name: '---',
percent: 0,
now: 0,
low: 0,
high: 0,
yesterday: 0,
}];
}
});
});
},
/**
* 获取股票组数据
* @param codes 需要获取的股票组代码
* 获取股票数据组
* @param codes 股票代码组
*/
async getStocks(codes) {
const transforms = (new exchange_1.default).transforms(codes);
const url = `https://api.money.126.net/data/feed/${transforms.join(',')},money.api?callback=topstock`;
const res = await fetch_1.default.get(url);
const items = JSON.parse(res.body.toString().replace(/\(|\)|;|(topstock)|\s/g, '').replace('{{', '{').replace('}}}', "}}"));
return codes.map(code => {
const transform = (new exchange_1.default).transform(code);
const params = items[transform];
const data = (new stock_1.default(code, params));
return params ? data.getStock() : {
code: transform,
name: '---',
percent: 0,
now: 0,
low: 0,
high: 0,
yesterday: 0,
};
getStocks: function (codes) {
return __awaiter(this, void 0, void 0, function () {
var transforms, url, res, items;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
transforms = (new common_code_1.default).transforms(codes);
url = "https://api.money.126.net/data/feed/" + transforms.join(',') + ",money.api?callback=topstock";
return [4 /*yield*/, fetch_1.default.get(url)];
case 1:
res = _a.sent();
items = JSON.parse(res.body.toString().replace(/\(|\)|;|(topstock)|\s/g, '').replace('{{', '{').replace('}}}', "}}"));
return [2 /*return*/, codes.map(function (code) {
var transform = (new common_code_1.default).transform(code);
var params = items[transform];
var data = (new stock_1.default(code, params));
return params ? data.getStock() : {
code: transform,
name: '---',
percent: 0,
now: 0,
low: 0,
high: 0,
yesterday: 0,
};
})];
}
});
});
}
}
};
exports.default = Netease;
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -7,14 +20,16 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

// Stocks
const stock_1 = __importDefault(require("../../base/transforms/stock"));
var stock_1 = __importDefault(require("../../base/transforms/stock"));
/**
* 网易股票数据解析
*/
class NeteaseStockTransform extends stock_1.default {
var NeteaseStockTransform = /** @class */ (function (_super) {
__extends(NeteaseStockTransform, _super);
/**
* 构造函数
*/
constructor(code, params) {
super();
this.code = code;
this.params = params;
function NeteaseStockTransform(code, params) {
var _this = _super.call(this) || this;
_this.code = code;
_this.params = params;
return _this;
}

@@ -24,45 +39,45 @@ /**

*/
getCode() {
NeteaseStockTransform.prototype.getCode = function () {
return String(this.code);
}
};
/**
* 获取名称
*/
getName() {
NeteaseStockTransform.prototype.getName = function () {
return String(this.params.name);
}
};
/**
* 获取现价
*/
getNow() {
NeteaseStockTransform.prototype.getNow = function () {
return Number(this.params.price || 0);
}
};
/**
* 获取最低价
*/
getLow() {
NeteaseStockTransform.prototype.getLow = function () {
return Number(this.params.low || 0);
}
};
/**
* 获取最高价
*/
getHigh() {
NeteaseStockTransform.prototype.getHigh = function () {
return Number(this.params.high || 0);
}
};
/**
* 获取昨日收盘价
*/
getYesterday() {
NeteaseStockTransform.prototype.getYesterday = function () {
return Number(this.params.yestclose || 0);
}
};
/**
* 获取涨跌
*/
getPercent() {
NeteaseStockTransform.prototype.getPercent = function () {
return this.getNow() ? this.getNow() / this.getYesterday() - 1 : 0;
}
};
/**
* 获取股票数据
*/
getStock() {
NeteaseStockTransform.prototype.getStock = function () {
return {

@@ -77,4 +92,5 @@ code: this.getCode(),

};
}
}
};
return NeteaseStockTransform;
}(stock_1.default));
exports.default = NeteaseStockTransform;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -6,57 +42,66 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
// Stocks
const base_1 = __importDefault(require("../base"));
const stock_1 = __importDefault(require("./transforms/stock"));
const exchange_1 = __importDefault(require("./transforms/exchange"));
var stock_1 = __importDefault(require("./transforms/stock"));
var common_code_1 = __importDefault(require("./transforms/common-code"));
// Utils
const fetch_1 = __importDefault(require("../../utils/fetch"));
const iconv_1 = __importDefault(require("../../utils/iconv"));
var fetch_1 = __importDefault(require("../../utils/fetch"));
var iconv_1 = __importDefault(require("../../utils/iconv"));
/**
* 新浪股票代码接口
*/
class Sina extends base_1.default {
var Sina = {
/**
* 构造函数
*/
constructor() {
super();
}
/**
* 获取股票数据
* @param code 需要获取的股票代码
* @param code 股票代码
*/
async getStock(code) {
const transform = (new exchange_1.default).transform(code);
// 数据获取
const url = `https://hq.sinajs.cn/list=${transform}`;
const res = await fetch_1.default.get(url);
const body = iconv_1.default.decode(res.body, "gb18030");
const rows = body.split(";\n");
const row = rows[0];
// 数据深解析
const [_, paramsUnformat] = row.split('=');
const params = paramsUnformat.replace('"', '').split(",");
const data = (new stock_1.default(code, params));
return data.getStock();
}
getStock: function (code) {
return __awaiter(this, void 0, void 0, function () {
var transform, url, res, body, rows, row, _a, _, paramsUnformat, params, data;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
transform = (new common_code_1.default).transform(code);
url = "https://hq.sinajs.cn/list=" + transform;
return [4 /*yield*/, fetch_1.default.get(url)];
case 1:
res = _b.sent();
body = iconv_1.default.decode(res.body, "gb18030");
rows = body.split(";\n");
row = rows[0];
_a = row.split('='), _ = _a[0], paramsUnformat = _a[1];
params = paramsUnformat.replace('"', '').split(",");
data = (new stock_1.default(code, params));
return [2 /*return*/, data.getStock()];
}
});
});
},
/**
* 获取股票组数据
* @param codes 需要获取的股票组代码
* 获取股票数据组
* @param codes 股票代码组
*/
async getStocks(codes) {
const transforms = (new exchange_1.default).transforms(codes);
// 数据获取
const url = `https://hq.sinajs.cn/list=${transforms.join(',')}`;
const res = await fetch_1.default.get(url);
const body = iconv_1.default.decode(res.body, "gb18030");
const rows = body.split(";\n");
return codes.map((code, index) => {
// 数据深解析
const [_, paramsUnformat] = rows[index].split('=');
const params = paramsUnformat.replace('"', '').split(",");
const data = (new stock_1.default(code, params));
return data.getStock();
getStocks: function (codes) {
return __awaiter(this, void 0, void 0, function () {
var transforms, url, res, body, rows;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
transforms = (new common_code_1.default).transforms(codes);
url = "https://hq.sinajs.cn/list=" + transforms.join(',');
return [4 /*yield*/, fetch_1.default.get(url)];
case 1:
res = _a.sent();
body = iconv_1.default.decode(res.body, "gb18030");
rows = body.split(";\n");
return [2 /*return*/, codes.map(function (code, index) {
// 数据深解析
var _a = rows[index].split('='), _ = _a[0], paramsUnformat = _a[1];
var params = paramsUnformat.replace('"', '').split(",");
var data = (new stock_1.default(code, params));
return data.getStock();
})];
}
});
});
}
}
};
exports.default = Sina;
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -7,16 +20,18 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

// Stocks
const stock_1 = __importDefault(require("../../base/transforms/stock"));
var stock_1 = __importDefault(require("../../base/transforms/stock"));
// Utils
const constant_1 = require("../../../utils/constant");
var constant_1 = require("../../base/utils/constant");
/**
* 新浪股票数据解析
*/
class SinaStockTransform extends stock_1.default {
var SinaStockTransform = /** @class */ (function (_super) {
__extends(SinaStockTransform, _super);
/**
* 构造函数
*/
constructor(code, params) {
super();
this.code = code;
this.params = params;
function SinaStockTransform(code, params) {
var _this = _super.call(this) || this;
_this.code = code;
_this.params = params;
return _this;
}

@@ -26,17 +41,17 @@ /**

*/
getCode() {
SinaStockTransform.prototype.getCode = function () {
return String(this.code);
}
};
/**
* 获取名称
*/
getName() {
SinaStockTransform.prototype.getName = function () {
switch (this.code.slice(0, 2)) {
case constant_1.SH:
case constant_1.COMMON_SH:
return String(this.params[0]);
case constant_1.SZ:
case constant_1.COMMON_SZ:
return String(this.params[0]);
case constant_1.HK:
case constant_1.COMMON_HK:
return String(this.params[1]);
case constant_1.US:
case constant_1.COMMON_US:
return String(this.params[0]);

@@ -46,15 +61,15 @@ default:

}
}
};
/**
* 获取现价
*/
getNow() {
SinaStockTransform.prototype.getNow = function () {
switch (this.code.slice(0, 2)) {
case constant_1.SH:
case constant_1.COMMON_SH:
return Number(this.params[3]);
case constant_1.SZ:
case constant_1.COMMON_SZ:
return Number(this.params[3]);
case constant_1.HK:
case constant_1.COMMON_HK:
return Number(this.params[6]);
case constant_1.US:
case constant_1.COMMON_US:
return Number(this.params[1]);

@@ -64,15 +79,15 @@ default:

}
}
};
/**
* 获取最低价
*/
getLow() {
SinaStockTransform.prototype.getLow = function () {
switch (this.code.slice(0, 2)) {
case constant_1.SH:
case constant_1.COMMON_SH:
return Number(this.params[5]);
case constant_1.SZ:
case constant_1.COMMON_SZ:
return Number(this.params[5]);
case constant_1.HK:
case constant_1.COMMON_HK:
return Number(this.params[5]);
case constant_1.US:
case constant_1.COMMON_US:
return Number(this.params[7]);

@@ -82,15 +97,15 @@ default:

}
}
};
/**
* 获取最高价
*/
getHigh() {
SinaStockTransform.prototype.getHigh = function () {
switch (this.code.slice(0, 2)) {
case constant_1.SH:
case constant_1.COMMON_SH:
return Number(this.params[4]);
case constant_1.SZ:
case constant_1.COMMON_SZ:
return Number(this.params[4]);
case constant_1.HK:
case constant_1.COMMON_HK:
return Number(this.params[4]);
case constant_1.US:
case constant_1.COMMON_US:
return Number(this.params[6]);

@@ -100,15 +115,15 @@ default:

}
}
};
/**
* 获取昨日收盘价
*/
getYesterday() {
SinaStockTransform.prototype.getYesterday = function () {
switch (this.code.slice(0, 2)) {
case constant_1.SH:
case constant_1.COMMON_SH:
return Number(this.params[2]);
case constant_1.SZ:
case constant_1.COMMON_SZ:
return Number(this.params[2]);
case constant_1.HK:
case constant_1.COMMON_HK:
return Number(this.params[3]);
case constant_1.US:
case constant_1.COMMON_US:
return Number(this.params[26]);

@@ -118,13 +133,13 @@ default:

}
}
};
/**
* 获取涨跌
*/
getPercent() {
SinaStockTransform.prototype.getPercent = function () {
return this.getNow() ? this.getNow() / this.getYesterday() - 1 : 0;
}
};
/**
* 获取股票数据
*/
getStock() {
SinaStockTransform.prototype.getStock = function () {
return {

@@ -139,4 +154,5 @@ code: this.getCode(),

};
}
}
};
return SinaStockTransform;
}(stock_1.default));
exports.default = SinaStockTransform;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -6,57 +42,66 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
// Stocks
const base_1 = __importDefault(require("../base"));
const stock_1 = __importDefault(require("./transforms/stock"));
const exchange_1 = __importDefault(require("./transforms/exchange"));
var stock_1 = __importDefault(require("./transforms/stock"));
var common_code_1 = __importDefault(require("./transforms/common-code"));
// Utils
const fetch_1 = __importDefault(require("../../utils/fetch"));
const iconv_1 = __importDefault(require("../../utils/iconv"));
var fetch_1 = __importDefault(require("../../utils/fetch"));
var iconv_1 = __importDefault(require("../../utils/iconv"));
/**
* 腾讯股票代码接口
*/
class Tencent extends base_1.default {
var Tencent = {
/**
* 构造函数
*/
constructor() {
super();
}
/**
* 获取股票数据
* @param code 需要获取的股票代码
* @param code 股票代码
*/
async getStock(code) {
const transform = (new exchange_1.default).transform(code);
// 数据获取
const url = `https://qt.gtimg.cn/q=${transform}`;
const res = await fetch_1.default.get(url).responseType('blob');
const body = iconv_1.default.decode(res.body, "gbk");
const rows = body.split(";\n");
const row = rows[0];
// 数据深解析
const [_, paramsUnformat] = row.split('=');
const params = paramsUnformat.replace('"', '').split("~");
const data = (new stock_1.default(code, params));
return data.getStock();
}
getStock: function (code) {
return __awaiter(this, void 0, void 0, function () {
var transform, url, res, body, rows, row, _a, _, paramsUnformat, params, data;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
transform = (new common_code_1.default).transform(code);
url = "https://qt.gtimg.cn/q=" + transform;
return [4 /*yield*/, fetch_1.default.get(url).responseType('blob')];
case 1:
res = _b.sent();
body = iconv_1.default.decode(res.body, "gbk");
rows = body.split(";\n");
row = rows[0];
_a = row.split('='), _ = _a[0], paramsUnformat = _a[1];
params = paramsUnformat.replace('"', '').split("~");
data = (new stock_1.default(code, params));
return [2 /*return*/, data.getStock()];
}
});
});
},
/**
* 获取股票组数据
* @param codes 需要获取的股票组代码
* 获取股票数据组
* @param codes 股票代码组
*/
async getStocks(codes) {
const transforms = (new exchange_1.default).transforms(codes);
// 数据获取
const url = `https://qt.gtimg.cn/q=${transforms.join(',')}`;
const res = await fetch_1.default.get(url).responseType('blob');
const body = iconv_1.default.decode(res.body, "gbk");
const rows = body.split(";\n");
return codes.map((code, index) => {
// 数据深解析
const [_, paramsUnformat] = rows[index].split('=');
const params = paramsUnformat.replace('"', '').split("~");
const data = (new stock_1.default(code, params));
return data.getStock();
getStocks: function (codes) {
return __awaiter(this, void 0, void 0, function () {
var transforms, url, res, body, rows;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
transforms = (new common_code_1.default).transforms(codes);
url = "https://qt.gtimg.cn/q=" + transforms.join(',');
return [4 /*yield*/, fetch_1.default.get(url).responseType('blob')];
case 1:
res = _a.sent();
body = iconv_1.default.decode(res.body, "gbk");
rows = body.split(";\n");
return [2 /*return*/, codes.map(function (code, index) {
// 数据深解析
var _a = rows[index].split('='), _ = _a[0], paramsUnformat = _a[1];
var params = paramsUnformat.replace('"', '').split("~");
var data = (new stock_1.default(code, params));
return data.getStock();
})];
}
});
});
}
}
};
exports.default = Tencent;
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -7,14 +20,16 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

// Stocks
const stock_1 = __importDefault(require("../../base/transforms/stock"));
var stock_1 = __importDefault(require("../../base/transforms/stock"));
/**
* 腾讯股票数据解析
*/
class TencentStockTransform extends stock_1.default {
var TencentStockTransform = /** @class */ (function (_super) {
__extends(TencentStockTransform, _super);
/**
* 构造函数
*/
constructor(code, params) {
super();
this.code = code;
this.params = params;
function TencentStockTransform(code, params) {
var _this = _super.call(this) || this;
_this.code = code;
_this.params = params;
return _this;
}

@@ -24,45 +39,45 @@ /**

*/
getCode() {
TencentStockTransform.prototype.getCode = function () {
return String(this.code);
}
};
/**
* 获取名称
*/
getName() {
TencentStockTransform.prototype.getName = function () {
return String(this.params[1]);
}
};
/**
* 获取现价
*/
getNow() {
TencentStockTransform.prototype.getNow = function () {
return Number(this.params[3]);
}
};
/**
* 获取最低价
*/
getLow() {
TencentStockTransform.prototype.getLow = function () {
return Number(this.params[34]);
}
};
/**
* 获取最高价
*/
getHigh() {
TencentStockTransform.prototype.getHigh = function () {
return Number(this.params[33]);
}
};
/**
* 获取昨日收盘价
*/
getYesterday() {
TencentStockTransform.prototype.getYesterday = function () {
return Number(this.params[4]);
}
};
/**
* 获取涨跌
*/
getPercent() {
TencentStockTransform.prototype.getPercent = function () {
return this.getNow() ? this.getNow() / this.getYesterday() - 1 : 0;
}
};
/**
* 获取股票数据
*/
getStock() {
TencentStockTransform.prototype.getStock = function () {
return {

@@ -77,4 +92,5 @@ code: this.getCode(),

};
}
}
};
return TencentStockTransform;
}(stock_1.default));
exports.default = TencentStockTransform;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -6,69 +42,90 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

Object.defineProperty(exports, "__esModule", { value: true });
// Stocks
const base_1 = __importDefault(require("../base"));
const stock_1 = __importDefault(require("./transforms/stock"));
const exchange_1 = __importDefault(require("./transforms/exchange"));
var stock_1 = __importDefault(require("./transforms/stock"));
var common_code_1 = __importDefault(require("./transforms/common-code"));
// Utils
const fetch_1 = __importDefault(require("../../utils/fetch"));
var fetch_1 = __importDefault(require("../../utils/fetch"));
var token = '';
/**
* 雪球股票代码接口
*/
class Xueqiu extends base_1.default {
var Xueqiu = {
/**
* 构造函数
*/
constructor() {
super();
this.token = '';
}
/**
* 获取 Token
*/
async getToken() {
if (this.token !== '')
return this.token;
const res = await fetch_1.default.get('https://xueqiu.com/');
const cookies = res.headers['set-cookie'];
const param = cookies.filter(key => key.includes('xq_a_token'))[0] || '';
this.token = param.split(';')[0] || '';
return this.token;
}
getToken: function () {
return __awaiter(this, void 0, void 0, function () {
var res, cookies, param;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (token !== '')
return [2 /*return*/, token];
return [4 /*yield*/, fetch_1.default.get('https://xueqiu.com/')];
case 1:
res = _a.sent();
cookies = res.headers['set-cookie'];
param = cookies.filter(function (key) { return key.includes('xq_a_token'); })[0] || '';
token = param.split(';')[0] || '';
return [2 /*return*/, token];
}
});
});
},
/**
* 获取股票数据
* @param code 需要获取的股票代码
* @param code 股票代码
*/
async getStock(code) {
const token = await this.getToken();
const transform = (new exchange_1.default).transform(code);
// 数据获取
const url = `https://stock.xueqiu.com/v5/stock/quote.json?symbol=${transform}`;
const res = await fetch_1.default.get(url).set('Cookie', token);
const body = JSON.parse(res.text);
const row = body.data.quote;
// 数据深解析
const params = row;
const data = (new stock_1.default(code, params));
return data.getStock();
}
getStock: function (code) {
return __awaiter(this, void 0, void 0, function () {
var token, transform, url, res, body, row, params, data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.getToken()];
case 1:
token = _a.sent();
transform = (new common_code_1.default).transform(code);
url = "https://stock.xueqiu.com/v5/stock/quote.json?symbol=" + transform;
return [4 /*yield*/, fetch_1.default.get(url).set('Cookie', token)];
case 2:
res = _a.sent();
body = JSON.parse(res.text);
row = body.data.quote;
params = row;
data = (new stock_1.default(code, params));
return [2 /*return*/, data.getStock()];
}
});
});
},
/**
* 获取股票组数据
* @param codes 需要获取的股票组代码
* 获取股票数据组
* @param codes 股票代码组
*/
async getStocks(codes) {
const token = await this.getToken();
const transforms = (new exchange_1.default).transforms(codes);
// 数据获取
const url = `https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=${transforms.join(',')}`;
const res = await fetch_1.default.get(url).set('Cookie', token);
const body = JSON.parse(res.text);
const rows = body.data.items;
return codes.map(code => {
// 数据深解析
const transform = (new exchange_1.default).transform(code);
const params = rows.find(i => i.quote.symbol === transform) || {};
const data = (new stock_1.default(code, params.quote));
return data.getStock();
getStocks: function (codes) {
return __awaiter(this, void 0, void 0, function () {
var token, transforms, url, res, body, rows;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.getToken()];
case 1:
token = _a.sent();
transforms = (new common_code_1.default).transforms(codes);
url = "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=" + transforms.join(',');
return [4 /*yield*/, fetch_1.default.get(url).set('Cookie', token)];
case 2:
res = _a.sent();
body = JSON.parse(res.text);
rows = body.data.items;
return [2 /*return*/, codes.map(function (code) {
// 数据深解析
var transform = (new common_code_1.default).transform(code);
var params = rows.find(function (i) { return i.quote.symbol === transform; }) || {};
var data = (new stock_1.default(code, params.quote));
return data.getStock();
})];
}
});
});
}
}
};
exports.default = Xueqiu;
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -7,14 +20,16 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

// Stocks
const stock_1 = __importDefault(require("../../base/transforms/stock"));
var stock_1 = __importDefault(require("../../base/transforms/stock"));
/**
* 雪球股票数据解析
*/
class XueqiuStockTransform extends stock_1.default {
var XueqiuStockTransform = /** @class */ (function (_super) {
__extends(XueqiuStockTransform, _super);
/**
* 构造函数
*/
constructor(code, params) {
super();
this.code = code;
this.params = params;
function XueqiuStockTransform(code, params) {
var _this = _super.call(this) || this;
_this.code = code;
_this.params = params;
return _this;
}

@@ -24,45 +39,45 @@ /**

*/
getCode() {
XueqiuStockTransform.prototype.getCode = function () {
return String(this.code);
}
};
/**
* 获取名称
*/
getName() {
XueqiuStockTransform.prototype.getName = function () {
return String(this.params.name || this.code);
}
};
/**
* 获取现价
*/
getNow() {
XueqiuStockTransform.prototype.getNow = function () {
return Number(this.params.current);
}
};
/**
* 获取最低价
*/
getLow() {
XueqiuStockTransform.prototype.getLow = function () {
return Number(this.params.low);
}
};
/**
* 获取最高价
*/
getHigh() {
XueqiuStockTransform.prototype.getHigh = function () {
return Number(this.params.high);
}
};
/**
* 获取昨日收盘价
*/
getYesterday() {
XueqiuStockTransform.prototype.getYesterday = function () {
return Number(this.params.last_close);
}
};
/**
* 获取涨跌
*/
getPercent() {
XueqiuStockTransform.prototype.getPercent = function () {
return this.getNow() ? this.getNow() / this.getYesterday() - 1 : 0;
}
};
/**
* 获取股票数据
*/
getStock() {
XueqiuStockTransform.prototype.getStock = function () {
return {

@@ -77,4 +92,5 @@ code: this.getCode(),

};
}
}
};
return XueqiuStockTransform;
}(stock_1.default));
exports.default = XueqiuStockTransform;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const superagent = require('superagent');
var superagent = require('superagent');
exports.default = superagent;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const iconv = require("iconv-lite");
var iconv = require("iconv-lite");
exports.default = iconv;
{
"name": "stock-api",
"version": "1.1.1",
"version": "2.0.0",
"description": "【韭菜小猪】免费股票数据分析相关接口",

@@ -5,0 +5,0 @@ "keywords": [

@@ -55,18 +55,9 @@ <h1 align="center">股票数据小助手</h1>

// 省略 async 相关内容
const sina = stocks["sina"];
const netease = stocks["netease"];
const tencent = stocks["tencent"];
const xueqiu = stocks["xueqiu"];
// 数据源
const sina = stocks.sina;
const xueqiu = stocks.xueqiu;
const netease = stocks.netease;
const tencent = stocks.tencent;
```
##### 直接导入
```typescript
import Sina from "stock-api/stocks/sina";
import Netease from "stock-api/stocks/netease";
import Tencent from "stock-api/stocks/tencent";
import Xueqiu from "stock-api/stocks/xuiqiu";
```
### 获取股票实时数据

@@ -79,7 +70,4 @@

// 选择数据源
const api = new stocks["sina"];
// 获取数据
api.getStock("SH510500").then(console.log);
// 获取股票实时数据
stocks.sina.getStock("SH510500").then(console.log);
```

@@ -108,7 +96,4 @@

// 选择数据源
const api = new stocks["sina"];
// 获取数据
api.getStocks(["SH510500"]).then(console.log);
// 获取股票组实时数据
stocks.sina.getStocks(["SH510500"]).then(console.log);
```

@@ -130,4 +115,2 @@

## 一起成长

@@ -134,0 +117,0 @@

@@ -5,14 +5,4 @@ import Stock from '../utils/stock';

/**
* 构造函数
*/
new(): StockApi;
/**
* 构造函数
*/
constructor(): StockApi;
/**
* 获取股票数据
* @param code 需要获取的股票代码
* @param code 股票代码
*/

@@ -22,4 +12,4 @@ getStock(code: string): Promise<Stock>;

/**
* 获取股票组数据
* @param codes 需要获取的股票组代码
* 获取股票数据组
* @param codes 股票代码组
*/

@@ -26,0 +16,0 @@ getStocks(codes: string[]): Promise<Stock[]>;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc