'use strict'; const unprint = require('unprint'); const slugify = require('../utils/slugify'); function scrapeAll(scenes) { return scenes.map(({ query }) => { const release = {}; release.url = query.url('a'); release.entryId = new URL(release.url).pathname.replaceAll('/', ''); release.title = query.content('h2 a'); release.date = query.date('.date', 'MMM DD, YYYY'); release.actors = query.content('.modelname').split(',').filter(Boolean); release.poster = query.img('.imgc img'); release.teaser = query.video('.vidhover source'); console.log(release); return release; }); } function scrapeScene({ query }, { url }) { const release = {}; release.entryId = new URL(url).pathname.replaceAll('/', ''); release.title = query.content('.vid-box h1'); release.description = query.content('//div[contains(@class, "vid-box")]/*[contains(text(), "About")]/following-sibling::p[2]'); release.actors = query.all('.vid-box a[href*="/pornstars"]').map((actorEl) => ({ name: unprint.query.content(actorEl), url: unprint.query.url(actorEl, null), })); release.poster = query.poster('.vid-play video'); release.photos = query.imgs('.img-sample img').map((source) => [ source.replace(/-\d+x\d+/, ''), // usually same size, but try anyway source, ]); release.tags = query.contents('.vid-box [itemprop="keywords"] a'); release.trailer = query.video('.vid-play source'); console.log(release); return release; } function scrapeProfile({ query }, actorName, entity, include) { const profile = {}; profile.description = query.cnt('.bio-text'); profile.birthPlace = query.cnt('.birth-place span'); profile.avatar = query.img('.actor-photo img'); if (include.releases) { return scrapeAll(unprint.initAll(query.all('.scene'))); } console.log(profile); return profile; } async function fetchLatest(channel, page = 1) { const url = `${channel.url}/videos/page/${page}/`; const res = await unprint.get(url, { selectAll: '.vid-listing li' }); if (res.ok) { return scrapeAll(res.context, channel); } return res.status; } async function fetchProfile({ name: actorName }, entity, include) { const url = `${entity.url}/actors/${slugify(actorName, '_')}`; const res = await unprint.get(url); if (res.ok) { return scrapeProfile(res.item, actorName, entity, include); } return res.status; } module.exports = { fetchLatest, fetchProfile, scrapeScene: { scraper: scrapeScene, unprint: true, }, };