用js rxjs取东财数据
import axios from "axios";
import { interval } from "rxjs";
import { catchError, switchMap } from "rxjs";
// 定义请求函数
const fetchStockData = async () => {
try {
const response = await axios.get(
"http://57.push2.eastmoney.com/api/qt/clist/get",
{
params: {
pn: 1,
pz: 10000,
po: 1,
np: 1,
ut: "bd1d9ddb04089700cf9c27f6f7426281",
fltt: 2,
invt: 2,
wbp2u: "|0|0|0|web",
fid: "f9",
fs: "m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048",
fields: "f12,f14",
},
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
},
},
);
if (response.status === 200 && response.data) {
console.log(response.data.data.total);
return response.data.data.diff; // 返回股票列表
}
console.error("请求失败:", response.statusText);
return [];
} catch (error) {
console.error("请求失败:", error);
return [];
}
};
// 每1秒请求一次
const stock$ = interval(1000).pipe(
switchMap(() => fetchStockData()),
catchError((error) => {
console.error("数据流错误:", error);
return [];
}),
);
// 订阅数据流
stock$.subscribe((codes) => {
console.log("获取到股票数量: ", codes.length);
console.log("获取到股票代码: ", codes);
});
原生代码:
// 定义请求函数
const fetchStockData = async () => {
try {
const response = await fetch(
"https://push2.eastmoney.com/api/qt/clist/get?np=1&fltt=1&invt=2&fs=m%3A0%2Bt%3A6%2Cm%3A0%2Bt%3A80%2Cm%3A1%2Bt%3A2%2Cm%3A1%2Bt%3A23%2Cm%3A0%2Bt%3A81%2Bs%3A2048&fields=f12%2Cf13%2Cf14%2Cf1%2Cf2%2Cf4%2Cf3%2Cf152%2Cf5%2Cf6%2Cf7%2Cf15%2Cf18%2Cf16%2Cf17%2Cf10%2Cf8%2Cf9%2Cf23&fid=f3&pn=1&pz=20&po=1&dect=1&ut=fa5fd1943c7b386f172d6893dbfba10b&wbp2u=%7C0%7C0%7C0%7Cweb&_=1742554240277"
// "http://57.push2.eastmoney.com/api/qt/clist/get",
// {
// method: "GET",
// headers: {
// "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
// },
// params: new URLSearchParams({
// dect: 1,
// pn: 1,
// pz: 10000,
// po: 1,
// np: 1,
// ut: "fa5fd1943c7b386f172d6893dbfba10b",
// fltt: 1,
// invt: 2,
// wbp2u: "|0|0|0|web",
// fid: "f9",
// fs: "m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048",
// fields: "f12,f14",
// }),
// }
);
if (!response.ok) {
console.error("请求失败:", response.statusText);
return [];
}
const result = await response.json();
if (result.data) {
console.log(result.data.total);
return result.data.diff; // 返回股票列表
}
return [];
} catch (error) {
console.error("请求失败:", error);
return [];
}
};
// 每1秒请求一次
setInterval(async () => {
const codes = await fetchStockData();
console.log("获取到股票数量: ", codes.length);
console.log("获取到股票代码: ", codes);
}, 1000);
注释部分代码返回数据总是空,有空再研究原因。
// 定义基础URL和查询参数对象
const baseUrl = "http://57.push2.eastmoney.com/api/qt/clist/get";
const params = {
np: "1",
fltt: "1",
invt: "2",
fs: "m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048",
fields: "f12,f13,f14,f1,f2,f4,f3,f152,f5,f6,f7,f15,f18,f16,f17,f10,f8,f9,f23",
fid: "f3",
pn: "1",
pz: "20",
po: "1",
dect: "1",
ut: "fa5fd1943c7b386f172d6893dbfba10b",
wbp2u: "|0|0|0|web",
_: "1742554240277",
};
// 使用 URLSearchParams 构建查询字符串
const queryString = new URLSearchParams(params).toString();
// 拼接完整的URL
const fullUrl = `${baseUrl}?${queryString}`;
// 发送 GET 请求
fetch(fullUrl)
.then((response) => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.json(); // 假设返回的数据是 JSON 格式
})
.then((data) => {
console.log("Success:", data);
})
.catch((error) => {
console.error("Error:", error);
});
上述代码用bun运行正常。

浙公网安备 33010602011771号