diff --git a/docs/anime.md b/docs/anime.md index 08bc59b2bf..f1e51af1e8 100644 --- a/docs/anime.md +++ b/docs/anime.md @@ -80,6 +80,18 @@ pageClass: routes +## Hpoi 手办维基 + +### 浏览周边 + + + +| 角色手办 | 作品手办 | +| --------- | -------- | +| charactar | works | + + + ## say 花火 ### 文章 diff --git a/lib/router.js b/lib/router.js index 26c8a39430..fbe8ff7c74 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1361,6 +1361,9 @@ router.get('/manhuadb/comics/:id', require('./routes/manhuadb/comics')); // 观察者风闻话题 router.get('/guanchazhe/topic/:id', require('./routes/guanchazhe/topic')); +// Hpoi 手办维基 +router.get('/hpoi/:category/:words', require('./routes/hpoi')); + // 通用CurseForge router.get('/curseforge/:gameid/:catagoryid/:projectid/files', require('./routes/curseforge/generalfiles')); diff --git a/lib/routes/hpoi/index.js b/lib/routes/hpoi/index.js new file mode 100644 index 0000000000..7380f3c2bd --- /dev/null +++ b/lib/routes/hpoi/index.js @@ -0,0 +1,41 @@ +const axios = require('../../utils/axios'); +const cheerio = require('cheerio'); + +const host = 'https://www.hpoi.net'; + +const MAPs = { + charactar: { + url: `${host}/hobby/all?charactar={words}&order=release`, + title: '角色手办', + }, + works: { + url: `${host}/hobby/all?works={words}&order=release`, + title: '作品手办', + }, +}; + +module.exports = async (ctx) => { + const category = ctx.params && ctx.params.category; + const words = ctx.params && ctx.params.words; + const response = await axios({ + method: 'get', + url: MAPs[category].url.replace(/{words}/, words), + headers: { + Referer: host, + }, + }); + const $ = cheerio.load(response.data); + ctx.state.data = { + title: MAPs[category].title + ' - ' + $('title').text(), + item: $('.bs-glyphicons-list .detail-grid') + .map((_index, _item) => { + _item = $(_item); + return { + title: _item.find('.detail-grid-title').text(), + link: host + '/' + _item.find('.detail-grid-title a').attr('href'), + description: _item.find('.detail-grid-info').text(), + }; + }) + .get(), + }; +};