From 8cffc6c70162b5e39137a54d31fadc9c58825331 Mon Sep 17 00:00:00 2001 From: imsyy Date: Wed, 12 Jul 2023 17:28:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3=20?= =?UTF-8?q?&=20=E6=9B=B4=E6=96=B0=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 ++++++++------- package.json | 2 +- routes/genshin.js | 122 ++++++++++++++++++++++++++++++++++++++++++++++ utils/test.json | 39 --------------- 4 files changed, 143 insertions(+), 58 deletions(-) create mode 100644 routes/genshin.js delete mode 100644 utils/test.json diff --git a/README.md b/README.md index d4c1fee..27a56b3 100644 --- a/README.md +++ b/README.md @@ -16,24 +16,26 @@ > 🟠 可能失效 > 🔴 无法使用 -| **站点** | **类别** | **调用名称** | **状态** | -| ------------ | -------- | ------------ | -------- | -| 哔哩哔哩 | 热门榜 | bilibili | 🟢 | -| 知乎 | 热榜 | zhihu | 🟢 | -| 百度 | 热搜榜 | baidu | 🟢 | -| 百度贴吧 | 热议榜 | tieba | 🟢 | -| 少数派 | 热榜 | sspai | 🟢 | -| IT 之家 | 热榜 | ithome | 🟠 | -| 澎湃新闻 | 热榜 | thepaper | 🟢 | -| 今日头条 | 热榜 | toutiao | 🟢 | -| 微博热搜 | 热搜榜 | weibo | 🟢 | -| 36 氪 | 热榜 | 36kr | 🟢 | -| 稀土掘金 | 热榜 | juejin | 🟢 | -| 腾讯新闻 | 热点榜 | newsqq | 🟢 | -| 抖音热榜 | 热点榜 | douyin | 🟢 | -| 英雄联盟 | 更新公告 | lol | 🟢 | -| 微信读书 | 飙升榜 | weread | 🟢 | -| 历史上的今天 | 指定日期 | calendar | 🟢 | +| **站点** | **类别** | **调用名称** | **状态** | +| ------------ | -------- | ------------------- | -------- | +| 哔哩哔哩 | 热门榜 | bilibili | 🟢 | +| 微博 | 热搜榜 | weibo | 🟢 | +| 知乎 | 热榜 | zhihu | 🟢 | +| 百度 | 热搜榜 | baidu | 🟢 | +| 抖音 | 热点榜 | douyin / douyin_new | 🟢 | +| 抖音 | 热歌榜 | douyin_music | 🟢 | +| 百度贴吧 | 热议榜 | tieba | 🟢 | +| 少数派 | 热榜 | sspai | 🟢 | +| IT 之家 | 热榜 | ithome | 🟠 | +| 澎湃新闻 | 热榜 | thepaper | 🟢 | +| 今日头条 | 热榜 | toutiao | 🟢 | +| 36 氪 | 热榜 | 36kr | 🟢 | +| 稀土掘金 | 热榜 | juejin | 🟢 | +| 腾讯新闻 | 热点榜 | newsqq | 🟢 | +| 英雄联盟 | 更新公告 | lol | 🟢 | +| 原神 | 最新消息 | genshin | 🟢 | +| 微信读书 | 飙升榜 | weread | 🟢 | +| 历史上的今天 | 指定日期 | calendar | 🟢 | ### 特殊接口说明 diff --git a/package.json b/package.json index df75c4e..8fa1dd2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dailyhot_api", - "version": "1.0.0", + "version": "1.0.2", "description": "一个今日热榜", "main": "index.js", "scripts": { diff --git a/routes/genshin.js b/routes/genshin.js new file mode 100644 index 0000000..269f1fa --- /dev/null +++ b/routes/genshin.js @@ -0,0 +1,122 @@ +const Router = require("koa-router"); +const genshinRouter = new Router(); +const axios = require("axios"); +const { get, set, del } = require("../utils/cacheData"); + +// 接口信息 +const routerInfo = { + title: "原神", + subtitle: "最新信息", +}; + +// 缓存键名 +const cacheKey = "genshinData"; + +// 调用时间 +let updateTime = new Date().toISOString(); + +// 调用路径 +const url = + "https://content-static.mihoyo.com/content/ysCn/getContentList?pageSize=50&pageNum=1&channelId=10"; + +// 数据处理 +const getData = (data) => { + if (!data) return []; + return data.map((v) => { + return { + id: v.id, + title: v.title, + pic: v.ext[1]?.value[0]?.url, + start_time: v?.start_time, + url: `https://ys.mihoyo.com/main/news/detail/${v.id}`, + mobileUrl: `https://ys.mihoyo.com/main/m/news/detail/${v.id}`, + }; + }); +}; + +// 原神最新信息 +genshinRouter.get("/genshin", async (ctx) => { + console.log("获取原神最新信息"); + try { + // 从缓存中获取数据 + let data = await get(cacheKey); + const from = data ? "cache" : "server"; + if (!data) { + // 如果缓存中不存在数据 + console.log("从服务端重新获取原神最新信息"); + // 从服务器拉取数据 + const response = await axios.get(url); + data = getData(response.data.data.list); + updateTime = new Date().toISOString(); + // 将数据写入缓存 + await set(cacheKey, data); + } + ctx.body = { + code: 200, + message: "获取成功", + ...routerInfo, + from, + total: data.length, + updateTime, + data, + }; + } catch (error) { + console.error(error); + ctx.body = { + code: 500, + ...routerInfo, + message: "获取失败", + }; + } +}); + +// 原神最新信息 - 获取最新数据 +genshinRouter.get("/genshin/new", async (ctx) => { + console.log("获取原神最新信息 - 最新数据"); + try { + // 从服务器拉取最新数据 + const response = await axios.get(url); + const newData = getData(response.data.data.list); + updateTime = new Date().toISOString(); + console.log("从服务端重新获取原神最新信息"); + + // 返回最新数据 + ctx.body = { + code: 200, + message: "获取成功", + ...routerInfo, + total: newData.length, + updateTime, + data: newData, + }; + + // 删除旧数据 + await del(cacheKey); + // 将最新数据写入缓存 + await set(cacheKey, newData); + } catch (error) { + // 如果拉取最新数据失败,尝试从缓存中获取数据 + console.error(error); + const cachedData = await get(cacheKey); + if (cachedData) { + ctx.body = { + code: 200, + message: "获取成功", + ...routerInfo, + total: cachedData.length, + updateTime, + data: cachedData, + }; + } else { + // 如果缓存中也没有数据,则返回错误信息 + ctx.body = { + code: 500, + ...routerInfo, + message: "获取失败", + }; + } + } +}); + +genshinRouter.info = routerInfo; +module.exports = genshinRouter; diff --git a/utils/test.json b/utils/test.json deleted file mode 100644 index 7e3c880..0000000 --- a/utils/test.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "opts": {}, - "methods": ["HEAD", "OPTIONS", "GET", "PUT", "PATCH", "POST", "DELETE"], - "exclusive": false, - "params": {}, - "stack": [ - { - "opts": { - "end": true, - "name": null, - "sensitive": false, - "strict": false, - "prefix": "" - }, - "name": null, - "methods": ["HEAD", "GET"], - "paramNames": [], - "stack": [null], - "path": "/zhihu", - "regexp": {} - }, - { - "opts": { - "end": true, - "name": null, - "sensitive": false, - "strict": false, - "prefix": "" - }, - "name": null, - "methods": ["HEAD", "GET"], - "paramNames": [], - "stack": [null], - "path": "/zhihu/new", - "regexp": {} - } - ], - "info": { "title": "知乎", "subtitle": "热榜" } -}