diff --git a/docs/game.md b/docs/game.md index 58391498f..a78774730 100644 --- a/docs/game.md +++ b/docs/game.md @@ -470,6 +470,21 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的 + +### 分区 + + + +| 炉石传说 | 万智牌 | 游戏王 | 昆特牌 | 影之诗 | 符文之地传奇 | 阴阳师百闻牌 | +| :------: | :----: | :----: | :----: | :----: | :----------: | :----------: | +| 17 | 18 | 16 | 19 | 20 | 329 | 221 | + +| 英雄联盟 | 电子游戏 | 桌面游戏 | 卡牌游戏 | 玩家杂谈 | 二次元 | +| :------: | :------: | :------: | :------: | :------: | :----: | +| 112 | 389 | 24 | 102 | 23 | 117 | + + + ## 米哈游 ### 崩坏 2 - 游戏公告 diff --git a/lib/router.js b/lib/router.js index bb4070595..777ea2b90 100644 --- a/lib/router.js +++ b/lib/router.js @@ -345,6 +345,7 @@ router.get('/3dm/news', require('./routes/3dm/news_center')); // 旅法师营地 router.get('/lfsyd/:typecode', require('./routes/lfsyd/index')); +router.get('/lfsyd/tag/:tag', require('./routes/lfsyd/tag')); // 喜马拉雅 router.get('/ximalaya/album/:id/:all?', require('./routes/ximalaya/album')); diff --git a/lib/routes/lfsyd/tag.js b/lib/routes/lfsyd/tag.js new file mode 100644 index 000000000..9ae2aeca5 --- /dev/null +++ b/lib/routes/lfsyd/tag.js @@ -0,0 +1,65 @@ +const got = require('@/utils/got'); +const util = require('./utils'); +const timezone = require('@/utils/timezone'); +const parseDate = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const tag_id = ctx.params.tag; + const tag_list = { + 17: '炉石传说', + 18: '万智牌', + 16: '游戏王', + 19: '昆特牌', + 20: '影之诗', + 329: '符文之地传奇', + 221: '阴阳师百闻牌', + 112: '英雄联盟', + 389: '电子游戏', + 24: '桌面游戏', + 102: '卡牌游戏', + 23: '玩家杂谈', + 117: '二次元', + }; + const tag_name = tag_list[tag_id]; + const rootUrl = 'https://www.iyingdi.com'; + const tagUrl = 'https://api.iyingdi.com/web/feed/tag-content-list'; + const form = { + page: 1, + size: 30, + tag_id: tag_id, + timestamp: '', + version: 0, + }; + + const response = await got({ + method: 'post', + url: tagUrl, + headers: { + Host: 'api.iyingdi.com', + 'Login-Token': 'nologin', + Origin: rootUrl, + Platform: 'pc', + Referer: `${rootUrl}/`, + }, + form: util.getForm(form), + }); + const list = response.data.list; + const tag_json = JSON.parse(list[0].feed.tag_json); + + const articleList = list.map((item) => ({ + title: item.feed.title, + pubDate: timezone(parseDate(item.feed.show_time * 1000), +8), + link: `${rootUrl}/tz/post/${item.feed.source_id}`, + guid: item.feed.title, + post_id: item.feed.source_id, + })); + + const items = await Promise.all(articleList.map(async (item) => await util.ProcessFeed(ctx, item))); + + ctx.state.data = { + title: `${!tag_name ? tag_json[0].tag : tag_name} - 旅法师营地 `, + link: `${rootUrl}/tz/tag/${tag_id}`, + description: `${!tag_name ? tag_json[0].tag : tag_name} - 旅法师营地 `, + item: items, + }; +}; diff --git a/lib/routes/lfsyd/utils.js b/lib/routes/lfsyd/utils.js new file mode 100644 index 000000000..c8542923b --- /dev/null +++ b/lib/routes/lfsyd/utils.js @@ -0,0 +1,45 @@ +const got = require('@/utils/got'); +const md5 = require('@/utils/md5'); + +const ProcessFeed = async (ctx, item) => { + const infoUrL = 'https://api.iyingdi.com/web/post/info'; + const rootUrl = 'https://www.iyingdi.com'; + const info_form = { + post_id: item.post_id, + timestamp: '', + }; + + const description = await ctx.cache.tryGet(item.link, async () => { + const response = await got({ + method: 'post', + url: infoUrL, + headers: { + Host: 'api.iyingdi.com', + 'Login-Token': 'nologin', + Origin: rootUrl, + Platform: 'pc', + Referer: `${rootUrl}/`, + }, + form: getForm(info_form), + }); + const content_body = JSON.parse(response.body); + return content_body.post.content; + }); + + item.description = description; + delete item.post_id; + return item; +}; + +const getForm = function (form) { + const key = 'b8d5b38577b8bb382b0c783b474b95f9'; + form.key = key; + form.timestamp = Math.floor(new Date().getTime() / 1000); + form.sign = md5(new URLSearchParams(form).toString()); + delete form.key; + return form; +}; +module.exports = { + getForm, + ProcessFeed, +};