DailyHot,让热点资讯变成一组干净的 API

我做 DailyHot Go版本,一开始想解决的是个很朴素的问题。

每天能看的热榜太多了。知乎有知乎热榜,微博有微博热搜,B 站有热门,GitHub 有 Trending,科技媒体、论坛、视频平台也各有一套榜单。真要把这些内容接到自己的网站、机器人、RSS 阅读器或者信息看板里,就会发现事情没那么舒服。

每个平台的数据格式不一样,更新时间不一样,有的有接口,有的只能解析页面。最后很容易变成一堆临时脚本,能跑,但不好维护。

DailyHot Go版本就是把这件事收拾了一下。

它用 Go 写了一个轻量的热点资讯聚合服务,把不同平台的热榜统一整理成 API。目前已经接入 59 个资讯源,覆盖新闻资讯、科技资讯、技术社区、视频娱乐、游戏资讯、阅读、公共信息等常见分类。

启动服务后,访问首页就能看到完整的接口目录。每个资讯源都有独立路径,比如这些。

/zhihu
/weibo
/bilibili
/github
/aihot

默认返回 JSON。想控制数量,可以加 limit

/zhihu?limit=10

想跳过缓存,可以加 cache=false

/zhihu?cache=false

想给 RSS 阅读器用,也可以直接切成 RSS。

/zhihu?rss=true

这块我自己挺喜欢。因为它没有把使用场景锁死。前端页面可以调 JSON,阅读器可以订 RSS,自动化脚本也能拿来做日报、推送、摘要,怎么接都比较顺手。

Go 版本还有一个现实好处,部署省心。

本地跑起来只需要一条命令。

go run ./cmd/server

默认端口是 6688。编译后就是一个独立可执行文件,放到服务器上,带上 config/config.yaml 就能运行。对个人 VPS 或小机器来说,这种形态会轻不少。

项目里也做了缓存处理。Redis 能连上就用 Redis,Redis 不可用就回退到进程内缓存。定时刷新也可以通过配置控制,比如每小时刷新一次全部资讯源。服务不会每次请求都直接打到上游,对稳定性和响应速度都更友好。

代码结构也尽量保持清楚。

cmd/server        服务入口
internal/server   路由、首页、JSON 和 RSS 输出
internal/source   资讯源注册和具体实现
internal/cache    内存缓存和 Redis 缓存
config            配置文件

后面要加新的资讯源,基本就是在 internal/source/providers 下面放一个独立实现,再注册进去。每个来源各管各的,不会把项目搅成一团。

我觉得 DailyHot Go版本适合这几类场景。

个人网站想放一个热点模块,可以用它。

导航站、Halo 插件、内容聚合页想接入实时热榜,可以用它。

想做每日热点推送、AI 摘要、RSS 订阅补充,也可以用它。

它不是一个复杂的大系统,更像一个干净的数据底座。把全网分散的热门内容拉到一起,再用统一的方式交给你。

鸣谢和参考

DailyHot Go版本在项目思路、接口设计和部分资讯源实现上,参考了这些优秀项目。