'use strict'; const unprint = require('unprint'); const slugify = require('../utils/slugify'); function scrapeAll(scenes) { return scenes.map(({ query }) => { const release = {}; release.url = query.url('.title a'); release.entryId = new URL(release.url).pathname.match(/\/scene\/(\d+)/)[1]; release.title = query.content('.title a'); release.date = query.date('.date', 'MMM DD, YYYY'); release.duration = query.duration('.duration'); release.actors = query.all('.models a.model').map((actorEl) => ({ name: unprint.query.content(actorEl), url: unprint.query.url(actorEl, null), })); release.poster = query.img('img.poster'); release.teaser = query.video('.teaser video'); console.log(release); return release; }); } function scrapeScene({ query }, { url }) { const release = {}; release.entryId = new URL(url).pathname.match(/\/scene\/(\d+)/)[1]; release.title = query.content('h3.title'); release.description = query.content('p.description'); release.date = query.date('.date', 'MMMM D, YYYY'); release.duration = query.duration('.duration'); [release.poster, ...release.photos] = query.imgs('.preview-thumb'); release.trailer = query.video('.trailer video'); console.log(release); return release; } function scrapeProfile({ query }) { const profile = {}; profile.description = query.content('.bio-text'); profile.birthPlace = query.content('.birth-place span'); profile.avatar = query.img('.actor-photo img'); console.log(profile); return profile; } async function fetchLatest(channel, page = 1) { const url = `${channel.url}/${page}`; const res = await unprint.get(url, { selectAll: '.scene' }); if (res.ok) { return scrapeAll(res.context, channel); } return res.status; } async function fetchProfile({ name: actorName }, entity) { const url = `${entity.url}/actors/${slugify(actorName, '_')}`; const res = await unprint.get(url); if (res.ok) { return scrapeProfile(res.context, entity); } return res.status; } module.exports = { fetchLatest, fetchProfile, scrapeScene, };