eastmoney/stock
eastmoneyRead-only获取东方财富网股票实时行情
quote.eastmoney.com
Last 7 days
0
Last 30 days
0
All time
0
eastmoney/stock.js
/* @meta
{
"name": "eastmoney/stock",
"description": "获取东方财富网股票实时行情",
"domain": "quote.eastmoney.com",
"args": {
"query": {"required": true, "description": "股票名称或代码,如 贵州茅台 或 600519"}
},
"readOnly": true,
"example": "tap site eastmoney/stock 贵州茅台"
}
*/
async function(args) {
if (!args.query) return {error: 'Missing argument: query', hint: '请输入股票名称或代码'};
// Step 1: Search for the stock to resolve secid
var q = encodeURIComponent(args.query);
var searchResp = await fetch('https://searchapi.eastmoney.com/api/suggest/get?input=' + q + '&type=14&count=5');
if (!searchResp.ok) return {error: '搜索失败: HTTP ' + searchResp.status};
var searchData = await searchResp.json();
var results = (searchData.QuotationCodeTable && searchData.QuotationCodeTable.Data) || [];
if (results.length === 0) return {error: '未找到股票: ' + args.query};
// Use the first match
var match = results[0];
var secid = match.QuoteID; // e.g. "1.600519"
if (!secid) {
// Fallback: construct from MktNum and Code
secid = match.MktNum + '.' + match.Code;
}
// Step 2: Fetch real-time quote
// f43=最新价 f44=最高 f45=最低 f46=开盘 f47=成交量(手) f48=成交额
// f57=代码 f58=名称 f60=昨收 f170=涨跌幅(bp) f169=涨跌额 f171=振幅
// f116=总市值 f117=流通市值 f162=市盈率(动) f167=市净率
var fields = 'f43,f44,f45,f46,f47,f48,f57,f58,f60,f169,f170,f171,f116,f117,f162,f167';
var quoteResp = await fetch('https://push2.eastmoney.com/api/qt/stock/get?secid=' + secid + '&fields=' + fields);
if (!quoteResp.ok) return {error: '行情获取失败: HTTP ' + quoteResp.status};
var quoteData = await quoteResp.json();
var d = quoteData.data;
if (!d) return {error: '无行情数据', secid: secid};
// Prices are in cents (分), convert to yuan
var divisor = 100;
var price = d.f43 != null ? (d.f43 / divisor).toFixed(2) : null;
var high = d.f44 != null ? (d.f44 / divisor).toFixed(2) : null;
var low = d.f45 != null ? (d.f45 / divisor).toFixed(2) : null;
var open = d.f46 != null ? (d.f46 / divisor).toFixed(2) : null;
var prevClose = d.f60 != null ? (d.f60 / divisor).toFixed(2) : null;
var change = d.f169 != null ? (d.f169 / divisor).toFixed(2) : null;
var changePercent = d.f170 != null ? (d.f170 / 100).toFixed(2) + '%' : null;
var amplitude = d.f171 != null ? (d.f171 / 100).toFixed(2) + '%' : null;
// Volume in lots (手), amount in yuan
var volume = d.f47 != null ? d.f47 : null;
var amount = d.f48 != null ? d.f48 : null;
// Market cap in yuan
var marketCap = d.f116 != null ? d.f116 : null;
var floatMarketCap = d.f117 != null ? d.f117 : null;
var pe = d.f162 != null ? (d.f162 / 100).toFixed(2) : null;
var pb = d.f167 != null ? (d.f167 / 100).toFixed(2) : null;
// Format large numbers
function fmtAmount(v) {
if (v == null) return null;
if (v >= 1e12) return (v / 1e12).toFixed(2) + '万亿';
if (v >= 1e8) return (v / 1e8).toFixed(2) + '亿';
if (v >= 1e4) return (v / 1e4).toFixed(2) + '万';
return v.toString();
}
return {
name: d.f58 || match.Name,
code: d.f57 || match.Code,
secid: secid,
market: match.SecurityTypeName || (match.MktNum === '1' ? '沪A' : '深A'),
price: price,
change: change,
changePercent: changePercent,
open: open,
high: high,
low: low,
prevClose: prevClose,
amplitude: amplitude,
volume: volume != null ? volume + '手' : null,
amount: fmtAmount(amount),
marketCap: fmtAmount(marketCap),
floatMarketCap: fmtAmount(floatMarketCap),
pe: pe,
pb: pb,
url: 'https://quote.eastmoney.com/' + match.Code + '.html',
otherMatches: results.length > 1 ? results.slice(1).map(function(r) {
return {code: r.Code, name: r.Name, type: r.SecurityTypeName};
}) : []
};
}
Updated Mar 31, 2026Created Mar 31, 2026SHA-256: 35ea28a9aae6…