From 8e99430d0f031f12dc8f144c60541b4f238c929b Mon Sep 17 00:00:00 2001 From: Ou Date: Mon, 21 Oct 2024 02:18:36 +0800 Subject: [PATCH] feat: add source xueqiu --- public/icons/xueqiu.png | Bin 0 -> 15086 bytes server/sources/index.ts | 2 ++ server/sources/xueqiu.ts | 37 +++++++++++++++++++++++++++++++++++++ shared/metadata.ts | 2 +- shared/sources.ts | 12 ++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 public/icons/xueqiu.png create mode 100644 server/sources/xueqiu.ts diff --git a/public/icons/xueqiu.png b/public/icons/xueqiu.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa95f4fcb55f25d7b741ee477c580964f5de516 GIT binary patch literal 15086 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 Zyk*-xZ|Oe7Yj=6x)^&)pBGN#-{{uq_GmQWM literal 0 HcmV?d00001 diff --git a/server/sources/index.ts b/server/sources/index.ts index e473fec..35edad0 100644 --- a/server/sources/index.ts +++ b/server/sources/index.ts @@ -12,6 +12,7 @@ import douyin from "./douyin" import toutiao from "./toutiao" import cls from "./cls" import sputniknewscn from "./sputniknewscn" +import xueqiu from "./xueqiu" import type { SourceGetter } from "#/types" export const sourcesGetters = { @@ -24,6 +25,7 @@ export const sourcesGetters = { cankaoxiaoxi, sputniknewscn, ...wallstreetcn, + ...xueqiu, douyin, ...cls, toutiao, diff --git a/server/sources/xueqiu.ts b/server/sources/xueqiu.ts new file mode 100644 index 0000000..34fbcbe --- /dev/null +++ b/server/sources/xueqiu.ts @@ -0,0 +1,37 @@ +interface StockRes { + data: { + items: + { + code: string + name: string + percent: number + exchange: string + // 1 + ad: number + }[] + + } +} + +const hotstock = defineSource(async () => { + const url = "https://stock.xueqiu.com/v5/stock/hot_stock/list.json?size=30&_type=10&type=10" + const cookie = (await $fetch.raw("https://xueqiu.com")).headers.getSetCookie() + const res: StockRes = await $fetch(url, { + headers: { + cookie: cookie.join("; "), + }, + }) + return res.data.items.filter(k => !k.ad).map(k => ({ + id: k.code, + url: `https://xueqiu.com/s/${k.code}`, + title: k.name, + extra: { + info: `${k.percent}%`, + }, + })) +}) + +export default defineSource({ + "xueqiu": hotstock, + "xueqiu-hotstock": hotstock, +}) diff --git a/shared/metadata.ts b/shared/metadata.ts index ea01431..7058163 100644 --- a/shared/metadata.ts +++ b/shared/metadata.ts @@ -19,7 +19,7 @@ const originMetadata: Metadata = { }, finance: { name: "财经", - sources: ["cls-telegraph", "cls-depth", "wallstreetcn", "wallstreetcn-hot", "wallstreetcn-news"], + sources: ["cls-telegraph", "cls-depth", "wallstreetcn", "wallstreetcn-hot", "wallstreetcn-news", "xueqiu-hotstock"], }, focus: { name: "关注", diff --git a/shared/sources.ts b/shared/sources.ts index e59c31c..a46a787 100644 --- a/shared/sources.ts +++ b/shared/sources.ts @@ -145,6 +145,18 @@ export const originSources = { }, }, }, + "xueqiu": { + name: "雪球", + color: "blue", + home: "https://xueqiu.com", + sub: { + hotstock: { + title: "热门股票", + interval: Time.Realtime, + type: "hottest", + }, + }, + }, } as const satisfies Record export const sources = genSources()