From 28ded0b4b9a2138feac20a7c18c3dc16162c11f2 Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Sun, 8 Feb 2026 21:14:51 +0100 Subject: [PATCH] Fixed Teen Mega World posters. --- package-lock.json | 9 +++++---- package.json | 2 +- src/scrapers/teenmegaworld.js | 34 +++++++++++++++++----------------- src/scrapers/vixen.js | 2 ++ 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 599429f3..50745847 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,7 +94,7 @@ "tunnel": "0.0.6", "ua-parser-js": "^1.0.37", "undici": "^5.28.1", - "unprint": "^0.18.29", + "unprint": "^0.18.31", "url-pattern": "^1.0.3", "v-tooltip": "^2.1.3", "video.js": "^8.6.1", @@ -20380,9 +20380,10 @@ } }, "node_modules/unprint": { - "version": "0.18.29", - "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.18.29.tgz", - "integrity": "sha512-ZSlPLBf7kKW3X6y6ouner8loP9A0w+PEEFeR8eGdslH0P2LXML4rog0JtoJmbR2LoGqkAe0eb4Eeayolgvke4A==", + "version": "0.18.31", + "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.18.31.tgz", + "integrity": "sha512-7z4kC7eyyyRUeGBGc+lByRv1WqWP1NkO5Fwh6RwOs60x6HW3mffYUxa2R02fjpUOsEaPRukZwEsikP5jOA/JAA==", + "license": "ISC", "dependencies": { "bottleneck": "^2.19.5", "cookie": "^1.1.1", diff --git a/package.json b/package.json index 6f13c2e1..ab0c462e 100755 --- a/package.json +++ b/package.json @@ -153,7 +153,7 @@ "tunnel": "0.0.6", "ua-parser-js": "^1.0.37", "undici": "^5.28.1", - "unprint": "^0.18.29", + "unprint": "^0.18.31", "url-pattern": "^1.0.3", "v-tooltip": "^2.1.3", "video.js": "^8.6.1", diff --git a/src/scrapers/teenmegaworld.js b/src/scrapers/teenmegaworld.js index 7a666d8e..da210933 100755 --- a/src/scrapers/teenmegaworld.js +++ b/src/scrapers/teenmegaworld.js @@ -20,12 +20,12 @@ function scrapeAll(scenes, channel) { url: unprint.query.url(el, null), })); - release.poster = query.img('.thumb__picture img'); + release.poster = query.sourceSet('.thumb__picture img', 'srcset', { origin: channel.origin }); - [release.poster, ...release.photos] = Object + release.photos = Object .entries(query.el('.thumb__image').dataset) - .filter(([key]) => /^src/.test(key)) - .map(([, value]) => [value.replace('-1x', '-2x'), value].map((path) => unprint.prefixUrl(path, network.url))); + .filter(([key]) => key.includes('srcset-')) + .map(([_key, value]) => unprint.extractSourceSet(value, { origin: channel.origin })); release.teaser = query.video('.thumb__video', { origin: network.url }); @@ -41,6 +41,17 @@ function scrapeAll(scenes, channel) { }); } +async function fetchLatest(channel, page = 1) { + const url = `${channel.type === 'network' ? channel.url : channel.parent.url}/search.php?site[]=${channel.parameters.siteId}&page=${page}`; + const res = await unprint.get(url, { selectAll: '.video-list .thumb' }); + + if (res.ok) { + return scrapeAll(res.context, channel); + } + + return res.status; +} + function scrapeScene({ query }, context) { const release = {}; @@ -59,9 +70,9 @@ function scrapeScene({ query }, context) { release.tags = query.contents('.video-tag-link'); - const poster = query.img('.video-cover__image'); + const poster = query.sourceSet('.video-cover__image', 'srcset', { origin: context.entity.origin }); - if (!poster.includes('error')) { + if (!poster?.includes('error')) { release.poster = poster; } @@ -93,17 +104,6 @@ function scrapeProfile({ query }, url, entity) { return profile; } -async function fetchLatest(channel, page = 1) { - const url = `${channel.type === 'network' ? channel.url : channel.parent.url}/search.php?site[]=${channel.parameters.siteId}&page=${page}`; - const res = await unprint.get(url, { selectAll: '.video-list .thumb' }); - - if (res.ok) { - return scrapeAll(res.context, channel); - } - - return res.status; -} - async function fetchProfile(actor, entity, include) { const url = actor.url || `${entity.url}/models/${slugify(actor.name)}.html`; const res = await unprint.get(url); diff --git a/src/scrapers/vixen.js b/src/scrapers/vixen.js index 7846e148..1b4e37c8 100755 --- a/src/scrapers/vixen.js +++ b/src/scrapers/vixen.js @@ -25,6 +25,7 @@ function getAvatarFallbacks(avatar) { src: source, expectType: { 'binary/octet-stream': 'image/jpeg', + 'application/octet-stream': 'image/jpeg', }, })); } @@ -42,6 +43,7 @@ function curateSources(sources, type = 'image/jpeg') { type: source.type || type, expectType: { 'binary/octet-stream': type, + 'application/octet-stream': type, }, })) .sort((resA, resB) => (resB.width * resB.height) - (resA.width * resA.height)) // number of pixels