Added actor scene URL parameter to Gamma scraper to phase out release URL function.
This commit is contained in:
parent
d3d08b9c21
commit
bfb5006e95
|
@ -125,6 +125,7 @@ const networks = [
|
||||||
description: 'Welcome to Blowpass.com, your ultimate source for deepthroat porn, MILF and teen blowjob videos, big cumshots and any and everything oral!',
|
description: 'Welcome to Blowpass.com, your ultimate source for deepthroat porn, MILF and teen blowjob videos, big cumshots and any and everything oral!',
|
||||||
parameters: {
|
parameters: {
|
||||||
mobile: 'https://m.blowpass.com/en/video/v/%d', // v can be any string, %d will be scene ID
|
mobile: 'https://m.blowpass.com/en/video/v/%d', // v can be any string, %d will be scene ID
|
||||||
|
actorScenes: 'https://www.blowpass.com/en/videos/blowpass/latest/All-Categories/0{path}/{page}',
|
||||||
},
|
},
|
||||||
parent: 'gamma',
|
parent: 'gamma',
|
||||||
},
|
},
|
||||||
|
|
|
@ -622,7 +622,10 @@ async function scrapeProfiles(actor, sources, entitiesBySlug, existingProfilesBy
|
||||||
const entity = entitiesBySlug[scraperSlug] || null;
|
const entity = entitiesBySlug[scraperSlug] || null;
|
||||||
|
|
||||||
const scraper = scrapers[scraperSlug];
|
const scraper = scrapers[scraperSlug];
|
||||||
const layoutScraper = scraper?.[entity.parameters?.layout] || scraper?.[entity.parent?.parameters?.layout] || scraper?.[entity.parent?.parent?.parameters?.layout] || scraper;
|
const layoutScraper = scraper?.[entity.parameters?.layout]
|
||||||
|
|| scraper?.[entity.parent?.parameters?.layout]
|
||||||
|
|| scraper?.[entity.parent?.parent?.parameters?.layout]
|
||||||
|
|| scraper;
|
||||||
|
|
||||||
const context = {
|
const context = {
|
||||||
...entity,
|
...entity,
|
||||||
|
@ -631,6 +634,11 @@ async function scrapeProfiles(actor, sources, entitiesBySlug, existingProfilesBy
|
||||||
network: entity?.parent,
|
network: entity?.parent,
|
||||||
entity,
|
entity,
|
||||||
scraper: scraperSlug,
|
scraper: scraperSlug,
|
||||||
|
parameters: {
|
||||||
|
...entity?.parent?.parent?.parameters,
|
||||||
|
...entity?.parent?.parameters,
|
||||||
|
...entity?.parameters,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const label = context.entity?.name;
|
const label = context.entity?.name;
|
||||||
|
|
|
@ -19,17 +19,9 @@ async function fetchSceneWrapper(url, site, baseRelease, options) {
|
||||||
return release;
|
return release;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getActorReleasesUrl(actorPath, page = 1) {
|
|
||||||
return `https://www.blowpass.com/en/videos/blowpass/latest/All-Categories/0${actorPath}/${page}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function networkFetchProfile({ name: actorName }, context, include) {
|
|
||||||
return fetchProfile({ name: actorName }, context, null, getActorReleasesUrl, include);
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
fetchLatest,
|
fetchLatest,
|
||||||
fetchProfile: networkFetchProfile,
|
fetchProfile,
|
||||||
fetchUpcoming,
|
fetchUpcoming,
|
||||||
fetchScene: fetchSceneWrapper,
|
fetchScene: fetchSceneWrapper,
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,7 @@ const util = require('util');
|
||||||
const { JSDOM } = require('jsdom');
|
const { JSDOM } = require('jsdom');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
|
const format = require('template-format');
|
||||||
|
|
||||||
const logger = require('../logger')(__filename);
|
const logger = require('../logger')(__filename);
|
||||||
const qu = require('../utils/qu');
|
const qu = require('../utils/qu');
|
||||||
|
@ -376,26 +377,34 @@ function scrapeActorSearch(html, url, actorName) {
|
||||||
return actorLink ? actorLink.href : null;
|
return actorLink ? actorLink.href : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchActorReleases(profileUrl, getActorReleasesUrl, page = 1, accReleases = []) {
|
async function fetchActorReleases(profileUrl, getActorReleasesUrl, page = 1, accReleases = [], context) {
|
||||||
const { origin, pathname } = new URL(profileUrl);
|
const { origin, pathname } = new URL(profileUrl);
|
||||||
const profilePath = `/${pathname.split('/').slice(-2).join('/')}`;
|
const profilePath = `/${pathname.split('/').slice(-2).join('/')}`;
|
||||||
|
|
||||||
const url = getActorReleasesUrl(profilePath, page);
|
const url = (context.parameters.actorScenes && format(context.parameters.actorScenes, { path: profilePath, page }))
|
||||||
|
|| getActorReleasesUrl?.(profilePath, page);
|
||||||
|
|
||||||
|
if (!url) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
const res = await qu.get(url);
|
const res = await qu.get(url);
|
||||||
|
|
||||||
if (!res.ok) return [];
|
if (!res.ok) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
const releases = scrapeAll(res.item.html, null, origin);
|
const releases = scrapeAll(res.item.html, null, origin);
|
||||||
const nextPage = res.item.query.url('.Gamma_Paginator a.next');
|
const nextPage = res.item.query.url('.Gamma_Paginator a.next');
|
||||||
|
|
||||||
if (nextPage) {
|
if (nextPage) {
|
||||||
return fetchActorReleases(profileUrl, getActorReleasesUrl, page + 1, accReleases.concat(releases));
|
return fetchActorReleases(profileUrl, getActorReleasesUrl, page + 1, accReleases.concat(releases), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return accReleases.concat(releases);
|
return accReleases.concat(releases);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function scrapeProfile(html, url, actorName, _siteSlug, getActorReleasesUrl, withReleases) {
|
async function scrapeProfile(html, url, actorName, _siteSlug, getActorReleasesUrl, withReleases, context) {
|
||||||
const { query } = qu.extract(html);
|
const { query } = qu.extract(html);
|
||||||
|
|
||||||
const avatar = query.el('img.actorPicture');
|
const avatar = query.el('img.actorPicture');
|
||||||
|
@ -429,8 +438,8 @@ async function scrapeProfile(html, url, actorName, _siteSlug, getActorReleasesUr
|
||||||
if (alias) profile.aliases = alias.split(':')[1].trim().split(', ');
|
if (alias) profile.aliases = alias.split(':')[1].trim().split(', ');
|
||||||
if (nationality) profile.nationality = nationality.split(':')[1].trim();
|
if (nationality) profile.nationality = nationality.split(':')[1].trim();
|
||||||
|
|
||||||
if (getActorReleasesUrl && withReleases) {
|
if ((getActorReleasesUrl || context.parameters.actorScenes) && withReleases) {
|
||||||
profile.releases = await fetchActorReleases(url, getActorReleasesUrl);
|
profile.releases = await fetchActorReleases(url, getActorReleasesUrl, 1, [], context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return profile;
|
return profile;
|
||||||
|
@ -661,7 +670,7 @@ async function fetchActorScenes(actorName, apiUrl, siteSlug) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchProfile({ name: actorName }, context, altSearchUrl, getActorReleasesUrl, include) {
|
async function fetchProfile({ name: actorName }, context, include, altSearchUrl, getActorReleasesUrl) {
|
||||||
const siteSlug = context.entity.slug || context.site?.slug || context.network?.slug;
|
const siteSlug = context.entity.slug || context.site?.slug || context.network?.slug;
|
||||||
|
|
||||||
const actorSlug = actorName.toLowerCase().replace(/\s+/, '+');
|
const actorSlug = actorName.toLowerCase().replace(/\s+/, '+');
|
||||||
|
@ -684,7 +693,7 @@ async function fetchProfile({ name: actorName }, context, altSearchUrl, getActor
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return scrapeProfile(actorRes.body.toString(), url, actorName, siteSlug, getActorReleasesUrl, include.scenes);
|
return scrapeProfile(actorRes.body.toString(), url, actorName, siteSlug, getActorReleasesUrl, include.scenes, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue