十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

newsnow 财经快讯双源聚合教程:5 分钟跑通华尔街见闻 × 财联社实时流

newsnow 财经快讯双源聚合教程:5 分钟跑通华尔街见闻 × 财联社实时流 newsnow 财经快讯双源聚合教程5 分钟跑通华尔街见闻 × 财联社实时流【免费下载链接】newsnowElegant reading of real-time and hottest news项目地址: https://gitcode.com/GitHub_Trending/ne/newsnow开盘时段来回切换多个财经应用查行情效率很低。newsnow 是一个开源实时热点聚合项目默认同时抓取华尔街见闻「快讯」与财联社「电报」把两路数据汇进同一个财经栏目。它按 5 分钟粒度取数、30 分钟缓存兜底本文先带你把服务跑起来再拆数据链路。快速上手双源快讯 5 分钟跑通 克隆仓库后用 Docker 直接启动git clone https://gitcode.com/GitHub_Trending/ne/newsnow cd newsnow docker compose up浏览器访问http://localhost:4444切到财经栏目。你会看到华尔街见闻「快讯」和财联社「电报」两张卡片并排各列约 30 条最新条目时间戳精确到分钟点击任意条目跳转原文。本地开发便于二次开发只需两条命令pnpm install pnpm dev原理拆解快讯为什么能保持实时抓取层两个 API一套规则server/sources/wallstreetcn.ts 请求 lives 接口返回结构经 TypeScript 约束// 华尔街见闻快讯条目display_time 为秒级时间戳需乘 1000 interface Item { uri: string id: number title?: string content_text: string display_time: number }server/sources/cls/index.ts 请求财联社电报接口用当前时间作为 last_time 拉取最新 30 条并剔除广告// 财联社电报条目ctime 为秒级时间戳需乘 1000 interface Item { id: number brief: string shareurl: string ctime: number is_ad: number // 1 表示广告位直接过滤 }两路请求共用 server/utils/fetch.ts 里的封装10 秒超时、自动重试 3 次并把 UA 伪装成浏览器降低被源站拦的概率。缓存层interval 与 TTL 两个阈值缓存表在 server/database/cache.ts底层是 D1 数据库Cloudflare 提供的云端 SQLite只存三列键、JSON 数据、写入时间// 写入缓存同键覆盖写updated 记录写入时刻 async set(key: string, value: NewsItem[]) { await this.db.prepare( INSERT OR REPLACE INTO cache (id, data, updated) VALUES (?, ?, ?), ).run(key, JSON.stringify(value), Date.now()) }调度逻辑在 server/api/s/index.ts靠两个数字判断interval300000 毫秒 5 分钟未到间隔时直接返回缓存不请求源站TTL30 分钟定义在 shared/consts.ts超过 interval 但未超 TTL 时仍返回缓存只有带 latesttrue 且已登录的请求能突破这层限制。也就是说普通访客看到的是 5 分钟粒度的缓存登录用户用 latesttrue 可强制回源。渲染层栏目只是数据映射前端请求/s?idxxx拿到{id, updatedTime, items}后按column: finance归入财经菜单用 React Query Jotai 渲染卡片每条附相对时间如「18 分钟前」。配置详解sources.json 字段对照全部数据源开关在 shared/sources.json本主题涉及的两条wallstreetcn-quick: { name: 华尔街见闻, type: realtime, column: finance, home: https://wallstreetcn.com/, color: blue, interval: 300000, title: 快讯 }, cls-telegraph: { name: 财联社, type: realtime, column: finance, home: https://www.cls.cn, color: red, interval: 300000, title: 电报 }字段作用示例 / 默认name卡片展示名华尔街见闻type数据性质realtime 实时流 / hottest 热榜realtimecolumn归属栏目决定顶部菜单financeinterval刷新间隔毫秒3000005 分钟title卡片内副标题快讯 / 电报color卡片主题色blue / redredirect旧键重定向如 wallstreetcn → wallstreetcn-quick无disable停用标记cf 表示被 Cloudflare 反爬拦截无sources.json 在构建时由 scripts/source.ts 打包进产物改完需重新构建并重启才生效。环境变量参照 example.env.server 复制为.env.server变量默认值作用ENABLE_CACHEtrue缓存总开关false 则每次请求回源INIT_TABLEtrue首次运行初始化缓存表与用户表G_CLIENT_ID / G_CLIENT_SECRET空GitHub OAuth第三方身份联合协议应用凭据登录必需JWT_SECRET空登录 token 签名密钥PRODUCTHUNT_API_TOKEN空Product Hunt 数据源接口密钥进阶玩法登录实现跨设备同步GitHub OAuth 登录后栏目顺序、收藏、显示偏好会通过/me/sync自动上传换设备启动时拉回。上传带 10 秒防抖src/hooks/useSync.ts避免拖拽时高频写库服务端在 server/api/me/sync.ts 把整份配置以 JSON 存入用户表。个性化与检索栏目、卡片均支持拖拽排序布局存本地顶部搜索栏cmdk支持拼音首字母匹配输入「cls」即可定位财联社卡片卡片右上角的刷新、星标图标可单独触发回源或收藏。接入自定义财经数据源三步接入在 server/sources/ 下新建文件用 defineSource 导出返回{id, title, url, pubDate?}数组在 shared/sources.json 注册键名与 interval重启。抓取函数通过 glob 自动发现server/getters.ts无需手动登记。源站有 RSS 的话直接用 defineRSSSource见 server/utils/source.ts传个地址即可。把接口接进 MCP 客户端/s?idwallstreetcn-quick返回纯 JSON、结构稳定可包装成 MCPModel Context Protocol让大模型调用外部工具的标准协议工具AI 助手就能直接读取本实例最新快讯、生成行情速报。常见问题问页面开着但快讯不更新先访问/s?idcls-telegraph看updatedTime。它长时间不变且 ENABLE_CACHEtrue说明缓存工作正常你拿到的是最近一次缓存要看实时数据登录后请求加latesttrue。若关闭缓存仍不更新查服务端日志里的回源报错通常是限流或反爬。问ENABLE_CACHE 改成 false回源请求却没变多关闭缓存后/s每次请求都会回源但浏览器端还有 React Query 的前端缓存短时间重复点击不会真正打到服务器。验证请用接口直连不要看页面。问为什么 36氪 的卡片不可用配置里带disable: cf的条目因 Cloudflare 质询拦截被停用36氪属于此类财经栏目可用金十数据、格隆汇等源替代。写在最后newsnow 把「多个财经 App」压缩成「一列卡片」5 分钟粒度的双源抓取加 30 分钟缓存层是实时与开销的平衡点。想提交新数据源先读 CONTRIBUTING.md。下期预告基于/s接口搭建你自己的财经监控看板。【免费下载链接】newsnowElegant reading of real-time and hottest news项目地址: https://gitcode.com/GitHub_Trending/ne/newsnow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表