🦄 refactor: Refactoring using hono

This commit is contained in:
imsyy
2024-04-08 16:35:58 +08:00
parent 7459858767
commit 34ab73a3f1
95 changed files with 3555 additions and 6345 deletions

280
README.md
View File

@@ -4,117 +4,63 @@
<p>一个聚合热门数据的 API 接口</p>
</div>
> [!TIP]
> ### 目前正基于 `Hono` 和 `typescript` 重构该项目,敬请期待
---
- 极快响应,便于开发
- 支持 RSS 模式和 JSON 模式
- 支持多种部署方式
- 简明的路由目录,便于新增
## 示例
> 这里是使用该 API 的示例站点
> 这里是使用该 API 的示例站点
> 示例站点可能由于访问量或者长久未维护而访问异常
> 若您也使用了本 API 搭建了网站,欢迎提交您的站点链接
- [今日热榜 - https://hot.imsyy.top/](https://hot.imsyy.top/)
## 总览
> 🟢 状态正常
> 🟠 可能失效
> ❌ 无法使用
> 🟢 状态正常 / 🟠 可能失效 / ❌ 无法使用
| **站点** | **类别** | **调用名称** | **状态** |
| ------------ | -------- | --------------------- | -------- |
| 哔哩哔哩 | 热门榜 | bilibili | 🟢 |
| 微博 | 热搜榜 | weibo | 🟢 |
| 知乎 | 热榜 | zhihu | 🟢 |
| 百度 | 热榜 | baidu | 🟢 |
| 抖音 | 热点榜 | douyin / douyin_new | 🟢 |
| 抖音 | 热榜 | douyin_music | 🟢 |
| 豆瓣 | 新片榜 | douban_new | 🟢 |
| 豆瓣讨论小组 | 讨论精选 | douban_group | 🟢 |
| 百度贴吧 | 热议榜 | tieba | 🟢 |
| 少数派 | 热榜 | sspai | 🟢 |
| IT 之家 | 热榜 | ithome | 🟠 |
| 澎湃新闻 | 热榜 | thepaper | 🟢 |
| 今日头条 | 热榜 | toutiao | 🟢 |
| 36 氪 | 热榜 | 36kr | 🟢 |
| 稀土掘金 | 热榜 | juejin | 🟢 |
| 腾讯新闻 | 热点榜 | newsqq | 🟢 |
| 网易新闻 | 热点榜 | netease | 🟢 |
| 英雄联盟 | 更新公告 | lol | 🟢 |
| 原神 | 最新消息 | genshin | 🟢 |
| 微信读书 | 飙升榜 | weread | 🟢 |
| 快手 | 热榜 | kuaishou | 🟢 |
| 网易云音乐 | 排行榜 | netease_music_toplist | 🟢 |
| QQ音乐 | 排行榜 | qq_music_toplist | 🟢 |
| NGA | 热帖 | ngabbs | 🟢 |
| Github | Trending | github | 🟢 |
| V2EX | 热榜 | v2ex | 🟠 |
| 历史上的今天 | 指定日期 | calendar | 🟢 |
### 特殊接口说明
#### 网易云音乐
调用网易云音乐排行榜需要传入指定榜单类别
| 参数名 | 参数值 | 说明 |
| ------ | ------ | ------ |
| type | 1 | 飙升榜 |
| type | 2 | 新歌榜 |
| type | 3 | 原创榜 |
| type | 4 | 热歌榜 |
```http
GET https://example.com/netease_music_toplist?type=1
```
#### QQ音乐
调用QQ音乐排行榜需要传入指定榜单类别
| 参数名 | 参数值 | 说明 |
| ------ | ------ | ---------------- |
| type | 1 | 飙升榜 |
| type | 2 | 热歌榜 |
| type | 3 | 新歌榜 |
| type | 4 | 流行指数榜 |
| type | 5 | 腾讯音乐人原创榜 |
| type | 6 | 听歌识曲榜 |
```http
GET https://example.com/qq_music_toplist?type=1
```
#### 获取全部接口信息
获取除了下方特殊接口外的全部接口列表
```http
GET https://example.com/all
```
#### 历史上的今天(指定日期)
将指定的月份和日期传入即可得到当天数据,请注意格式
```http
GET https://example.com/calendar/date?month=06&day=01
```
| **站点** | **类别** | **调用名称** | **状态** |
| -------------- | -------- | ------------ | -------- |
| 哔哩哔哩 | 热门榜 | bilibili | 🟢 |
| AcFun | 排行榜 | acfun | 🟢 |
| 微博 | 热| weibo | 🟢 |
| 知乎 | 热榜 | zhihu | 🟢 |
| 知乎日报 | 推荐榜 | zhihu-daily | 🟢 |
| 百度 | 热榜 | baidu | 🟢 |
| 抖音 | 热点榜 | douyin | 🟢 |
| 豆瓣电影 | 新片榜 | douban-movie | 🟢 |
| 豆瓣讨论小组 | 讨论精选 | douban-group | 🟢 |
| 百度贴吧 | 热榜 | tieba | 🟢 |
| 少数派 | 热榜 | sspai | 🟢 |
| IT 之家 | 热榜 | ithome | 🟠 |
| 简书 | 热门推荐 | jianshu | 🟠 |
| 澎湃新闻 | 热榜 | thepaper | 🟢 |
| 今日头条 | 热榜 | toutiao | 🟢 |
| 36 氪 | 热榜 | 36kr | 🟢 |
| 稀土掘金 | 热榜 | juejin | 🟢 |
| 腾讯新闻 | 热点榜 | qq-news | 🟢 |
| 网易新闻 | 热点榜 | netease-news | 🟢 |
| 英雄联盟 | 更新公告 | lol | 🟢 |
| 原神 | 最新消息 | genshin | 🟢 |
| 崩坏3 | 最新动态 | honkai | 🟢 |
| 崩坏:星穹铁道 | 最新动态 | starrail | 🟢 |
| 微信读书 | 飙升榜 | weread | 🟢 |
| NGA | 热帖 | ngabbs | 🟢 |
| HelloGitHub | Trending | github | 🟢 |
## 部署
```bash
# 安装依赖
pnpm install
具体使用说明可参考 [我的博客](https://blog.imsyy.top/posts/2024/0408),下方仅讲解基础操作:
# 运行
pnpm start
```
## Docker 部署
### Docker 部署
> 安装及配置 Docker 将不在此处说明,请自行解决
### 本地构建
#### 本地构建
```bash
# 构建
@@ -125,7 +71,7 @@ docker run -p 6688:6688 -d dailyhot-api
docker-compose up -d
```
### 在线部署
#### 在线部署
```bash
# 拉取
@@ -134,133 +80,57 @@ docker pull imsyy/dailyhot-api:latest
docker run -p 6688:6688 -d imsyy/dailyhot-api:latest
```
## Vercel 部署
### 手动部署
现已支持 Vercel 部署,无需服务器
最直接的方式,您可以按照以下步骤将 DailyHotApi 部署在您的电脑、服务器或者其他任何地方
### 操作方法
#### 安装
1. fork 本项目
2.`Vercel` 官网点击 `New Project`
3. 点击 `Import Git Repository` 并选择你 fork 的此项目并点击 `import`
4. `PROJECT NAME`自己填,`FRAMEWORK PRESET``Other` 然后直接点 `Deploy` 接着等部署完成即可
## 调用
### 获取榜单数据
> 获取数据只需在域名后面加上上方列表中的调用名称即可
```http
GET https://api-hot.imsyy.top/bilibili/
```bash
git clone https://github.com/imsyy/DailyHotApi.git
cd DailyHotApi
```
<details>
<summary>调用示例</summary>
然后再执行安装依赖
```json
{
"code": 200,
"message": "获取成功",
"title": "哔哩哔哩", // 榜单名称
"subtitle": "热门榜", // 榜单类别
"from": "server", // 此处返回是最新数据还是缓存
"total": 100, // 数据总数
"updateTime": "2023-03-14T07:40:51.846Z", // 数据获取时间
"data": [
{
"id": "BV1E84y1A7z2",
"title": "假如我的校园是一款RPG游戏",
"desc": "所有取景都是在学校里面拍的,都是真实存在的场景哦!",
"pic": "http://i2.hdslb.com/bfs/archive/a24e442d0aae6d488db023c4ddcb450e9f2bf5f3.jpg",
"owner": {
"mid": 424658638,
"name": "四夕小田木_已黑化_",
"face": "https://i1.hdslb.com/bfs/face/afd9ba47933edc4842ccbeba2891a25465d1cf77.jpg"
},
"data": {
"aid": 610872610,
"view": 4178745,
"danmaku": 4229,
"reply": 5317,
"favorite": 91020,
"coin": 133596,
"share": 46227,
"now_rank": 0,
"his_rank": 1,
"like": 616519,
"dislike": 0,
"vt": 0,
"vv": 0
},
"url": "https://b23.tv/BV1E84y1A7z2",
"mobileUrl": "https://m.bilibili.com/video/BV1E84y1A7z2"
},
...
]
}
```bash
npm install
```
</details>
#### 开发
### 获取榜单最新数据
> 获取最新数据只需在原链接后面加上 `/new`,这样就会直接从服务端拉取最新数据,不会从本地缓存中读取
```http
GET https://api-hot.imsyy.top/bilibili/new
```bash
npm run dev
```
<details>
<summary>调用示例</summary>
成功启动后程序会在控制台输出可访问的地址
```json
{
"code": 200,
"message": "获取成功",
"title": "哔哩哔哩", // 榜单名称
"subtitle": "热门榜", // 榜单类别
"total": 100, // 数据总数
"updateTime": "2023-03-14T07:40:51.846Z", // 数据获取时间
"data": [
{
"id": "BV1E84y1A7z2",
"title": "假如我的校园是一款RPG游戏",
"desc": "所有取景都是在学校里面拍的,都是真实存在的场景哦!",
"pic": "http://i2.hdslb.com/bfs/archive/a24e442d0aae6d488db023c4ddcb450e9f2bf5f3.jpg",
"owner": {
"mid": 424658638,
"name": "四夕小田木_已黑化_",
"face": "https://i1.hdslb.com/bfs/face/afd9ba47933edc4842ccbeba2891a25465d1cf77.jpg"
},
"data": {
"aid": 610872610,
"view": 4178745,
"danmaku": 4229,
"reply": 5317,
"favorite": 91020,
"coin": 133596,
"share": 46227,
"now_rank": 0,
"his_rank": 1,
"like": 616519,
"dislike": 0,
"vt": 0,
"vv": 0
},
"url": "https://b23.tv/BV1E84y1A7z2",
"mobileUrl": "https://m.bilibili.com/video/BV1E84y1A7z2"
},
...
]
}
#### 编译运行
```bash
npm run build
npm run start
```
</details>
成功启动后程序会在控制台输出可访问的地址
### Railway 部署
本项目支持使用 [Railway](https://railway.app/) 一键部署,请先将本项目 fork 到您的仓库中,即可使用一键部署。
### Zeabur 部署
本项目支持使用 [Zeabur](https://zeabur.com/) 一键部署,请先将本项目 fork 到您的仓库中,即可使用一键部署。
### Vercel 部署
> 🚧 Vercel 部署支持正在修复中
若您目前仅能通过 `Vercel` 进行部署,那么请暂时不要使用最新版本
## 其他
- 本项目为了避免频繁请求官方数据,默认对数据做了缓存处理,默认为 `30` 分钟,如需更改,请自行前往 `utils\cacheData.js` 文件修改
- 本项目为了避免频繁请求官方数据,默认对数据做了缓存处理,默认为 `60` 分钟,如需更改,请自行修改配置
- 本项目部分接口使用了 **页面爬虫**,若违反对应页面的相关规则,请 **及时通知我去除该接口**
## 免责声明