Added fixed actor age. Added male profiles to Littlr Caprice Dreams scraper. Added various tag photos.
This commit is contained in:
@@ -4,7 +4,11 @@ const qu = require('../utils/qu');
|
||||
const slugify = require('../utils/slugify');
|
||||
|
||||
function matchChannel(release, channel) {
|
||||
const series = channel.children || channel.parent.children;
|
||||
const series = channel.children || channel.parent?.children;
|
||||
|
||||
if (!series) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const serieNames = series.reduce((acc, serie) => ({
|
||||
...acc,
|
||||
@@ -26,7 +30,7 @@ function matchChannel(release, channel) {
|
||||
|
||||
if (serie) {
|
||||
return {
|
||||
slug: serie.slug,
|
||||
channel: serie.slug,
|
||||
title: release.title.replace(new RegExp(`(${serieName}|${serie.name}|${serie.slug})\\s*[-–:/]+\\s*`, 'ig'), ''),
|
||||
};
|
||||
}
|
||||
@@ -109,31 +113,34 @@ async function scrapeScene({ query }, url, channel, include) {
|
||||
release.photos = await fetchPhotos(query.url('.vid_buttons a[href*="project/"]'));
|
||||
}
|
||||
|
||||
release.trailer = {
|
||||
src: query.video(),
|
||||
type: query.video('source', 'type'),
|
||||
quality: query.video('source', 'data-res'),
|
||||
referer: url,
|
||||
};
|
||||
|
||||
return {
|
||||
...release,
|
||||
...matchChannel(release, channel),
|
||||
};
|
||||
}
|
||||
|
||||
function scrapeProfile({ query }, url) {
|
||||
const profile = {};
|
||||
function scrapeProfile({ query, el }, { url, gender }, baseActor, entity) {
|
||||
const profile = { url, gender };
|
||||
|
||||
const bio = query.cnts('div p').reduce((acc, item) => {
|
||||
const [key, value] = item.split(/\s*:\s*/);
|
||||
profile.age = query.number('div:nth-child(2) > p');
|
||||
profile.birthPlace = query.cnt('div:nth-child(3) > p')?.match(/nationality[\s:]+(\w+)/i)?.[1];
|
||||
|
||||
return {
|
||||
...acc,
|
||||
[slugify(key, '_')]: value.trim(),
|
||||
};
|
||||
}, {});
|
||||
profile.description = query.cnt('div:nth-child(4) > p');
|
||||
|
||||
profile.avatar = {
|
||||
src: query.img('.model-page'),
|
||||
referer: url,
|
||||
};
|
||||
|
||||
console.log(bio);
|
||||
console.log(profile);
|
||||
profile.scenes = scrapeAll(qu.initAll(el, '.project_category-videos'), entity);
|
||||
|
||||
return profile;
|
||||
}
|
||||
|
||||
@@ -160,12 +167,16 @@ async function fetchScene(url, channel, baseRelease, include) {
|
||||
return res.status;
|
||||
}
|
||||
|
||||
async function getActorUrl(baseActor) {
|
||||
async function getActorUrl(baseActor, gender = 'female') {
|
||||
if (baseActor.url) {
|
||||
return baseActor.url;
|
||||
}
|
||||
|
||||
const overviewRes = await qu.getAll('https://www.littlecaprice-dreams.com/pornstars', '.models');
|
||||
const overviewUrl = gender === 'female'
|
||||
? 'https://www.littlecaprice-dreams.com/pornstars/'
|
||||
: 'https://www.littlecaprice-dreams.com/male-models-pornstars/';
|
||||
|
||||
const overviewRes = await qu.getAll(overviewUrl, '.models');
|
||||
|
||||
if (!overviewRes.ok) {
|
||||
return overviewRes.status;
|
||||
@@ -174,23 +185,36 @@ async function getActorUrl(baseActor) {
|
||||
const actorItem = overviewRes.items.find(({ query }) => slugify(query.q('img', 'title')) === baseActor.slug);
|
||||
|
||||
if (!actorItem) {
|
||||
if (gender === 'female') {
|
||||
return getActorUrl(baseActor, 'male');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
return actorItem.query.url('a');
|
||||
const actorUrl = actorItem.query.url('a');
|
||||
|
||||
if (actorUrl) {
|
||||
return {
|
||||
url: actorUrl,
|
||||
gender,
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
async function fetchProfile(baseActor, entity) {
|
||||
async function fetchProfile(baseActor, { entity }) {
|
||||
const actorUrl = await getActorUrl(baseActor);
|
||||
|
||||
if (!actorUrl) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const actorRes = await qu.get(actorUrl, '#main-content');
|
||||
const actorRes = await qu.get(actorUrl.url, '#main-content');
|
||||
|
||||
if (actorRes.ok) {
|
||||
return scrapeProfile(actorRes.item, actorUrl, entity);
|
||||
return scrapeProfile(actorRes.item, actorUrl, baseActor, entity);
|
||||
}
|
||||
|
||||
return actorRes.status;
|
||||
|
||||
Reference in New Issue
Block a user