DailyHotApi 的 Go 语言高性能重构版本,提供多平台热榜/资讯聚合 API 服务(当前已接入 60+ 渠道)。
🙏 致谢
本项目是在 imsyy/DailyHotApi 基础上的 Go 语言重构版本。原项目由 @imsyy 使用 TypeScript 精心打造,功能完善、更新及时。
如果本项目对你有帮助,强烈推荐前往原仓库为作者点个 Star、提交 Issue 或 PR 支持原项目的持续发展。
同时也欢迎大家关注原项目的部署文档、工具生态,以便获得更完整的使用体验。
- 🚀 极致性能: 基于 Go + Fiber 框架,QPS 可达 100,000+
- 💾 智能缓存: BigCache + Redis 双层缓存,L1 零 GC 设计
- 🔒 类型安全: 完整的类型定义,编译期错误检查
- 🌏 覆盖广泛: 覆盖国内外资讯/社区/科技等 60+ 热点源
- 📦 容器化: Docker 一键部署,镜像仅 20MB
- 🎯 标准化: 统一的 API 响应格式,易于集成
- 📊 可观测: 结构化日志 + 性能监控接口
- 基于 Go + Fiber,配合 BigCache/Redis 双层缓存,在 8C16G 服务器上可稳定提供 ~15k QPS(缓存命中率 >95%)。
- 冷启动场景下通过异步预热热门路由,平均响应保持在 <20ms;非缓存请求通常 <200ms,具体取决于上游源站。
- 服务常驻内存约 35MB(启用缓存);不启用 Redis 时仍可通过 BigCache 提供快速 L1 缓存。
- 官方示例部署地址: https://apinews.geekaso.com/ (仅供演示,请勿滥用)。
| 组件 | 技术选型 | 说明 |
|---|---|---|
| Web 框架 | Fiber v2 | Express 风格,性能极致 |
| HTTP 客户端 | Resty | 链式调用,自动重试 |
| 内存缓存 | BigCache | 零 GC,亿级数据 |
| 分布式缓存 | Redis | 可选,支持集群 |
| JSON 解析 | encoding/json | 标准库,稳定可靠 |
| RSS/Atom 解析 | gofeed | 统一解析多种订阅格式 |
| 日志系统 | Zap + Lumberjack | 结构化日志 & 按天轮转 |
| 配置管理 | Viper | 支持多格式&环境变量 |
| 缓存 | BigCache + go-redis/v9 | 内存+分布式双层缓存 |
DailyHotApi-Go/
├── cmd/ # 程序入口
│ └── api/
│ └── main.go # 主程序
├── internal/ # 内部模块(不对外暴露)
│ ├── cache/ # 缓存系统
│ ├── config/ # 配置管理
│ ├── http/ # HTTP 客户端
│ ├── logger/ # 日志系统
│ ├── models/ # 数据模型
│ ├── routes/ # 路由处理器
│ │ ├── router.go # 路由注册表 & 公共接口
│ │ ├── *.go # 各平台路由处理器
│ └── service/ # 业务服务层
├── pkg/ # 公共工具库
│ └── utils/ # 平台工具(WBI、时间解析等)
├── config.yaml # 默认配置
├── docker-compose.yml # 一键启动(可选 redis)
├── docker-compose.redis.yml# 启动 redis 示例
├── Dockerfile # 构建镜像
├── logs/ # 默认日志目录
├── README.md # 英文/中文主文档
├── 快速上手.md # Docker 推送与部署指南
└── 镜像发布指南.md # 镜像发布说明
# 1. 克隆项目
git clone <repository-url>
cd DailyHotApi-Go
# 2. 一键启动(包含 Redis)
docker-compose up -d
# 3. 查看日志
docker-compose logs -f api
# 4. 验证示例
curl https://apinews.geekaso.com/bilibili# 1. 安装依赖
go mod download
# 2. 运行程序
go run cmd/api/main.go
# 3. 验证示例
curl https://apinews.geekaso.com/bilibili# 1. 编译
go build -o dailyhot-api cmd/api/main.go
# 2. 运行
./dailyhot-api编辑 config.yaml:
server:
port: 6688 # 服务端口
host: "0.0.0.0" # 监听地址
prefork: false # 多进程模式
cache:
enabled: true # 启用内存缓存
default_expire: 5m # 缓存时间
max_entries: 10000 # 最大条目数
redis:
enabled: false # 启用 Redis(可选)
host: "localhost"
port: 6379
log:
level: "info" # 日志级别
format: "console" # 输出格式也可以通过环境变量覆盖配置:
export DAILYHOT_SERVER_PORT=8080
export DAILYHOT_REDIS_ENABLED=true
export DAILYHOT_REDIS_HOST=redisGET /返回 API 版本和可用路由列表。
GET /health返回服务健康状态,用于监控系统。
GET /stats返回缓存性能统计数据。
下方仅列出常用/新增平台,完整列表可访问 /all 查看。
/weibo微博热搜/zhihu知乎热榜/douyin抖音热点/bilibiliB站热榜/baidu?type=realtime百度热搜(支持 realtime/novel/movie/teleplay/car/game)/github?type=dailyGitHub Trending(daily/weekly/monthly)/juejin?type=1掘金热门(分类 ID)/v2ex?type=hotV2EX(最热/最新)/52pojie吾爱破解(默认精华,无数据时自动回退热门,响应params.actualType标记实际来源)
/ithomeIT之家/36kr?type=hot36氪(人气/视频/热议/收藏)/sspai?type=热门文章少数派(多标签)/ifanr爱范儿/geekpark极客公园/huxiu虎嗅/techcrunchTechCrunch/thevergeThe Verge/engadgetEngadget/economistThe Economist 最新
/toutiao今日头条/netease网易新闻/sinanews新浪新闻/thepaper澎湃新闻/qqnews腾讯新闻/theguardianThe Guardian World News/nytimes?type=china纽约时报(中文/全球)
/smzdm什么值得买/coolapk酷安热榜/weread微信读书/miyoushe米游社/yystv游研社/earthquake中国地震台/weatheralarm中央气象台/history历史上的今天
小贴士: 大多数接口都支持
cache=false参数强制刷新源数据(默认启用缓存)。
所有接口返回统一格式:
{
"code": 200,
"message": "success",
"name": "平台名称",
"title": "平台显示名称",
"type": "榜单类型",
"updateTime": "2024-01-01T12:00:00Z",
"total": 20,
"fromCache": true,
"data": [
{
"id": "唯一标识",
"title": "标题",
"desc": "描述",
"cover": "封面图",
"url": "详情链接",
"hot": 热度值,
"author": "作者",
"timestamp": "时间戳"
}
]
}额外扩展字段:
params.actualType: 对部分存在自动降级的来源(如/52pojie)标记当前真实使用的榜单类型。
本项目采用了多项性能优化技术:
复用 HTTP 请求对象,减少内存分配:
var httpRequestPool = sync.Pool{
New: func() interface{} {
return &HTTPRequest{}
},
}限制 Goroutine 数量,防止资源耗尽:
pool, _ := ants.NewPool(10000)L1 缓存采用 BigCache,零 GC 设计,支持亿级数据:
cache, _ := bigcache.New(context.Background(), config)请求 → L1(BigCache) → L2(Redis) → 原始 API
↓ 命中 ↓ 命中 ↓ 请求
<10μs <1ms ~100ms
- 创建路由处理器
在 internal/routes/ 下创建新文件,如 weibo.go:
package routes
type WeiboHandler struct {
fetcher *service.Fetcher
}
func NewWeiboHandler(fetcher *service.Fetcher) *WeiboHandler {
return &WeiboHandler{fetcher: fetcher}
}
func (h *WeiboHandler) GetPath() string {
return "/weibo"
}
func (h *WeiboHandler) Handle(c *fiber.Ctx) error {
resp, err := h.fetcher.GetData(
c.Context(),
"weibo_hot",
"微博",
"热搜榜",
5*time.Minute,
h.fetchWeiboHot,
)
if err != nil {
return c.Status(500).JSON(models.ErrorResponseObj(500, err.Error()))
}
return c.JSON(resp)
}
func (h *WeiboHandler) fetchWeiboHot(ctx context.Context) ([]models.HotData, error) {
// 实现数据获取逻辑
// ...
}- 注册路由
在 cmd/api/main.go 中添加:
registry.Register(routes.NewWeiboHandler(fetcher))- 配置管理(Viper)
- 日志系统(Zap)
- 双层缓存(BigCache + Redis)
- HTTP 客户端(Resty)
- 路由管理系统
当前已接入 61 个平台,覆盖视频、社交、资讯、科技、游戏、电商等多个垂类。常用分类如下:
- 视频: B站、抖音、快手、AcFun、米哈游系游戏社区等
- 社交/社区: 微博、知乎、V2EX、吾爱破解、NGA、NodeSeek、Hostloc、Linux.do…
- 资讯: 今日头条、澎湃、腾讯新闻、The Guardian、纽约时报、The Economist…
- 生活/电商: 什么值得买、微信读书、数字尾巴、汽车之家等
- 工具/特殊: 历史上的今天、中央气象台预警、中国地震台、IT之家喜加一等
- IT 资讯/科技媒体: IT之家、36氪、少数派、爱范儿、极客公园、虎嗅、TechCrunch、The Verge、Engadget、The Economist 等
完整列表可通过 /all 接口或 cmd/api/main.go 注册信息查看。
欢迎提交 Pull Request 添加更多平台支持!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/new-platform) - 提交更改 (
git commit -m 'Add: xxx平台支持') - 推送到分支 (
git push origin feature/new-platform) - 提交 Pull Request
MIT License
本项目基于 DailyHotApi 使用 Go 语言重构。
感谢原作者的创意和开源精神!