diff --git a/docs/game.md b/docs/game.md index 7314c8d2ef..35a1e28275 100644 --- a/docs/game.md +++ b/docs/game.md @@ -298,6 +298,18 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的 +## 剑网 3 + +### 新闻资讯 + + + +| 最新 | 新闻 | 活动 | 公告 | +| ------- | ----- | ---- | -------- | +| allnews | press | hd | announce | + + + ## 旅法师营地 ### 旅法师营地 diff --git a/lib/router.js b/lib/router.js index 9a132883a5..318892d625 100644 --- a/lib/router.js +++ b/lib/router.js @@ -3219,6 +3219,9 @@ router.get('/feixuew/:id?', require('./routes/feixuew/index')); // 1X router.get('/1x/:type?/:caty?', require('./routes/1x/index')); +// 剑网3 +router.get('/jx3/:caty?', require('./routes/jx3/news')); + // GQ router.get('/gq/tw/:caty?/:subcaty?', require('./routes/gq/tw/index')); diff --git a/lib/routes/jx3/news.js b/lib/routes/jx3/news.js new file mode 100644 index 0000000000..cbeebe9b56 --- /dev/null +++ b/lib/routes/jx3/news.js @@ -0,0 +1,59 @@ +const url = require('url'); +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + ctx.params.caty = ctx.params.caty || 'allnews'; + + let query; + + if (ctx.params.caty === 'hd') { + query = 'div.article_list article div h3 a'; + } else { + query = 'div.article_list ul li a'; + } + + const rootUrl = 'https://jx3.xoyo.com'; + const currentUrl = `${rootUrl}/${ctx.params.caty}`; + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $(query) + .slice(0, 10) + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: url.resolve(rootUrl, item.attr('href')), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + const content = cheerio.load(detailResponse.data); + + item.description = content('div.detail_con').html(); + item.pubDate = new Date(content('p.detail_time').text() + ' GMT+8').toUTCString(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `${$('ul.allnews_list_ul li.active').text()} - 剑网3`, + link: currentUrl, + item: items, + }; +};