Added rudimentary movie relations.

This commit is contained in:
2020-03-09 05:06:37 +01:00
parent 8ca98b394f
commit 638757b6e4
11 changed files with 193 additions and 96 deletions

View File

@@ -135,10 +135,10 @@ function getEntryId(html) {
}
function scrapeAll(scenes, site) {
return scenes.map(({ qu }) => {
return scenes.map(({ el, qu }) => {
const release = {};
release.entryId = qu.el.dataset.setid || qu.q('.rating_box')?.dataset.id;
release.entryId = el.dataset.setid || qu.q('.rating_box')?.dataset.id;
release.url = qu.url('.update_title, .dvd_info > a, a ~ a');
release.title = qu.q('.update_title, .dvd_info > a, a ~ a', true);
@@ -160,7 +160,7 @@ function scrapeAll(scenes, site) {
} : null;
}).filter(Boolean);
const teaserScript = qu.content('script');
const teaserScript = qu.html('script');
if (teaserScript) {
const src = teaserScript.slice(teaserScript.indexOf('http'), teaserScript.indexOf('.mp4') + 4);
if (src) release.teaser = { src };
@@ -220,17 +220,19 @@ function scrapeUpcoming(html, site) {
});
}
async function scrapeScene({ qu }, url, site) {
async function scrapeScene({ html, qu }, url, site, include) {
const release = { url, site };
release.entryId = getEntryId(qu.html);
release.entryId = getEntryId(html);
release.title = qu.q('.title_bar_hilite', true);
release.description = qu.q('.update_description', true);
release.date = qu.date('.update_date', 'MM/DD/YYYY', null, 'innerHTML');
release.actors = qu.all('.backgroundcolor_info > .update_models a, .item .update_models a', true);
const posterPath = qu.html.match(/useimage = "(.*)"/)?.[1];
release.actors = qu.all('.backgroundcolor_info > .update_models a, .item .update_models a', true);
release.tags = qu.all('.update_tags a', true);
const posterPath = html.match(/useimage = "(.*)"/)?.[1];
if (posterPath) {
const poster = /^http/.test(posterPath) ? posterPath : `${site.url}${posterPath}`;
@@ -243,8 +245,8 @@ async function scrapeScene({ qu }, url, site) {
}
}
if (site.slug !== 'manuelferrara') {
const trailerLines = qu.html.split('\n').filter(line => /movie\["trailer\w*"\]\[/i.test(line));
if (include.trailer && site.slug !== 'manuelferrara') {
const trailerLines = html.split('\n').filter(line => /movie\["trailer\w*"\]\[/i.test(line));
if (trailerLines.length) {
release.trailer = trailerLines.map((trailerLine) => {
@@ -259,8 +261,7 @@ async function scrapeScene({ qu }, url, site) {
}
}
release.photos = await getPhotos(release.entryId, site);
release.tags = qu.all('.update_tags a', true);
if (include.photos) release.photos = await getPhotos(release.entryId, site);
if (qu.exists('.update_dvds a')) {
release.movie = {
@@ -275,27 +276,27 @@ async function scrapeScene({ qu }, url, site) {
return release;
}
function scrapeMovie({ el, q, qus }, url, site) {
function scrapeMovie({ el, qu }, url, site) {
const movie = { url, site };
movie.entryId = q('.dvd_details_overview .rating_box').dataset.id;
movie.title = q('.title_bar span', true);
movie.covers = qus('#dvd-cover-flip > a');
movie.channel = q('.update_date a', true);
movie.entryId = qu.q('.dvd_details_overview .rating_box').dataset.id;
movie.title = qu.q('.title_bar span', true);
movie.covers = qu.urls('#dvd-cover-flip > a');
movie.channel = qu.q('.update_date a', true);
// movie.releases = Array.from(document.querySelectorAll('.cell.dvd_info > a'), el => el.href);
const sceneQs = ctxa(el, '.dvd_details');
const scenes = scrapeAll(sceneQs, site);
const sceneQus = ctxa(el, '.dvd_details');
const scenes = scrapeAll(sceneQus, site);
const curatedScenes = scenes
.map(scene => ({ ...scene, movie }))
?.map(scene => ({ ...scene, movie }))
.sort((sceneA, sceneB) => sceneA.date - sceneB.date);
movie.date = curatedScenes[0].date;
movie.date = curatedScenes?.[0].date;
return {
...movie,
scenes: curatedScenes,
...(curatedScenes && { scenes: curatedScenes }),
};
}
@@ -358,10 +359,10 @@ async function fetchUpcoming(site) {
return res.statusCode;
}
async function fetchScene(url, site) {
async function fetchScene(url, site, baseRelease, preflight, include) {
const res = await get(url);
return res.ok ? scrapeScene(res.item, url, site) : res.status;
return res.ok ? scrapeScene(res.item, url, site, include) : res.status;
}
async function fetchMovie(url, site) {