diff --git a/config/default.js b/config/default.js index 7d8f0309..8ac6e8d5 100644 --- a/config/default.js +++ b/config/default.js @@ -168,7 +168,7 @@ module.exports = { path: './media', thumbnailSize: 320, // width for 16:9 will be exactly 576px thumbnailQuality: 100, - videoQuality: [480, 360, 320, 540, 720, 1080, 2160, 240, 180], + videoQuality: [480, 360, 320, 540, 720, 1080, 2160, 270, 240, 180], limit: 25, // max number of photos per release }, titleSlugLength: 50, diff --git a/public/img/logos/fantasymassage/fantasymassage.png b/public/img/logos/fantasymassage/fantasymassage.png index 4df019c7..0e187598 100644 Binary files a/public/img/logos/fantasymassage/fantasymassage.png and b/public/img/logos/fantasymassage/fantasymassage.png differ diff --git a/public/img/logos/fantasymassage/misc/fantasy-massage.png b/public/img/logos/fantasymassage/misc/fantasy-massage.png new file mode 100644 index 00000000..4df019c7 Binary files /dev/null and b/public/img/logos/fantasymassage/misc/fantasy-massage.png differ diff --git a/public/img/logos/fantasymassage/network.png b/public/img/logos/fantasymassage/network.png index 4df019c7..f91ea9f1 100644 Binary files a/public/img/logos/fantasymassage/network.png and b/public/img/logos/fantasymassage/network.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/favicon.png b/public/img/logos/jesseloadsmonsterfacials/favicon.png new file mode 100644 index 00000000..9a69374d Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/favicon.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/jesseloadsmonsterfacials.png b/public/img/logos/jesseloadsmonsterfacials/jesseloadsmonsterfacials.png new file mode 100644 index 00000000..082f752d Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/jesseloadsmonsterfacials.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/misc/favicon_face.png b/public/img/logos/jesseloadsmonsterfacials/misc/favicon_face.png new file mode 100644 index 00000000..0232c665 Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/misc/favicon_face.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials.png b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials.png new file mode 100644 index 00000000..bf00a68e Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials.xcf b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials.xcf new file mode 100644 index 00000000..f24449b2 Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials.xcf differ diff --git a/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_ogirl.png b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_ogirl.png new file mode 100644 index 00000000..7b105b99 Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_ogirl.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_text.png b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_text.png new file mode 100644 index 00000000..36aeb524 Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_text.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_text_border.png b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_text_border.png new file mode 100644 index 00000000..50d8ec15 Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/misc/jesse-loads-monster-facials_text_border.png differ diff --git a/public/img/logos/jesseloadsmonsterfacials/network.png b/public/img/logos/jesseloadsmonsterfacials/network.png new file mode 100644 index 00000000..082f752d Binary files /dev/null and b/public/img/logos/jesseloadsmonsterfacials/network.png differ diff --git a/public/img/logos/mrstrokesxxx/mrstrokesxxx.png b/public/img/logos/mrstrokesxxx/mrstrokesxxx.png new file mode 100644 index 00000000..ecb6fdb9 Binary files /dev/null and b/public/img/logos/mrstrokesxxx/mrstrokesxxx.png differ diff --git a/public/img/logos/mrstrokesxxx/mrstrokesxxx_clean.png b/public/img/logos/mrstrokesxxx/mrstrokesxxx_clean.png new file mode 100644 index 00000000..c8809de4 Binary files /dev/null and b/public/img/logos/mrstrokesxxx/mrstrokesxxx_clean.png differ diff --git a/public/img/logos/mrstrokesxxx/mrstrokesxxx_noglow.png b/public/img/logos/mrstrokesxxx/mrstrokesxxx_noglow.png new file mode 100644 index 00000000..7811456b Binary files /dev/null and b/public/img/logos/mrstrokesxxx/mrstrokesxxx_noglow.png differ diff --git a/public/img/logos/onlyfans/misc/only-fans.png b/public/img/logos/onlyfans/misc/only-fans.png new file mode 100644 index 00000000..4e2b8808 Binary files /dev/null and b/public/img/logos/onlyfans/misc/only-fans.png differ diff --git a/public/img/logos/onlyfans/misc/only-fans.svg b/public/img/logos/onlyfans/misc/only-fans.svg new file mode 100644 index 00000000..ffc8055d --- /dev/null +++ b/public/img/logos/onlyfans/misc/only-fans.svg @@ -0,0 +1,82 @@ + + diff --git a/public/img/logos/onlyfans/misc/only-fans_light.png b/public/img/logos/onlyfans/misc/only-fans_light.png new file mode 100644 index 00000000..57631c80 Binary files /dev/null and b/public/img/logos/onlyfans/misc/only-fans_light.png differ diff --git a/public/img/logos/onlyfans/misc/only-fans_light.svg b/public/img/logos/onlyfans/misc/only-fans_light.svg new file mode 100644 index 00000000..77d62862 --- /dev/null +++ b/public/img/logos/onlyfans/misc/only-fans_light.svg @@ -0,0 +1,85 @@ + + diff --git a/public/img/logos/onlyfans/onlyfans.png b/public/img/logos/onlyfans/onlyfans.png new file mode 100644 index 00000000..0ac243ad Binary files /dev/null and b/public/img/logos/onlyfans/onlyfans.png differ diff --git a/public/img/logos/pervcity/misc/perv-city_tld.png b/public/img/logos/pervcity/misc/perv-city_tld.png new file mode 100644 index 00000000..d26e9195 Binary files /dev/null and b/public/img/logos/pervcity/misc/perv-city_tld.png differ diff --git a/public/img/logos/pervcity/network.png b/public/img/logos/pervcity/network.png index d26e9195..5674a5a1 100644 Binary files a/public/img/logos/pervcity/network.png and b/public/img/logos/pervcity/network.png differ diff --git a/seeds/01_networks.js b/seeds/01_networks.js index 2372321f..906a6715 100644 --- a/seeds/01_networks.js +++ b/seeds/01_networks.js @@ -237,6 +237,11 @@ const networks = [ url: 'http://jayrockcontent.com', parent: 'gamma', }, + { + slug: 'jesseloadsmonsterfacials', + name: 'Jesse Loads Monster Facials', + url: 'http://www.jesseloadsmonsterfacials.com', + }, { slug: 'julesjordan', name: 'Jules Jordan', diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 8cdb4cd1..fe2c1f59 100644 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -2597,6 +2597,17 @@ const sites = [ photos: false, }, }, + // JESSE LOADS MONSTER FACIALS + { + slug: 'jesseloadsmonsterfacials', + name: 'Jesse Loads Monster Facials', + url: 'http://www.jesseloadsmonsterfacials.com', + network: 'jesseloadsmonsterfacials', + tags: ['facial', 'blowjob'], + parameters: { + independent: true, + }, + }, // JULES JORDAN { slug: 'julesjordan', diff --git a/src/scrapers/jesseloadsmonsterfacials.js b/src/scrapers/jesseloadsmonsterfacials.js new file mode 100644 index 00000000..622f9df1 --- /dev/null +++ b/src/scrapers/jesseloadsmonsterfacials.js @@ -0,0 +1,85 @@ +'use strict'; + +const { get, initAll } = require('../utils/qu'); + +function scrapeLatest(scenes, dates, site) { + return scenes.map(({ qu }, index) => { + const release = {}; + + const path = qu.url('a'); + release.url = `${site.url}/visitors/${path}`; + release.entryId = path.match(/videos\/([a-zA-Z0-9]+)(?:_hd)?_trailer/)?.[1]; + + if (dates && dates[index]) { + release.date = dates[index].qu.date(null, 'MM/DD/YYYY'); + } + + release.description = qu.q('tbody tr:nth-child(3) font', true); + + const infoLine = qu.q('font[color="#663366"]', true); + if (infoLine) release.duration = Number(infoLine.match(/(\d+) min/)[1]) * 60; + + const poster = qu.img('img[src*="photos/"][width="400"]'); + release.poster = `${site.url}/visitors/${poster}`; + release.photos = qu.imgs('img[src*="photos/"]:not([width="400"])').map(source => `${site.url}/visitors/${source}`); + + return release; + }); +} + +function scrapeScene({ qu }, url, site) { + const release = { url }; + + const { pathname } = new URL(url); + release.entryId = pathname.match(/videos\/(\w+)_hd_trailer/)[1]; + + const actor = qu.q('font[color="#990033"] strong', true); + release.actors = [actor]; + + const hdTrailer = qu.url('a[href*="hd_trailer.mp4"]'); + const sdTrailer = qu.url('a[href*="hd_trailer_mobile.mp4"]'); + + release.trailer = [ + { + src: `${site.url}/visitors/videos/${hdTrailer}`, + quality: 1080, + }, + { + src: `${site.url}/visitors/videos/${sdTrailer}`, + quality: 270, + }, + ]; + + return release; +} + +async function fetchLatest(site, page = 1) { + const url = `https://jesseloadsmonsterfacials.com/visitors/tour_${page.toString().padStart(2, '0')}.html`; + const res = await get(url); + + if (!res.ok) { + return res.status; + } + + const { el } = res.item; + + const scenes = initAll(el, 'table[width="880"]'); + const dates = initAll(el, 'font[color="#000000"] strong:not(:empty)'); + + return scrapeLatest(scenes, dates, site); +} + +async function fetchScene(url, site) { + const res = await get(url); + + if (res.ok) { + return scrapeScene(res.item, url, site); + } + + return res.status; +} + +module.exports = { + fetchLatest, + fetchScene, +}; diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index f6f28819..1f00daac 100644 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -25,6 +25,7 @@ const hush = require('./hush'); const iconmale = require('./iconmale'); const insex = require('./insex'); const jayrock = require('./jayrock'); +const jesseloadsmonsterfacials = require('./jesseloadsmonsterfacials'); const julesjordan = require('./julesjordan'); const kellymadison = require('./kellymadison'); const kink = require('./kink'); @@ -96,6 +97,7 @@ module.exports = { insex, interracialpass: hush, jayrock, + jesseloadsmonsterfacials, julesjordan, kellymadison, kink, diff --git a/src/store-releases.js b/src/store-releases.js index 39fbc63c..4d11c74d 100644 --- a/src/store-releases.js +++ b/src/store-releases.js @@ -158,7 +158,7 @@ async function updateReleasesSearch(releaseIds) { releases.id AS release_id, TO_TSVECTOR( 'traxxx', - releases.title || ' ' || + COALESCE(releases.title, '') || ' ' || networks.name || ' ' || networks.slug || ' ' || networks.url || ' ' || diff --git a/src/updates.js b/src/updates.js index 0f383f83..289d8590 100644 --- a/src/updates.js +++ b/src/updates.js @@ -111,7 +111,7 @@ async function scrapeReleases(scraper, site, preData, upcoming = false) { return pageAccReleases; }; - const rawReleases = await scrapePage(1, []); + const rawReleases = await scrapePage(argv.page || 1, []); const releases = upcoming ? rawReleases.map(rawRelease => ({ ...rawRelease, upcoming: true })) : rawReleases; @@ -135,7 +135,7 @@ async function scrapeLatestReleases(scraper, site, preData) { try { return await scrapeReleases(scraper, site, preData, false); } catch (error) { - logger.warn(`Failed to scrape latest updates for '${site.slug}' (${site.network.slug})`); + logger.warn(`Failed to scrape latest updates for '${site.slug}' (${site.network.slug}): ${error.message}`); } return []; @@ -149,7 +149,7 @@ async function scrapeUpcomingReleases(scraper, site, preData) { try { return await scrapeReleases(scraper, site, preData, true); } catch (error) { - logger.warn(`Failed to scrape upcoming updates for '${site.slug}' (${site.network.slug})`); + logger.warn(`Failed to scrape upcoming updates for '${site.slug}' (${site.network.slug}): ${error.message}`); } return [];