新浪财经个股信息API - heavyii/china-stock-crawler GitHub Wiki
新浪财经个股信息API
链接形式
http://hq.sinajs.cn/list=参数
其中,参数为若干个股票标志,用,分隔。(若干个还不确定最大支持多少,但经测试500个是可以的)
有两种形式的股票标志:
- 普通标志,为常见的
sh/sz加上股票代码的形式,可取得该股票当前行情信息,例如:sh601998 - 在普通标志后增加
_i,可取得该股票近期信息的标志,例如:sh601998_i
链接举例
http://hq.sinajs.cn/list=sh601998,sh600004_i,sz300059
返回数据
依照提供的股票标志逐行显示数据。
普通标志的返回数据
例如链接:
http://hq.sinajs.cn/list=sh601998
返回值:
var hq_str_sh601998="中信银行,5.540,5.600,5.580,5.620,5.500,5.580,5.590,49628052,276209657.000,78300,5.580,87400,5.570,272854,5.560,225400,5.550,180900,5.540,220025,5.590,451400,5.600,405881,5.610,450800,5.620,221400,5.630,2016-02-26,15:00:00,00";
"中为对应数据,各字段意义如下(此处从0开始计数):
0:股票名称
1:今开盘价
2:上个交易日收盘价
3:当前价
4:今日最高价
5:今日最低价
6:竞买价,即买一价
7:竞卖价,即卖一价
8:成交量/股
9:成交额/万元
10:买一量/股
11:买一价
12:买二量/股
13:买二价
14:买三量/股
15:买三价
16:买四量/股
17:买四价
18:买五量/股
19:买五价
20:卖一量/股
21:卖一价
22:卖二量/股
23:卖二价
24:卖三量/股
25:卖三价
26:卖四量/股
27:卖四价
28:卖五量/股
29:卖五价
30:日期
31:时间
32:状态
其中,状态值对应的意义为:
00: 正常
01: 临时停牌1H
02: 停牌
03: 停牌
04: 临时停牌
05: 停1/2
07: 暂停
-1: 无记录
-2: 未上市
-3: 退市
注:参考自新浪的js代码。
加_i标志的返回数据
例如链接:
http://hq.sinajs.cn/list=sh601998_i
返回值:
var hq_str_sh601998_i="A,zxyh,0.8700,0.8833,0.7000,6.2900,2515.7172,4893479.6573,3190516.4057,3190516.4057,0,CNY,406.9200,413.3800,5.8000,1,11.9175,1074.5300,329.2600";
"中为对应数据,各字段意义(此处从0开始计数):
0: 股票类型(A:A股, B:B股, I:指数)
1: 拼音简写
2: 前一年每股收益和
3: 最近四个季度每股收益和
4: ?
5: 最近报告的每股净资产/元
6: 过去5个交易日平均每分钟成交量
7: 总股本/万股
8: 流通股本/万股
9: 流通A股股本/万股
10: 流通B股股本/万股
11: ?
12: 最近年度净利润/亿元
13: 最近四个季度净利润/亿元
14: ?
15: ?
16: ?
17: 主营业务收入/亿元 营收
18: 净利润/亿元
websocket接口
const WebSocketClient = require('websocket').client;
// 订阅新浪股票行情
async function stockMarket() {
async function getStockList() {
let labels = await agent.knex('op_stock').select('label').limit(10);
let labelArray = labels.map(v => {
return v.label
});
let labellist = labelArray.join(',').toLowerCase();
return labellist;
}
async function sendStockMarket(data) {
const key = 'stock:market';
let rst = await agent.redis.hset(key, data);
console.log('redis ret', rst, data);
}
const stocklist = await getStockList();
// 'wss://teatapi.visioners.cn/wskt?list=sh000001,sz399001,sz399006'
const wssurl = 'wss://teatapi.visioners.cn/wskt?list=' + stocklist;
var client = new WebSocketClient();
client.on('connectFailed', function (error) {
console.log('Connect Error: ' + error.toString());
});
client.on('connect', function (connection) {
console.log('WebSocket Client Connected');
connection.on('error', function (error) {
console.log("Connection Error: " + error.toString());
});
connection.on('close', function () {
console.log('echo-protocol Connection Closed');
connetToSina();
});
connection.on('message', async function (message) {
if (message.type === 'utf8') {
let data = message.utf8Data
data = data.split('\n');
let array = [];
data.forEach(v => {
let [label, code] = v.split('=')
array.push(label);
array.push(code);
})
await sendStockMarket(array);
}
});
function sendHeart() {
if (connection.connected) {
connection.sendUTF('');
setTimeout(sendHeart, 1000);
}
}
sendHeart();
});
function connetToSina() {
//
client.connect(wssurl);
console.log('############################ start websocket', wssurl);
}
connetToSina();
}