diff --git a/docs/multimedia.md b/docs/multimedia.md index 93b27c1d5a..1196a890a7 100644 --- a/docs/multimedia.md +++ b/docs/multimedia.md @@ -297,7 +297,7 @@ pageClass: routes ### 主页 - + 分类 @@ -321,7 +321,7 @@ pageClass: routes ### 分類 - + ::: tip 提示 @@ -341,7 +341,7 @@ pageClass: routes ### 排行榜 - + 分类 diff --git a/lib/router.js b/lib/router.js index b58dbd5e70..a87a5989eb 100644 --- a/lib/router.js +++ b/lib/router.js @@ -3477,13 +3477,14 @@ router.get('/mercari/:type/:id', lazyloadRouteHandler('./routes/mercari/index')) router.get('/notefolio/:caty?/:order?/:time?/:query?', lazyloadRouteHandler('./routes/notefolio/index')); // JavDB -router.get('/javdb/home/:caty?/:sort?/:filter?', lazyloadRouteHandler('./routes/javdb/home')); +router.get('/javdb/home/:category?/:sort?/:filter?', lazyloadRouteHandler('./routes/javdb')); router.get('/javdb/search/:keyword?/:filter?', lazyloadRouteHandler('./routes/javdb/search')); router.get('/javdb/tags/:query?/:caty?', lazyloadRouteHandler('./routes/javdb/tags')); router.get('/javdb/actors/:id/:filter?', lazyloadRouteHandler('./routes/javdb/actors')); router.get('/javdb/makers/:id/:filter?', lazyloadRouteHandler('./routes/javdb/makers')); router.get('/javdb/series/:id/:filter?', lazyloadRouteHandler('./routes/javdb/series')); router.get('/javdb/rankings/:caty?/:time?', lazyloadRouteHandler('./routes/javdb/rankings')); +router.get('/javdb/:category?/:sort?/:filter?', lazyloadRouteHandler('./routes/javdb')); // World Economic Forum router.get('/weforum/report/:lang?/:year?/:platform?', lazyloadRouteHandler('./routes/weforum/report')); diff --git a/lib/routes/javdb/actors.js b/lib/routes/javdb/actors.js index 0815709c5d..cdd3494071 100644 --- a/lib/routes/javdb/actors.js +++ b/lib/routes/javdb/actors.js @@ -1,11 +1,12 @@ const utils = require('./utils'); module.exports = async (ctx) => { - ctx.params.filter = ctx.params.filter || ''; + const id = ctx.params.id; + const filter = ctx.params.filter || ''; - const currentUrl = `${utils.rootUrl}/actors/${ctx.params.id}?t=${ctx.params.filter}`; + const currentUrl = `/actors/${id}?t=${filter}`; - const filter = { + const filters = { '': '', p: '可播放', s: '單體作品', @@ -13,7 +14,7 @@ module.exports = async (ctx) => { c: '含字幕', }; - const title = `JavDB${filter[ctx.params.filter] === '' ? '' : ` - ${filter[ctx.params.filter]}`} `; + const title = `JavDB${filters[filter] === '' ? '' : ` - ${filters[filter]}`} `; ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); }; diff --git a/lib/routes/javdb/home.js b/lib/routes/javdb/home.js deleted file mode 100644 index 8d49953c30..0000000000 --- a/lib/routes/javdb/home.js +++ /dev/null @@ -1,32 +0,0 @@ -const utils = require('./utils'); - -module.exports = async (ctx) => { - ctx.params.caty = ctx.params.caty || 'censored'; - ctx.params.sort = ctx.params.sort || '2'; - ctx.params.filter = ctx.params.filter || '1'; - - const currentUrl = `${utils.rootUrl}/${ctx.params.caty === 'censored' ? '' : ctx.params.caty}?vft=${ctx.params.filter}&vst=${ctx.params.sort}`; - - const category = { - censored: '有碼', - uncensored: '無碼', - western: '歐美', - fc2: 'FC2', - }; - - const filter = { - 0: '', - 1: '可下载', - 2: '含字幕', - 3: '含短評', - }; - - const sort = { - 1: '发布日期排序', - 2: '磁鏈更新排序', - }; - - const title = `${category[ctx.params.caty]} - JavDB - ${filter[ctx.params.filter] === '' ? '|' : `${filter[ctx.params.filter]} | `}${sort[ctx.params.sort]}`; - - ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); -}; diff --git a/lib/routes/javdb/index.js b/lib/routes/javdb/index.js new file mode 100644 index 0000000000..de8771983f --- /dev/null +++ b/lib/routes/javdb/index.js @@ -0,0 +1,32 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + const category = ctx.params.caty || 'censored'; + const sort = ctx.params.sort || '2'; + const filter = ctx.params.filter || '1'; + + const currentUrl = `${category === 'censored' ? '' : category}?vft=${filter}&vst=${sort}`; + + const categories = { + censored: '有碼', + uncensored: '無碼', + western: '歐美', + fc2: 'FC2', + }; + + const filters = { + 0: '', + 1: '可下载', + 2: '含字幕', + 3: '含短評', + }; + + const sorts = { + 1: '发布日期排序', + 2: '磁鏈更新排序', + }; + + const title = `${categories[category]} - JavDB - ${filters[filter] === '' ? '|' : `${filters[filter]} | `}${sorts[sort]}`; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/makers.js b/lib/routes/javdb/makers.js index c6b06f95f0..d66154dfa2 100644 --- a/lib/routes/javdb/makers.js +++ b/lib/routes/javdb/makers.js @@ -1,11 +1,12 @@ const utils = require('./utils'); module.exports = async (ctx) => { - ctx.params.filter = ctx.params.filter || ''; + const id = ctx.params.id; + const filter = ctx.params.filter || ''; - const currentUrl = `${utils.rootUrl}/makers/${ctx.params.id}?f=${ctx.params.filter}`; + const currentUrl = `/makers/${id}?f=${filter}`; - const filter = { + const filters = { '': '', playable: '可播放', single: '單體作品', @@ -14,7 +15,7 @@ module.exports = async (ctx) => { preview: '預覽圖', }; - const title = `JavDB${filter[ctx.params.filter] === '' ? '' : ` - ${filter[ctx.params.filter]}`} `; + const title = `JavDB${filters[filter] === '' ? '' : ` - ${filters[filter]}`} `; ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); }; diff --git a/lib/routes/javdb/rankings.js b/lib/routes/javdb/rankings.js index ee429abc26..890462b933 100644 --- a/lib/routes/javdb/rankings.js +++ b/lib/routes/javdb/rankings.js @@ -1,10 +1,10 @@ const utils = require('./utils'); module.exports = async (ctx) => { - ctx.params.caty = ctx.params.caty || 'censored'; - ctx.params.time = ctx.params.time || 'daily'; + const category = ctx.params.category || 'censored'; + const time = ctx.params.time || 'daily'; - const currentUrl = `${utils.rootUrl}/rankings/video_${ctx.params.caty}?period=${ctx.params.time}`; + const currentUrl = `/rankings/video_${category}?period=${time}`; const title = 'JavDB'; diff --git a/lib/routes/javdb/search.js b/lib/routes/javdb/search.js index bdf0bc5ef0..3a46e64adf 100644 --- a/lib/routes/javdb/search.js +++ b/lib/routes/javdb/search.js @@ -1,12 +1,12 @@ const utils = require('./utils'); module.exports = async (ctx) => { - ctx.params.filter = ctx.params.filter || ''; - ctx.params.keyword = ctx.params.keyword || ''; + const filter = ctx.params.filter || ''; + const keyword = ctx.params.keyword || ''; - const currentUrl = `${utils.rootUrl}/search?q=${ctx.params.keyword}&f=${ctx.params.filter}`; + const currentUrl = `/search?q=${keyword}&f=${filter}`; - const filter = { + const filters = { '': '', playable: '可播放', single: '單體作品', @@ -20,7 +20,7 @@ module.exports = async (ctx) => { preview: '預覽圖', }; - const title = `關鍵字 ${ctx.params.keyword} ${filter[ctx.params.filter] === '' ? '' : `+ ${filter[ctx.params.filter]}`} 搜索結果 - JavDB `; + const title = `關鍵字 ${keyword} ${filters[filter] === '' ? '' : `+ ${filters[filter]}`} 搜索結果 - JavDB`; ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); }; diff --git a/lib/routes/javdb/series.js b/lib/routes/javdb/series.js index 9189c21bea..df8718ee28 100644 --- a/lib/routes/javdb/series.js +++ b/lib/routes/javdb/series.js @@ -1,11 +1,12 @@ const utils = require('./utils'); module.exports = async (ctx) => { - ctx.params.filter = ctx.params.filter || ''; + const id = ctx.params.id; + const filter = ctx.params.filter || ''; - const currentUrl = `${utils.rootUrl}/series/${ctx.params.id}?f=${ctx.params.filter}`; + const currentUrl = `/series/${id}?f=${filter}`; - const filter = { + const filters = { '': '', playable: '可播放', single: '單體作品', @@ -14,7 +15,7 @@ module.exports = async (ctx) => { preview: '預覽圖', }; - const title = `JavDB${filter[ctx.params.filter] === '' ? '' : ` - ${filter[ctx.params.filter]}`} `; + const title = `JavDB${filters[filter] === '' ? '' : ` - ${filter[filter]}`} `; ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); }; diff --git a/lib/routes/javdb/tags.js b/lib/routes/javdb/tags.js index efec484cb8..517e3cf135 100644 --- a/lib/routes/javdb/tags.js +++ b/lib/routes/javdb/tags.js @@ -1,12 +1,12 @@ const utils = require('./utils'); module.exports = async (ctx) => { - ctx.params.caty = ctx.params.caty || 'censored'; - ctx.params.query = ctx.params.query || ''; + const category = ctx.params.category || 'censored'; + const query = ctx.params.query || ''; - const currentUrl = `${utils.rootUrl}/tags${ctx.params.caty === 'censored' ? '' : `/${ctx.params.caty}`}?${ctx.params.query}`; + const currentUrl = `/tags${category === 'censored' ? '' : `/${category}`}?${query}`; - const title = `JavDB${ctx.params.query === '' ? '' : ` - ${ctx.params.query}`} `; + const title = `JavDB${query === '' ? '' : ` - ${query}`} `; ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); }; diff --git a/lib/routes/javdb/utils.js b/lib/routes/javdb/utils.js index de2ad03451..21f8ba14cf 100644 --- a/lib/routes/javdb/utils.js +++ b/lib/routes/javdb/utils.js @@ -1,28 +1,39 @@ const got = require('@/utils/got'); const cheerio = require('cheerio'); -const rootUrl = 'https://javdb.com'; +let rootUrl = 'https://javdb.com'; module.exports = { - rootUrl, ProcessItems: async (ctx, currentUrl, title) => { - const response = await got({ - method: 'get', - url: currentUrl, - }); + let data; - const $ = cheerio.load(response.data); + try { + const response = await got({ + method: 'get', + url: `${rootUrl}${currentUrl}`, + }); + data = response.data; + } catch (err) { + rootUrl = rootUrl.replace('javdb', 'javdb7'); + const response = await got({ + method: 'get', + url: `${rootUrl}${currentUrl}`, + }); + data = response.data; + } + + const $ = cheerio.load(data); $('.tags').remove(); const list = $('.grid-item a') - .slice(0, 5) + .slice(0, 15) .map((_, item) => { item = $(item); return { title: item.text(), link: `${rootUrl}${item.attr('href')}`, - pubDate: new Date(item.find('.meta').text()).toUTCString(), + pubDate: Date.parse(item.find('.meta').text()), }; }) .get(); @@ -32,7 +43,7 @@ module.exports = { ctx.cache.tryGet(item.link, async () => { const detailResponse = await got({ method: 'get', - url: item.link, + F: item.link, }); const content = cheerio.load(detailResponse.data); @@ -64,7 +75,7 @@ module.exports = { return { title: subject === '' ? title : `${subject} - ${title}`, - link: currentUrl, + link: `${rootUrl}${currentUrl}`, item: items, }; },