diff --git a/package-lock.json b/package-lock.json index 965c3679..ea3302fa 100755 --- a/package-lock.json +++ b/package-lock.json @@ -78,7 +78,7 @@ "tunnel": "0.0.6", "ua-parser-js": "^1.0.32", "undici": "^4.13.0", - "unprint": "^0.9.1", + "unprint": "^0.9.3", "url-pattern": "^1.0.3", "v-tooltip": "^2.0.3", "video.js": "^7.11.4", @@ -17004,9 +17004,9 @@ } }, "node_modules/unprint": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.9.1.tgz", - "integrity": "sha512-TEdPfly6qOST3Vessa9gNFFkJsSsdWe04k0FCU5XuvdpCSb8eVRrAvLouuyJI/GkIhrn6ZHc9VgX/gRW/R5UcQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.9.3.tgz", + "integrity": "sha512-ujDlQL0yeVVd6V+kN5uURG/6F9jUblF0VWMOcpI9u3ZjsWp2tC4mQy0/kK4epU8QhkEFPE9uZ0pAMKORzEdp5g==", "dependencies": { "axios": "^0.27.2", "bottleneck": "^2.19.5", @@ -31449,9 +31449,9 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "unprint": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.9.1.tgz", - "integrity": "sha512-TEdPfly6qOST3Vessa9gNFFkJsSsdWe04k0FCU5XuvdpCSb8eVRrAvLouuyJI/GkIhrn6ZHc9VgX/gRW/R5UcQ==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/unprint/-/unprint-0.9.3.tgz", + "integrity": "sha512-ujDlQL0yeVVd6V+kN5uURG/6F9jUblF0VWMOcpI9u3ZjsWp2tC4mQy0/kK4epU8QhkEFPE9uZ0pAMKORzEdp5g==", "requires": { "axios": "^0.27.2", "bottleneck": "^2.19.5", diff --git a/package.json b/package.json index 3f4a0174..ef429f89 100755 --- a/package.json +++ b/package.json @@ -137,7 +137,7 @@ "tunnel": "0.0.6", "ua-parser-js": "^1.0.32", "undici": "^4.13.0", - "unprint": "^0.9.1", + "unprint": "^0.9.3", "url-pattern": "^1.0.3", "v-tooltip": "^2.0.3", "video.js": "^7.11.4", diff --git a/public/img/logos/bang/lazy/bangadventures.png b/public/img/logos/bang/lazy/bangadventures.png index 49fdce8b..61a87dd5 100644 Binary files a/public/img/logos/bang/lazy/bangadventures.png and b/public/img/logos/bang/lazy/bangadventures.png differ diff --git a/public/img/logos/bang/lazy/bangcasting.png b/public/img/logos/bang/lazy/bangcasting.png index c5eba01f..540bf84c 100644 Binary files a/public/img/logos/bang/lazy/bangcasting.png and b/public/img/logos/bang/lazy/bangcasting.png differ diff --git a/public/img/logos/bang/lazy/bangconfessions.png b/public/img/logos/bang/lazy/bangconfessions.png index 9dba7339..b494e8e1 100644 Binary files a/public/img/logos/bang/lazy/bangconfessions.png and b/public/img/logos/bang/lazy/bangconfessions.png differ diff --git a/public/img/logos/bang/lazy/bangfakenews.png b/public/img/logos/bang/lazy/bangfakenews.png index dbd59ed4..fbc8a2fa 100644 Binary files a/public/img/logos/bang/lazy/bangfakenews.png and b/public/img/logos/bang/lazy/bangfakenews.png differ diff --git a/public/img/logos/bang/lazy/bangglamkore.png b/public/img/logos/bang/lazy/bangglamkore.png index 196aab30..ee681ef1 100644 Binary files a/public/img/logos/bang/lazy/bangglamkore.png and b/public/img/logos/bang/lazy/bangglamkore.png differ diff --git a/public/img/logos/bang/lazy/bangjapan.png b/public/img/logos/bang/lazy/bangjapan.png index 074d04d7..7a722049 100644 Binary files a/public/img/logos/bang/lazy/bangjapan.png and b/public/img/logos/bang/lazy/bangjapan.png differ diff --git a/public/img/logos/bang/lazy/bangpodcast.png b/public/img/logos/bang/lazy/bangpodcast.png index bed9b549..d5ec3914 100644 Binary files a/public/img/logos/bang/lazy/bangpodcast.png and b/public/img/logos/bang/lazy/bangpodcast.png differ diff --git a/public/img/logos/bang/lazy/bangrammed.png b/public/img/logos/bang/lazy/bangrammed.png index 15069d11..ab52c537 100644 Binary files a/public/img/logos/bang/lazy/bangrammed.png and b/public/img/logos/bang/lazy/bangrammed.png differ diff --git a/public/img/logos/bang/lazy/bangrealmilfs.png b/public/img/logos/bang/lazy/bangrealmilfs.png index 5d2d7168..1fa33fbb 100644 Binary files a/public/img/logos/bang/lazy/bangrealmilfs.png and b/public/img/logos/bang/lazy/bangrealmilfs.png differ diff --git a/public/img/logos/bang/lazy/bangrealteens.png b/public/img/logos/bang/lazy/bangrealteens.png index 3e8f0479..cb1bef2e 100644 Binary files a/public/img/logos/bang/lazy/bangrealteens.png and b/public/img/logos/bang/lazy/bangrealteens.png differ diff --git a/public/img/logos/bang/lazy/bangroadsidexxx.png b/public/img/logos/bang/lazy/bangroadsidexxx.png index a2eafac6..a04f5b02 100644 Binary files a/public/img/logos/bang/lazy/bangroadsidexxx.png and b/public/img/logos/bang/lazy/bangroadsidexxx.png differ diff --git a/public/img/logos/bang/lazy/bangsurprise.png b/public/img/logos/bang/lazy/bangsurprise.png index 016ca232..9c0104b6 100644 Binary files a/public/img/logos/bang/lazy/bangsurprise.png and b/public/img/logos/bang/lazy/bangsurprise.png differ diff --git a/public/img/logos/bang/lazy/bangtrickery.png b/public/img/logos/bang/lazy/bangtrickery.png index bca0111c..2d232a0f 100644 Binary files a/public/img/logos/bang/lazy/bangtrickery.png and b/public/img/logos/bang/lazy/bangtrickery.png differ diff --git a/public/img/logos/bang/lazy/favicon.png b/public/img/logos/bang/lazy/favicon.png index 72e47d47..cb225e45 100644 Binary files a/public/img/logos/bang/lazy/favicon.png and b/public/img/logos/bang/lazy/favicon.png differ diff --git a/public/img/logos/bang/lazy/favicon_dark.png b/public/img/logos/bang/lazy/favicon_dark.png index 8cc28ba0..4178438c 100644 Binary files a/public/img/logos/bang/lazy/favicon_dark.png and b/public/img/logos/bang/lazy/favicon_dark.png differ diff --git a/public/img/logos/bang/lazy/favicon_light.png b/public/img/logos/bang/lazy/favicon_light.png index 72e47d47..cb225e45 100644 Binary files a/public/img/logos/bang/lazy/favicon_light.png and b/public/img/logos/bang/lazy/favicon_light.png differ diff --git a/public/img/logos/bang/lazy/mystepdaughtersfriend.png b/public/img/logos/bang/lazy/mystepdaughtersfriend.png new file mode 100644 index 00000000..70eb6ebd Binary files /dev/null and b/public/img/logos/bang/lazy/mystepdaughtersfriend.png differ diff --git a/public/img/logos/bang/lazy/network.png b/public/img/logos/bang/lazy/network.png index 73d86794..a13d7c69 100644 Binary files a/public/img/logos/bang/lazy/network.png and b/public/img/logos/bang/lazy/network.png differ diff --git a/public/img/logos/bang/lazy/prettyandraw.png b/public/img/logos/bang/lazy/prettyandraw.png index 9cd2b1e0..91549f81 100644 Binary files a/public/img/logos/bang/lazy/prettyandraw.png and b/public/img/logos/bang/lazy/prettyandraw.png differ diff --git a/public/img/logos/bang/lazy/screwthecops.png b/public/img/logos/bang/lazy/screwthecops.png index c34cfbb3..aa3f3fae 100644 Binary files a/public/img/logos/bang/lazy/screwthecops.png and b/public/img/logos/bang/lazy/screwthecops.png differ diff --git a/public/img/logos/bang/lazy/yngrcom.png b/public/img/logos/bang/lazy/yngrcom.png index eae4dd70..ec4b9ae1 100644 Binary files a/public/img/logos/bang/lazy/yngrcom.png and b/public/img/logos/bang/lazy/yngrcom.png differ diff --git a/public/img/logos/bang/mystepdaughtersfriend.png b/public/img/logos/bang/mystepdaughtersfriend.png new file mode 100644 index 00000000..97df7526 Binary files /dev/null and b/public/img/logos/bang/mystepdaughtersfriend.png differ diff --git a/public/img/logos/bang/thumbs/bangadventures.png b/public/img/logos/bang/thumbs/bangadventures.png index 65c424e7..1551b884 100644 Binary files a/public/img/logos/bang/thumbs/bangadventures.png and b/public/img/logos/bang/thumbs/bangadventures.png differ diff --git a/public/img/logos/bang/thumbs/bangcasting.png b/public/img/logos/bang/thumbs/bangcasting.png index 48325cce..d35a7c29 100644 Binary files a/public/img/logos/bang/thumbs/bangcasting.png and b/public/img/logos/bang/thumbs/bangcasting.png differ diff --git a/public/img/logos/bang/thumbs/bangconfessions.png b/public/img/logos/bang/thumbs/bangconfessions.png index 202b01be..581d9e80 100644 Binary files a/public/img/logos/bang/thumbs/bangconfessions.png and b/public/img/logos/bang/thumbs/bangconfessions.png differ diff --git a/public/img/logos/bang/thumbs/bangfakenews.png b/public/img/logos/bang/thumbs/bangfakenews.png index 6529ac3b..09627339 100644 Binary files a/public/img/logos/bang/thumbs/bangfakenews.png and b/public/img/logos/bang/thumbs/bangfakenews.png differ diff --git a/public/img/logos/bang/thumbs/bangglamkore.png b/public/img/logos/bang/thumbs/bangglamkore.png index f30abb1f..034ff95b 100644 Binary files a/public/img/logos/bang/thumbs/bangglamkore.png and b/public/img/logos/bang/thumbs/bangglamkore.png differ diff --git a/public/img/logos/bang/thumbs/bangjapan.png b/public/img/logos/bang/thumbs/bangjapan.png index c95b9fea..2d0e0b75 100644 Binary files a/public/img/logos/bang/thumbs/bangjapan.png and b/public/img/logos/bang/thumbs/bangjapan.png differ diff --git a/public/img/logos/bang/thumbs/bangpodcast.png b/public/img/logos/bang/thumbs/bangpodcast.png index 7612a00b..1411b184 100644 Binary files a/public/img/logos/bang/thumbs/bangpodcast.png and b/public/img/logos/bang/thumbs/bangpodcast.png differ diff --git a/public/img/logos/bang/thumbs/bangrammed.png b/public/img/logos/bang/thumbs/bangrammed.png index 842f0c3d..cb142976 100644 Binary files a/public/img/logos/bang/thumbs/bangrammed.png and b/public/img/logos/bang/thumbs/bangrammed.png differ diff --git a/public/img/logos/bang/thumbs/bangrealmilfs.png b/public/img/logos/bang/thumbs/bangrealmilfs.png index 1cd6c9b3..761c2a41 100644 Binary files a/public/img/logos/bang/thumbs/bangrealmilfs.png and b/public/img/logos/bang/thumbs/bangrealmilfs.png differ diff --git a/public/img/logos/bang/thumbs/bangrealteens.png b/public/img/logos/bang/thumbs/bangrealteens.png index 770c8c06..8a97b09a 100644 Binary files a/public/img/logos/bang/thumbs/bangrealteens.png and b/public/img/logos/bang/thumbs/bangrealteens.png differ diff --git a/public/img/logos/bang/thumbs/bangroadsidexxx.png b/public/img/logos/bang/thumbs/bangroadsidexxx.png index b36351d6..acb93a9e 100644 Binary files a/public/img/logos/bang/thumbs/bangroadsidexxx.png and b/public/img/logos/bang/thumbs/bangroadsidexxx.png differ diff --git a/public/img/logos/bang/thumbs/bangsurprise.png b/public/img/logos/bang/thumbs/bangsurprise.png index a5f1c828..a333e19c 100644 Binary files a/public/img/logos/bang/thumbs/bangsurprise.png and b/public/img/logos/bang/thumbs/bangsurprise.png differ diff --git a/public/img/logos/bang/thumbs/bangtrickery.png b/public/img/logos/bang/thumbs/bangtrickery.png index ea4d8f3e..9855f34c 100644 Binary files a/public/img/logos/bang/thumbs/bangtrickery.png and b/public/img/logos/bang/thumbs/bangtrickery.png differ diff --git a/public/img/logos/bang/thumbs/favicon.png b/public/img/logos/bang/thumbs/favicon.png index 72e47d47..cb225e45 100644 Binary files a/public/img/logos/bang/thumbs/favicon.png and b/public/img/logos/bang/thumbs/favicon.png differ diff --git a/public/img/logos/bang/thumbs/favicon_dark.png b/public/img/logos/bang/thumbs/favicon_dark.png index 8cc28ba0..4178438c 100644 Binary files a/public/img/logos/bang/thumbs/favicon_dark.png and b/public/img/logos/bang/thumbs/favicon_dark.png differ diff --git a/public/img/logos/bang/thumbs/favicon_light.png b/public/img/logos/bang/thumbs/favicon_light.png index 72e47d47..cb225e45 100644 Binary files a/public/img/logos/bang/thumbs/favicon_light.png and b/public/img/logos/bang/thumbs/favicon_light.png differ diff --git a/public/img/logos/bang/thumbs/mystepdaughtersfriend.png b/public/img/logos/bang/thumbs/mystepdaughtersfriend.png new file mode 100644 index 00000000..365b23cc Binary files /dev/null and b/public/img/logos/bang/thumbs/mystepdaughtersfriend.png differ diff --git a/public/img/logos/bang/thumbs/network.png b/public/img/logos/bang/thumbs/network.png index e47c0253..abea762f 100644 Binary files a/public/img/logos/bang/thumbs/network.png and b/public/img/logos/bang/thumbs/network.png differ diff --git a/public/img/logos/bang/thumbs/prettyandraw.png b/public/img/logos/bang/thumbs/prettyandraw.png index 7d6d0788..521c12fb 100644 Binary files a/public/img/logos/bang/thumbs/prettyandraw.png and b/public/img/logos/bang/thumbs/prettyandraw.png differ diff --git a/public/img/logos/bang/thumbs/screwthecops.png b/public/img/logos/bang/thumbs/screwthecops.png index d1f31740..387c76f4 100644 Binary files a/public/img/logos/bang/thumbs/screwthecops.png and b/public/img/logos/bang/thumbs/screwthecops.png differ diff --git a/public/img/logos/bang/thumbs/yngrcom.png b/public/img/logos/bang/thumbs/yngrcom.png index eea61ab1..408e5d25 100644 Binary files a/public/img/logos/bang/thumbs/yngrcom.png and b/public/img/logos/bang/thumbs/yngrcom.png differ diff --git a/seeds/02_sites.js b/seeds/02_sites.js index ae5b4462..df542cdc 100755 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -1020,6 +1020,13 @@ const sites = [ parameters: { siteId: 6305 }, parent: 'bang', }, + { + name: 'My Stepdaughter\'s Friend', + slug: 'mystepdaughtersfriend', + url: 'https://www.bang.com/videos?in=My%20Stepdaughter%27s%20Friend', + parameters: { siteId: 7072 }, + parent: 'bang', + }, // BANGBROS { name: 'Ass Parade', diff --git a/src/scrapers/bang.js b/src/scrapers/bang.js index e4078d78..2248e685 100755 --- a/src/scrapers/bang.js +++ b/src/scrapers/bang.js @@ -51,13 +51,15 @@ function scrapeAll(scenes, entity) { return scenes.map(({ query }) => { const release = {}; - release.url = query.url('.video_preview_container > a', { origin: entity.url }); - release.entryId = query.attribute(null, 'data-video-id') || decodeId(new URL(release.url).pathname.match(/\/video\/([\w-]+)\//)?.[1]); + release.url = query.url('a', { origin: entity.url }); + release.entryId = query.dataset('a', 'videopreview-id-value') || decodeId(new URL(release.url).pathname.match(/\/video\/([\w-]+)\//)?.[1]); - release.title = query.content('.video_preview_container >a > span.block'); - release.date = query.date('.videoInfo .statistics span', 'MMM DD, YYYY'); + release.title = query.content('a > span.block'); + release.date = query.date('a + div', 'MMM DD, YYYY'); - release.actors = query.elements('.videoInfo a[href*="/pornstar"]').map((el) => ({ + release.duration = query.duration('[data-videopreview-target="duration"]', { attribute: 'data-content' }); + + release.actors = query.elements('a + div a[href*="/pornstar"]').map((el) => ({ name: unprint.query.content(el), url: unprint.query.url(el, null, { origin: 'https://www.bang.com' }), })); @@ -72,7 +74,16 @@ function scrapeAll(scenes, entity) { ]; } - release.teaser = query.video(); + const videoData = query.json('a', { attribute: 'data-videopreview-sources-value' }); + + if (videoData) { + release.teaser = [ + videoData.mp4_large, + videoData.webm_large, + videoData.mp4, + videoData.webm, + ]; + } return release; }); @@ -80,21 +91,21 @@ function scrapeAll(scenes, entity) { async function scrapeScene({ query }, { url, entity }) { const release = {}; - const data = query.json('script[type="application/ld+json"]'); + const data = query.json('//script[contains(text(), "VideoObject")]'); release.entryId = data?.['@id'] || decodeId(new URL(url).pathname.match(/\/video\/([\w-]+)\//)?.[1]); - release.title = data?.name || query.content('.video-heading'); - release.description = data?.description || query.content('.expanded p.clear-both'); + release.title = data?.name || query.content('.video-container + div h1'); + release.description = data?.description || query.content('//div[contains(@class, "actions")]/preceding-sibling::p'); release.date = unprint.extractDate(data?.datePublished, 'YYYY-MM-DD') || query.date('//p[contains(text(), "Date:")]', 'MMM DD, YYYY'); release.duration = unprint.extractTimestamp(data?.duration) || query.duration('//p[contains(text(), "Playtime:")]//span'); - if (data?.actors) { + if (data?.actor) { release.actors = data.actor.map((actor) => ({ name: actor.name, url: actor.url, - avatar: getAvatarFallback(query.img(`.video-actors img[alt="${actor.name}"]`)), + avatar: getAvatarFallback(query.img(`a[href*="/pornstar"] img[alt="${actor.name}"]`)), })); } else { release.actors = query.elements('//div[contains(@class, "video-actors")]//a[img|picture]').map((element) => ({ @@ -104,27 +115,35 @@ async function scrapeScene({ query }, { url, entity }) { })); } - release.tags = query.contents('.expanded .genres'); + release.tags = query.contents('.actions .genres'); - release.poster = data?.thumbnailUrl || data?.contentUrl || query.attribute('meta[name*="og:image"]', 'content'); - release.teaser = query.video('video[data-videocontainer-target] source'); + const videoData = query.json('.video-container [data-videopreview-sources-value]', { attribute: 'data-videopreview-sources-value' }); - release.photos = JSON.parse(query.attribute('[data-video-gallery-photos-value]', 'data-video-gallery-photos-value')); - release.photoCount = query.number('[data-video-gallery-count-value]', { attribute: 'data-video-gallery-count-value' }); + release.poster = data?.thumbnailUrl || query.attribute('meta[property="og:image"]', 'content'); + release.teaser = (videoData && [ + videoData.mp4_large, + videoData.webm_large, + videoData.mp4, + videoData.webm, + ]) + || data?.contentUrl + || query.attribute('meta[property="og:video"]') + || query.video('video[data-videocontainer-target] source'); - const channelName = query.content('.expanded a[href*="?in="]')?.trim(); + release.photos = query.sourceSets('.photo-set img'); + release.photoCount = query.number('//h2[contains(text(), "Photos")]/following-sibling::span'); + + const channelName = query.content('.video-container + div a[href*="?in="]')?.trim(); if (channelName) { release.channel = entity.children?.find((channel) => new RegExp(channel.name, 'i').test(channelName) || slugify(channelName) === channel.slug)?.slug; } - console.log(release); - return release; } async function fetchActorScenes(element, url, entity, page = 1, acc = []) { - const scenes = scrapeAll(unprint.initAll(element, '.search-grid li'), entity); + const scenes = scrapeAll(unprint.initAll(element, '.video_container'), entity); if (scenes.length) { const nextPageRes = await unprint.post(url, { page: page + 1 }); @@ -141,7 +160,7 @@ async function scrapeProfile({ query, element }, url, entity, include) { const profile = { url }; profile.dateOfBirth = query.date('//text()[contains(., "Born")]/following-sibling::span[contains(@class, "font-bold")][1]', 'MMMM D, YYYY'); - profile.birthPlace = query.content('//text()[contains(., "in")]/following-sibling::span[contains(@class, "font-bold")][1]'); + profile.birthPlace = query.content('//text()[contains(., "From")]/following-sibling::span[contains(@class, "font-bold")][1]'); profile.ethnicity = query.content('//text()[contains(., "Ethnicity")]/following-sibling::span[contains(@class, "font-bold")][1]'); @@ -158,8 +177,8 @@ async function scrapeProfile({ query, element }, url, entity, include) { } async function fetchLatest(channel, page = 1) { - const url = `${channel.url}&page=${page}`; - const res = await unprint.get(url, { selectAll: '.search-grid li' }); + const url = `${channel.url}&by=date.desc&page=${page}`; + const res = await unprint.get(url, { selectAll: '.video_container' }); if (res.ok) { return scrapeAll(res.context, channel); @@ -168,8 +187,8 @@ async function fetchLatest(channel, page = 1) { return res.status; } async function fetchUpcoming(channel) { - const url = `${channel.url}&early-access=true`; - const res = await unprint.get(url, { selectAll: '.search-grid li' }); + const url = `${channel.url}&by=date.desc&early-access=true`; + const res = await unprint.get(url, { selectAll: '.video_container' }); if (res.ok) { return scrapeAll(res.context, channel); diff --git a/src/scrapers/newsensations.js b/src/scrapers/newsensations.js index 0f84cfcd..f57de429 100755 --- a/src/scrapers/newsensations.js +++ b/src/scrapers/newsensations.js @@ -76,6 +76,8 @@ function scrapeSceneBlock({ query }) { release.poster = query.img('#trailer_thumb img[src*=content]'); release.trailer = query.video('#trailerVideo source'); + release.photoCount = query.number('.sceneDateP', { match: /(\d+)\s+(photo|pic)/i, matchIndex: 1 }); + return release; }