Fixed Gamma movie scraper failing when data object is not available.

This commit is contained in:
DebaucheryLibrarian 2021-12-13 01:20:02 +01:00
parent 523c36ecd4
commit 65e2b72c6a
1 changed files with 28 additions and 12 deletions

View File

@ -24,6 +24,19 @@ function getApiUrl(appId, apiKey) {
};
}
function getAvatarFallbacks(avatar) {
if (!avatar) {
return null;
}
return [
avatar.replace(/\d+x\d+/, '500x750'),
avatar.replace(/\d+x\d+/, '240x360'),
avatar.replace(/\d+x\d+/, '200x300'),
avatar,
];
}
async function fetchApiCredentials(referer, site) {
if (site?.parameters?.appId && site?.parameters?.apiKey) {
return getApiUrl(site.parameters.appId, site.parameters.apiKey);
@ -450,7 +463,8 @@ async function fetchMovieTrailer(release) {
async function scrapeMovie({ query, el }, window, url, entity, options) {
const release = {};
const data = window.dataLayer[0]?.dvdDetails;
const rawData = window.dataLayer[0]?.dvdDetails;
const data = rawData.dvdId && rawData; // dvdDetails is mostly empty in some cache states
release.entryId = new URL(url).pathname.match(/\/(\d+)(\/|$)/)?.[1];
@ -460,12 +474,19 @@ async function scrapeMovie({ query, el }, window, url, entity, options) {
];
release.description = query.cnt('.descriptionText');
release.date = qu.extractDate(data.dvdReleaseDate);
release.title = data.dvdName;
release.date = qu.extractDate(data?.dvdReleaseDate) || query.date('.updatedOn', 'YYYY-MM-DD');
release.title = data?.dvdName || query.cnt('.dvdTitle');
release.director = query.el('.directedBy a', 'title');
release.actors = data?.dvdActors.map((actor) => ({ name: actor.actorName, entryId: actor.actorId }))
|| query.all('.actorCarousel a[href*="/pornstar"]').map((actorEl) => ({
entryId: query.url(actorEl, null).match(/\/(\d+)/)?.[1],
name: query.cnt(actorEl, 'span'),
href: query.url(actorEl, null, 'href', { origin: entity.url }),
avatar: getAvatarFallbacks(query.img(actorEl)),
}));
release.actors = data.dvdActors.map((actor) => ({ name: actor.actorName, entryId: actor.actorId }));
release.tags = query.cnts('.dvdCol a');
release.scenes = scrapeAll(qu.initAll(el, 'div[data-itemtype*=scene], li[data-itemtype*=scene]'), entity, entity.url);
if (options.includeTrailers) {
@ -510,7 +531,7 @@ async function fetchActorReleases(profileUrl, getActorReleasesUrl, page = 1, acc
}
async function scrapeProfile({ query }, url, actorName, _siteSlug, getActorReleasesUrl, withReleases, context) {
const avatar = query.el('img.actorPicture');
const avatar = query.img('img.actorPicture');
const hair = query.cnt('.actorProfile .attribute_hair_color');
const height = query.cnt('.actorProfile .attribute_height');
const weight = query.cnt('.actorProfile .attribute_weight');
@ -523,12 +544,7 @@ async function scrapeProfile({ query }, url, actorName, _siteSlug, getActorRelea
if (avatar) {
// larger sizes usually available, provide fallbacks
const avatars = [
avatar.src.replace(/\d+x\d+/, '500x750'),
avatar.src.replace(/\d+x\d+/, '240x360'),
avatar.src.replace(/\d+x\d+/, '200x300'),
avatar.src,
];
const avatars = getAvatarFallbacks(avatar);
profile.avatar = avatars;
}