下面是针对日本股票市场 的完整对接方案,包含从获取股票列表 到渲染 KlineCharts K 线图的详细步骤和代码。
核心流程
- 获取日本股票列表 :使用
countryId=35查询日本市场的股票,获取目标股票的id(即 PID)。 - 获取 K 线数据 :使用该
pid请求历史 K 线数据。 - 绘制图表:将数据转换为 KlineCharts 格式并渲染。
第一步:获取日本股票 PID (API 调试)
在写代码前,您需要先通过 API 拿到您想展示的日本股票(例如丰田、索尼等)的 id。
请求方式:
- 接口 URL :
https://api.stocktv.top/stock/stocks - 参数 :
countryId: 35 (日本)pageSize:10key:您的Key
请求示例 (GET):
http
https://api.stocktv.top/stock/stocks?countryId=35&pageSize=10&page=1&key=您的Key
返回示例 (假设): 您会在返回的 data.records 列表中找到股票信息。
json
{
"id": 99999, <-- 这个是 PID,记下这个数字用于下一步
"name": "Toyota Motor Corp",
"symbol": "7203",
"countryId": 35,
...
}
第二步:完整实现代码 (HTML + KlineCharts)
将以下代码保存为 .html 文件。请替换代码顶部的 YOUR_API_KEY 和您在上一步获取到的 JAPAN_STOCK_PID。
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>日本股票 K线图 (KlineCharts)</title>
<script src="https://cdn.jsdelivr.net/npm/klinecharts/dist/klinecharts.min.js"></script>
<style>
body { margin: 0; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; }
h2 { margin-bottom: 10px; }
.config-box {
background: #f5f5f5; padding: 15px; border-radius: 8px; margin-bottom: 20px;
display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
}
input, select, button { padding: 8px; border: 1px solid #ccc; border-radius: 4px; }
button { background-color: #007bff; color: white; border: none; cursor: pointer; }
button:hover { background-color: #0056b3; }
#chart-container { width: 100%; height: 600px; border: 1px solid #e0e0e0; border-radius: 4px; }
</style>
</head>
<body>
<h2>StockTV 日本股票 K线演示 (CountryID=35)</h2>
<div class="config-box">
<label>股票PID: <input type="number" id="pidInput" value="953373" placeholder="例如: 953373"></label>
<label>周期:
<select id="intervalSelect">
<option value="P1D">日线 (1 Day)</option>
<option value="PT1H">1小时 (1 Hour)</option>
<option value="PT15M">15分钟 (15 Min)</option>
<option value="PT5M">5分钟 (5 Min)</option>
</select>
</label>
<button onclick="loadChartData()">生成图表</button>
</div>
<div id="chart-container"></div>
<script>
// 配置您的 API Key
const API_KEY = '联系我们获取key'; // TODO: 请在此处填入您的真实 Key
const BASE_URL = 'https://api.stocktv.top';
// 初始化 KlineCharts
let chart = klinecharts.init('chart-container');
// 设置一些基础样式
chart.setStyleOptions({
candle: {
tooltip: {
labels: ['时间', '开', '收', '高', '低', '成交量']
}
}
});
chart.createIndicator('VOL'); // 创建成交量指标
async function loadChartData() {
const pid = document.getElementById('pidInput').value;
const interval = document.getElementById('intervalSelect').value;
if (!pid) {
alert("请输入股票 PID");
return;
}
console.log(`正在请求日本股票数据: PID=${pid}, Interval=${interval}`);
try {
// 构造 StockTV API 请求
// 文档接口: /stock/kline
const url = `${BASE_URL}/stock/kline?pid=${pid}&interval=${interval}&key=${API_KEY}`;
const response = await fetch(url);
const resJson = await response.json();
if (resJson.code === 200) {
const stockData = resJson.data;
if (!stockData || stockData.length === 0) {
alert("该股票在此周期下无数据");
return;
}
// 数据格式转换
// StockTV: { time: 1719818400000, open: 239.42, ... }
// KlineCharts: { timestamp: 1719818400000, open: 239.42, ... }
const klineData = stockData.map(item => {
return {
timestamp: item.time, // 直接使用 API 返回的时间戳
open: Number(item.open),
high: Number(item.high),
low: Number(item.low),
close: Number(item.close),
volume: Number(item.volume)
};
});
// 确保按时间升序排序
klineData.sort((a, b) => a.timestamp - b.timestamp);
// 渲染数据
chart.applyNewData(klineData);
console.log("图表渲染成功,数据条数:", klineData.length);
} else {
console.error("API 错误:", resJson);
alert("接口报错: " + resJson.message);
}
} catch (err) {
console.error("请求失败:", err);
alert("网络请求失败,请检查控制台 (F12)");
}
}
// 窗口大小调整时自动调整图表
window.addEventListener('resize', () => {
chart.resize();
});
// 页面加载时自动尝试加载一次(方便测试)
// 如果您有确定的日本股票PID,可以在 input 的 value 中预设
// loadChartData();
</script>
</body>
</html>
关键点说明
-
CountryId=35 的使用:
countryId=35主要用于查询列表 (/stock/stocks) 阶段,用于筛选出日本市场的股票及其对应的 PID。- 一旦拿到 PID,在请求 K 线数据 (
/stock/kline) 时,只需要 PID,不需要再传 countryId。
-
数据映射 (Mapping):
- StockTV 返回的字段是
time,open,high,low,close,volume。 - KlineCharts 要求的字段是
timestamp,open,high,low,close,volume。 - 代码中
timestamp: item.time这一行完成了关键的转换。
- StockTV 返回的字段是
-
周期格式:
- 请确保传给 API 的
interval参数是P1D(日),PT1H(时) 等 ISO8601 格式,否则 API 可能会报错或返回空数据。
- 请确保传给 API 的