Refactored media module. Returning 320p and 720p videos from MindGeek as teasers instead of trailers.

This commit is contained in:
2020-02-19 04:41:53 +01:00
parent b9e617edfc
commit 97f5e49187
12 changed files with 389 additions and 193 deletions

View File

@@ -47,7 +47,7 @@ function scrapeLatest(html, site) {
const actors = title.split(/[,&]|\band\b/).map(actor => actor.trim());
const poster = `https:${element.querySelector('img').src}`;
const trailer = sceneLinkElement.dataset.preview_clip_url;
const teaser = sceneLinkElement.dataset.preview_clip_url;
return [
...acc,
@@ -57,8 +57,8 @@ function scrapeLatest(html, site) {
title,
actors,
poster,
trailer: {
src: trailer,
teaser: {
src: teaser,
},
site,
},
@@ -99,7 +99,7 @@ async function scrapeScene(html, url, site) {
const lastPhotosUrl = Array.from(document.querySelectorAll('.pagination a')).slice(-1)[0].href;
const photos = await getPhotos(`${origin}${pathname}${lastPhotosUrl}`, site, url);
const stars = Math.floor(Number(document.querySelector('span[itemprop="average"]').textContent) / 2);
const stars = Math.floor(Number(document.querySelector('span[itemprop="average"]')?.textContent || document.querySelector('span[itemprop="ratingValue"]')?.textContent) / 2);
const tags = Array.from(document.querySelectorAll('.scene-details .categories a')).map(({ textContent }) => textContent);
return {

View File

@@ -36,35 +36,33 @@ function scrapeLatestX(data, site) {
return null;
}
const { id: entryId, title, description } = data;
const hostname = site.parameters?.native ? site.url : site.network.url;
const url = `${hostname}/scene/${entryId}/`;
const date = new Date(data.dateReleased);
const actors = data.actors.map(actor => ({ name: actor.name, gender: actor.gender }));
const tags = data.tags.map(tag => tag.name);
const [poster, ...photos] = getThumbs(data);
const trailer = data.videos.mediabook && (data.videos.mediabook.files['720p'] || data.videos.mediabook.files['320p']);
const duration = data.videos.mediabook && data.videos.mediabook.length;
return {
url,
entryId,
title,
description,
actors,
tags,
duration,
poster,
photos,
trailer: trailer && {
src: trailer.urls.view,
quality: parseInt(trailer.format, 10),
},
date,
site,
const release = {
entryId: data.id,
title: data.title,
description: data.description,
};
const hostname = site.parameters?.native ? site.url : site.network.url;
release.url = `${hostname}/scene/${release.entryId}/`;
release.date = new Date(data.dateReleased);
release.actors = data.actors.map(actor => ({ name: actor.name, gender: actor.gender }));
release.tags = data.tags.map(tag => tag.name);
release.duration = data.videos.mediabook?.length;
[release.poster, ...release.photos] = getThumbs(data);
const teaserSources = data.videos.mediabook?.files;
if (teaserSources) {
release.teaser = Object.values(teaserSources).map(teaser => ({
src: teaser.urls.view,
quality: parseInt(teaser.format, 10),
}));
}
return release;
}
async function scrapeLatest(items, site) {
@@ -89,12 +87,13 @@ function scrapeScene(data, url, _site, networkName) {
[release.poster, ...release.photos] = getThumbs(data);
const trailer = data.videos.mediabook && (data.videos.mediabook.files['720p'] || data.videos.mediabook.files['320p']);
if (trailer) {
release.trailer = {
src: trailer.urls.view,
quality: parseInt(trailer.format, 10),
};
const teaserSources = data.videos.mediabook?.files;
if (teaserSources) {
release.teaser = Object.values(teaserSources).map(teaser => ({
src: teaser.urls.view,
quality: parseInt(teaser.format, 10),
}));
}
const siteName = data.collections[0]?.name || data.brand;