'use strict'; const { get, geta, formatDate } = require('../utils/qu'); const slugify = require('../utils/slugify'); function scrapeLatest(scenes, site) { return scenes.map(({ qu }) => { const release = {}; release.title = qu.q('h3 a', true); release.url = qu.url('h3 a'); release.date = qu.date('.item-meta li', 'MMMM D, YYYY', /\w+ \d{1,2}, \d{4}/); release.duration = qu.dur('.item-meta li:nth-child(2)'); release.description = qu.q('.description', true); release.actors = qu.all('a[href*="/models"]', true); [release.poster, ...release.photos] = qu.all('.item-thumbs img') .map(source => [ source.getAttribute('src0_3x'), source.getAttribute('src0_2x'), source.getAttribute('src0_1x'), ] .filter(Boolean) .map(fallback => (/^http/.test(fallback) ? fallback : `${site.url}${fallback}`))); release.entryId = `${formatDate(release.date, 'YYYY-MM-DD')}-${slugify(release.title)}`; return release; }); } function scrapeScene({ html, qu }, url, site) { const release = { url }; release.title = qu.q('.item-episode h4 a', true); release.date = qu.date('.item-meta li', 'MMMM D, YYYY', /\w+ \d{1,2}, \d{4}/); release.duration = qu.dur('.item-meta li:nth-child(2)'); release.description = qu.q('.description', true); release.actors = qu.all('.item-episode a[href*="/models"]', true); const posterPath = html.match(/poster="(.*.jpg)"/)?.[1]; const trailerPath = html.match(/video src="(.*.mp4)"/)?.[1]; if (posterPath) { const poster = /^http/.test(posterPath) ? posterPath : `${site.url}${posterPath}`; release.poster = [ poster.replace('-1x', '-3x'), poster.replace('-1x', '-2x'), poster, ]; } if (trailerPath) { const trailer = /^http/.test(trailerPath) ? trailerPath : `${site.url}${trailerPath}`; release.trailer = { src: trailer }; } release.entryId = `${formatDate(release.date, 'YYYY-MM-DD')}-${slugify(release.title)}`; return release; } async function fetchLatest(site, page = 1) { const url = `${site.url}/categories/movies/${page}/latest/`; const res = await geta(url, '.item-episode'); return res.ok ? scrapeLatest(res.items, site) : res.status; } async function fetchScene(url, site) { const res = await get(url); return res.ok ? scrapeScene(res.item, url, site) : res.status; } module.exports = { fetchLatest, fetchScene, };