'use strict'; const unprint = require('unprint'); function scrapeAll(scenes) { return scenes.map(({ query }) => { if (query.exists('.crowdfunding-post')) { return null; } const release = {}; release.url = query.url('a'); release.entryId = new URL(release.url).pathname.split('/')[1]; release.title = query.content('.allvideostitle p, .allvideostitle h2'); release.actors = query.contents('.tagsmodels a'); release.poster = query.sourceSet('.vidcont .attachment-thumbnail'); release.teaser = query.video('.vidcont video', { attribute: 'data-src' }); return release; }).filter(Boolean); } function scrapeScene({ query }, { url }) { const release = {}; release.entryId = new URL(url).pathname.split('/')[1]; release.title = query.content('.title-fav h1'); release.description = query.contents('.description #fullstory, .title-fav .cont > p').join(' '); release.date = query.date('.datesingle', 'MMMM D, YYYY'); release.duration = query.duration('.cont .duration'); release.actors = query.contents('.cont .tagsmodels:not(.director) a'); release.director = query.content('.cont .director a'); release.poster = [ query.img('.preview .attachment-full'), query.img('meta[property="og:image"]', { attribute: 'content' }), ]; release.caps = query.all('.gallery a').map((photoEl) => [ unprint.query.url(photoEl, null), unprint.query.img(photoEl, 'img'), ]); release.trailer = { src: query.video('.preview video'), referer: url, expectType: { 'binary/octet-stream': 'video/mp4', }, }; release.tags = query.contents('.post-categories a'); return release; } async function fetchLatest(channel, page = 1) { const url = `${channel.url}/all-videos/page/${page}/`; const res = await unprint.get(url, { selectAll: '.catposts > div:not(.clearfix):not(.flexcont)' }); if (res.ok) { return scrapeAll(res.context, channel); } return res.status; } module.exports = { fetchLatest, scrapeScene, };