const got = require('@/utils/got'); const cheerio = require('cheerio'); const { parseDate } = require('@/utils/parse-date'); const { art } = require('@/utils/render'); const path = require('path'); module.exports = async (ctx) => { const isWestern = /^\/western/.test(ctx.path); const rootUrl = `https://www.${ctx.query.domain ?? 'javbus.com'}`; const westernUrl = `https://www.${ctx.query.western_domain ?? 'javbus.red'}`; const currentUrl = `${isWestern ? westernUrl : rootUrl}${ctx.path.replace(/^\/western/, '').replace(/\/home/, '')}`; const response = await got({ method: 'get', url: currentUrl, }); const $ = cheerio.load(response.data); let items = $('.movie-box') .slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 30) .toArray() .map((item) => { item = $(item); return { link: item.attr('href'), guid: item.find('date').first().text(), pubDate: parseDate(item.find('date').last().text()), }; }); items = await Promise.all( items.map((item) => ctx.cache.tryGet(item.link, async () => { const detailResponse = await got({ method: 'get', url: item.link, }); const content = cheerio.load(detailResponse.data); content('.genre').last().parent().remove(); content('input[type="checkbox"], button').remove(); const stars = content('.avatar-box span') .toArray() .map((s) => content(s).text()); const cache = { author: stars.join(', '), title: content('h3').text(), category: content('.genre label') .toArray() .map((c) => content(c).text()) .concat(stars), info: content('.row.movie').html(), thumbs: content('.sample-box') .toArray() .map((i) => { const thumbSrc = content(i).attr('href'); return /^http/.test(thumbSrc) ? thumbSrc : `${rootUrl}${thumbSrc}`; }), }; let magnets, videoSrc, videoPreview; // To fetch magnets. try { const matches = detailResponse.data.match(/var gid = (\d+);[\s\S]*var uc = (\d+);[\s\S]*var img = '(.*)';/); const magnetResponse = await got({ method: 'get', url: `${rootUrl}/ajax/uncledatoolsbyajax.php`, searchParams: { gid: matches[1], lang: 'zh', img: matches[3], uc: matches[2], floor: 800, }, headers: { Referer: item.link, }, }); const content = cheerio.load(`