'use strict'; const { decode } = require('html-entities'); const qu = require('../utils/qu'); function scrapeAll(items, _channel) { return items.map(({ query }) => { const release = {}; const { date, precision } = query.dateAgo('.fecha'); const poster = query.img('.thumb'); release.entryId = query.number(null, /\d+/, 'onclick'); release.url = query.url(null, 'href', { origin: 'https://www.cumlouder.com' }); release.date = date; release.datePrecision = precision; release.title = query.cnt('h2'); release.duration = query.duration('.minutos'); release.poster = [ poster.replace(/\/(\w+)\.jpg/, '/previewhd.jpg'), poster, ]; console.log(release); return release; }); } function scrapeScene({ query }, channel, html) { const release = {}; const { date, precision } = query.dateAgo('.sub-video .added'); release.entryId = html.match(/cumlouder_(\d+)/)?.[1]; release.title = query.cnt('.video-top h1'); release.description = query.text('.sub-video p'); release.date = date; release.datePrecision = precision; release.actors = query.all('.sub-video .pornstar-link').map(el => ({ name: query.cnt(el, null), url: query.url(el, null, 'href', { origin: 'https://www.cumlouder.com' }), })); release.duration = query.duration('.video-top .duracion'); release.tags = query.cnts('.video-top .tag-link'); release.poster = query.poster() || html.match(/urlImg\s*=\s*'(.*)';/)?.[1]; release.trailer = query.video() || decode(html.match(/urlVideo\s*=\s*'(.*)';/)?.[1]); release.shootId = release.poster?.match(/\/rc(\d+)/)?.[1] || release.trailer?.match(/\/episodio_(\d+)/)?.[1]; console.log(release); return release; } function scrapeProfile({ query }) { const profile = {}; profile.description = query.cnt('.data-bio p:last-of-type'); profile.avatar = query.img('.thumb-bio'); console.log(profile); return profile; } async function fetchLatest(channel, page) { const res = await qu.getAll(`${channel.url}/${page}/`, '.muestra-escena'); if (res.ok) { return scrapeAll(res.items, channel); } return res.status; } async function fetchScene(url, channel) { const res = await qu.get(url); if (res.ok) { return scrapeScene(res.item, channel, res.html); } return res.status; } async function fetchProfile(actor) { const res = await qu.get(`https://www.cumlouder.com/girl/${actor.slug}/`, '.listado-escenas'); if (res.ok) { return scrapeProfile(res.item); } return res.status; } module.exports = { fetchLatest, fetchScene, fetchProfile, };