Added Snow Valley (Sperm Mania) scraper.

This commit is contained in:
DebaucheryLibrarian
2024-10-16 02:39:11 +02:00
parent 91e31e8ce7
commit 1950dd2e62
16 changed files with 1234 additions and 79 deletions

View File

@@ -28,7 +28,7 @@ function getEntryId(html) {
function getEntryIdFromTitle(release) {
// return slugify([release.title, release.date && unprint.formatDate(release.date, 'YYYY-MM-DD')]); // date not shown on updates page
// return slugify(release.title);
return slugify([release.title, ...(release.actors?.map((actor) => actor.name).toSorted() || [])]);
return slugify([release.title, ...(release.actors?.map((actor) => actor.name || actor).toSorted() || [])]);
}
function scrapeAll(scenes, site, entryIdFromTitle) {
@@ -226,13 +226,13 @@ async function scrapeScene({ html, query }, context) {
})));
}
if (query.exists('.update_dvds a')) {
if (query.exists('.player-scene-description a[href*="/dvd"]')) {
release.movie = {
url: query.url('.update_dvds a'),
title: query.cnt('.update_dvds a'),
url: query.url('.player-scene-description a[href*="/dvd"]'),
title: query.content('.player-scene-description a[href*="/dvd"]'),
};
release.movie.entryId = new URL(release.movie.url).pathname.split('/').slice(-1)[0]?.replace('.html', '');
release.movie.entryId = new URL(release.movie.url).pathname.split('/').slice(-1)[0]?.replace('.html', '').toLowerCase();
}
release.stars = query.number('.avg_rating');
@@ -244,28 +244,40 @@ async function scrapeScene({ html, query }, context) {
return release;
}
function scrapeMovie({ el, query }, url, site) {
const movie = { url, site };
function scrapeMovie({ query }, { url }) {
const movie = {};
movie.entryId = new URL(url).pathname.split('/').slice(-1)[0]?.replace('.html', '').toLowerCase();
movie.title = query.cnt('.title_bar span');
movie.covers = query.urls('#dvd-cover-flip > a');
movie.channel = slugify(query.q('.update_date a', true), '');
movie.title = query.attribute('meta[property="og:title"]', 'content');
// movie.releases = Array.from(document.querySelectorAll('.cell.dvd_info > a'), el => el.href);
const sceneQus = qu.initAll(el, '.dvd_details');
const scenes = scrapeAll(sceneQus, site);
movie.covers = [query.img('img.dvd_box')]; // -2x etc is likely upscaled
const curatedScenes = scenes
?.map((scene) => ({ ...scene, movie }))
.sort((sceneA, sceneB) => sceneA.date - sceneB.date);
const sceneTitles = query.contents('.title-heading-content-black-dvd');
movie.date = curatedScenes?.[0]?.date;
const scenes = query.all('.grid-container-scene').map((sceneEl, index) => {
const scene = {};
return {
...movie,
...(curatedScenes && { scenes: curatedScenes }),
};
scene.url = unprint.query.url(sceneEl, 'a[href*="/scenes"]');
scene.title = sceneTitles[index];
scene.date = unprint.query.date(sceneEl, '//span[contains(@class, "dvd-scene-description") and span[contains(text(), "Date")]]', 'MM/DD/YYYY');
scene.actors = unprint.query.contents(sceneEl, '.update_models a');
scene.entryId = getEntryIdFromTitle(scene);
console.log(scene);
return scene;
});
movie.scenes = scenes?.sort((sceneA, sceneB) => sceneA.date - sceneB.date);
movie.date = movie.scenes?.[0]?.date;
movie.datePrecision = 'month';
console.log('jj movie', movie);
return movie;
}
function scrapeProfile({ query }, url, name, entity) {
@@ -325,12 +337,6 @@ async function fetchUpcoming(site) {
return res.status;
}
async function fetchMovie(url, site) {
const res = await qu.get(url);
return res.ok ? scrapeMovie(res.item, url, site) : res.status;
}
async function fetchProfile({ name: actorName, url }, entity) {
const actorSlugA = slugify(actorName, '');
const actorSlugB = slugify(actorName, '-');
@@ -364,8 +370,8 @@ async function fetchProfile({ name: actorName, url }, entity) {
module.exports = {
fetchLatest,
fetchMovie,
fetchProfile,
fetchUpcoming,
scrapeScene,
scrapeMovie,
};