用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运行正常。

posted @ 2025-03-24 20:52  卓能文  阅读(67)  评论(0)    收藏  举报