stock-api
Advanced tools
Comparing version 1.1.1 to 2.0.0
@@ -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[]>; |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
85121
38
2089
119
1