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 [];