'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.description = query.content('.description'); release.date = query.date('.date', 'MMM DD, YYYY'); release.actors = query.contents('.models a.model'); release.poster = query.img('img.poster'); release.teaser = { src: query.video('.teaser video') }; release.stars = query.number('.rating'); release.likes = query.number('.likes'); 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.poster, ...release.photos] = query.imgs('.preview-thumb'); release.trailer = query.video('.trailer video'); console.log(release); return release; } function scrapeProfile({ query }, actorName, entity, include) { const profile = {}; profile.description = query.content('.bio-text'); profile.birthPlace = query.content('.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}/${page}`; const res = await unprint.get(url, { selectAll: '.scene' }); if (res.ok) { return scrapeAll(res.context, channel); } return res.status; } async function fetchScene(url, channel) { const res = await unprint.get(url); if (res.ok) { return scrapeScene(res.context, url, 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.context, actorName, entity, include); } return res.status; } module.exports = { fetchLatest, fetchScene, fetchProfile, };