'use strict'; const unprint = require('unprint'); function scrapeAll(scenes) { return scenes.map(({ query, element }, channel) => { const release = {}; release.url = query.url('a'); release.entryId = new URL(release.url).pathname.match(/\/scene\/\w+\/([\w-]+)/)[1]; release.title = query.content('.name'); release.actors = query.all('.performers a').map((actorEl) => ({ name: unprint.query.content(actorEl, null).trim(), url: unprint.query.url(actorEl, null, 'href'), })); const poster = query.img('img[itemprop="thumbnailUrl"]'); const photo = poster.replace('featured.jpg', 'trailer.jpg'); release.poster = [ poster, photo, ]; release.photos = [photo]; release.teaser = unprint.prefixUrl(element.dataset.video, channel.url); release.stars = query.number('.rating span'); return release; }); } function scrapeScene({ query }, { url, entity }) { const release = {}; release.entryId = new URL(url).pathname.match(/\/scene\/\w+\/([\w-]+)/)[1]; release.title = query.content('.container h1'); release.description = query.content('//p[contains(text(), "Categories")]/following-sibling::p'); release.actors = query.all('//h3[contains(text(), "Starring")]/a').map((actorEl) => ({ name: unprint.query.content(actorEl, null).trim(), url: unprint.query.url(actorEl, null, 'href'), })); const photo = query.poster('.container video', { origin: entity.url }); release.poster = [ photo.replace('trailer.jpg', 'featured.jpg'), photo, ]; release.photos = [photo]; release.trailer = query.video(); release.tags = query.contents('//p[contains(text(), "Categories")]/a'); return release; } async function fetchLatest(channel, page = 1) { const url = `${channel.url}/updates/${page}`; const res = await unprint.get(url, { selectAll: '.card.scene' }); if (res.ok) { return scrapeAll(res.context, channel); } return res.status; } module.exports = { fetchLatest, scrapeScene, useUnprint: true, };