diff --git a/config/default.js b/config/default.js
index 2432aa98..3b1ac7ac 100644
--- a/config/default.js
+++ b/config/default.js
@@ -79,6 +79,11 @@ module.exports = {
'pornmegaload',
'scorelandtv',
'scoretv',
+ // spizoo
+ 'intimatelesbians',
+ 'porngoespro',
+ 'pornstartease',
+ 'thestripperexperience',
// teenscoreclub
'maiko',
'ncuksinners',
diff --git a/public/img/logos/spizoo/favicon.png b/public/img/logos/spizoo/favicon.png
new file mode 100644
index 00000000..0e560482
Binary files /dev/null and b/public/img/logos/spizoo/favicon.png differ
diff --git a/public/img/logos/spizoo/favicon_dark.png b/public/img/logos/spizoo/favicon_dark.png
new file mode 100644
index 00000000..7027ac73
Binary files /dev/null and b/public/img/logos/spizoo/favicon_dark.png differ
diff --git a/public/img/logos/spizoo/favicon_light.png b/public/img/logos/spizoo/favicon_light.png
new file mode 100644
index 00000000..5127e5e7
Binary files /dev/null and b/public/img/logos/spizoo/favicon_light.png differ
diff --git a/public/img/logos/spizoo/intimatelesbians.png b/public/img/logos/spizoo/intimatelesbians.png
new file mode 100644
index 00000000..1ee11092
Binary files /dev/null and b/public/img/logos/spizoo/intimatelesbians.png differ
diff --git a/public/img/logos/spizoo/lazy/intimatelesbians.png b/public/img/logos/spizoo/lazy/intimatelesbians.png
new file mode 100644
index 00000000..922cba37
Binary files /dev/null and b/public/img/logos/spizoo/lazy/intimatelesbians.png differ
diff --git a/public/img/logos/spizoo/lazy/network.png b/public/img/logos/spizoo/lazy/network.png
new file mode 100644
index 00000000..c2387926
Binary files /dev/null and b/public/img/logos/spizoo/lazy/network.png differ
diff --git a/public/img/logos/spizoo/lazy/porngoespro.png b/public/img/logos/spizoo/lazy/porngoespro.png
new file mode 100644
index 00000000..8c6881ee
Binary files /dev/null and b/public/img/logos/spizoo/lazy/porngoespro.png differ
diff --git a/public/img/logos/spizoo/lazy/pornstartease.png b/public/img/logos/spizoo/lazy/pornstartease.png
new file mode 100644
index 00000000..843f3b4f
Binary files /dev/null and b/public/img/logos/spizoo/lazy/pornstartease.png differ
diff --git a/public/img/logos/spizoo/lazy/spizoo.png b/public/img/logos/spizoo/lazy/spizoo.png
new file mode 100644
index 00000000..9aad791b
Binary files /dev/null and b/public/img/logos/spizoo/lazy/spizoo.png differ
diff --git a/public/img/logos/spizoo/lazy/thestripperexperience.png b/public/img/logos/spizoo/lazy/thestripperexperience.png
new file mode 100644
index 00000000..1bc39412
Binary files /dev/null and b/public/img/logos/spizoo/lazy/thestripperexperience.png differ
diff --git a/public/img/logos/spizoo/misc/intimate_lesbians.svg b/public/img/logos/spizoo/misc/intimate_lesbians.svg
new file mode 100644
index 00000000..6ef907db
--- /dev/null
+++ b/public/img/logos/spizoo/misc/intimate_lesbians.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logos/spizoo/misc/porn_goes_pro.svg b/public/img/logos/spizoo/misc/porn_goes_pro.svg
new file mode 100644
index 00000000..42d08c32
--- /dev/null
+++ b/public/img/logos/spizoo/misc/porn_goes_pro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logos/spizoo/misc/porn_star_tease.svg b/public/img/logos/spizoo/misc/porn_star_tease.svg
new file mode 100644
index 00000000..5a45b0de
--- /dev/null
+++ b/public/img/logos/spizoo/misc/porn_star_tease.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logos/spizoo/misc/spizoo.svg b/public/img/logos/spizoo/misc/spizoo.svg
new file mode 100644
index 00000000..46f792eb
--- /dev/null
+++ b/public/img/logos/spizoo/misc/spizoo.svg
@@ -0,0 +1,16 @@
+
+
+
diff --git a/public/img/logos/spizoo/misc/spizoo_dark.png b/public/img/logos/spizoo/misc/spizoo_dark.png
new file mode 100644
index 00000000..4e72533b
Binary files /dev/null and b/public/img/logos/spizoo/misc/spizoo_dark.png differ
diff --git a/public/img/logos/spizoo/misc/spizoo_light.png b/public/img/logos/spizoo/misc/spizoo_light.png
new file mode 100644
index 00000000..03b24599
Binary files /dev/null and b/public/img/logos/spizoo/misc/spizoo_light.png differ
diff --git a/public/img/logos/spizoo/misc/the_stripper_experience.svg b/public/img/logos/spizoo/misc/the_stripper_experience.svg
new file mode 100644
index 00000000..01b18a3c
--- /dev/null
+++ b/public/img/logos/spizoo/misc/the_stripper_experience.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/img/logos/spizoo/network.png b/public/img/logos/spizoo/network.png
new file mode 100644
index 00000000..711d2de5
Binary files /dev/null and b/public/img/logos/spizoo/network.png differ
diff --git a/public/img/logos/spizoo/porngoespro.png b/public/img/logos/spizoo/porngoespro.png
new file mode 100644
index 00000000..c5ad9f5d
Binary files /dev/null and b/public/img/logos/spizoo/porngoespro.png differ
diff --git a/public/img/logos/spizoo/pornstartease.png b/public/img/logos/spizoo/pornstartease.png
new file mode 100644
index 00000000..0e1647c1
Binary files /dev/null and b/public/img/logos/spizoo/pornstartease.png differ
diff --git a/public/img/logos/spizoo/spizoo.png b/public/img/logos/spizoo/spizoo.png
new file mode 100644
index 00000000..71e2c1d1
Binary files /dev/null and b/public/img/logos/spizoo/spizoo.png differ
diff --git a/public/img/logos/spizoo/thestripperexperience.png b/public/img/logos/spizoo/thestripperexperience.png
new file mode 100644
index 00000000..f810e47b
Binary files /dev/null and b/public/img/logos/spizoo/thestripperexperience.png differ
diff --git a/public/img/logos/spizoo/thumbs/intimatelesbians.png b/public/img/logos/spizoo/thumbs/intimatelesbians.png
new file mode 100644
index 00000000..f1100dd7
Binary files /dev/null and b/public/img/logos/spizoo/thumbs/intimatelesbians.png differ
diff --git a/public/img/logos/spizoo/thumbs/network.png b/public/img/logos/spizoo/thumbs/network.png
new file mode 100644
index 00000000..02c4fdf2
Binary files /dev/null and b/public/img/logos/spizoo/thumbs/network.png differ
diff --git a/public/img/logos/spizoo/thumbs/porngoespro.png b/public/img/logos/spizoo/thumbs/porngoespro.png
new file mode 100644
index 00000000..cbb51739
Binary files /dev/null and b/public/img/logos/spizoo/thumbs/porngoespro.png differ
diff --git a/public/img/logos/spizoo/thumbs/pornstartease.png b/public/img/logos/spizoo/thumbs/pornstartease.png
new file mode 100644
index 00000000..5ab80c8b
Binary files /dev/null and b/public/img/logos/spizoo/thumbs/pornstartease.png differ
diff --git a/public/img/logos/spizoo/thumbs/spizoo.png b/public/img/logos/spizoo/thumbs/spizoo.png
new file mode 100644
index 00000000..c40a304b
Binary files /dev/null and b/public/img/logos/spizoo/thumbs/spizoo.png differ
diff --git a/public/img/logos/spizoo/thumbs/thestripperexperience.png b/public/img/logos/spizoo/thumbs/thestripperexperience.png
new file mode 100644
index 00000000..8ce25113
Binary files /dev/null and b/public/img/logos/spizoo/thumbs/thestripperexperience.png differ
diff --git a/seeds/00_tags.js b/seeds/00_tags.js
index 1f36294b..2b3c65dd 100644
--- a/seeds/00_tags.js
+++ b/seeds/00_tags.js
@@ -907,6 +907,10 @@ const tags = [
name: 'strap-on dildo',
slug: 'strap-on-dildo',
},
+ {
+ name: 'stripper',
+ slug: 'stripper',
+ },
{
name: 'suspension',
slug: 'suspension',
diff --git a/seeds/01_networks.js b/seeds/01_networks.js
index 0aeef502..25723547 100644
--- a/seeds/01_networks.js
+++ b/seeds/01_networks.js
@@ -519,6 +519,11 @@ const networks = [
url: 'https://www.sexyhub.com',
parent: 'mindgeek',
},
+ {
+ slug: 'spizoo',
+ name: 'Spizoo',
+ url: 'http://www.spizoo.com',
+ },
{
slug: 'teamskeet',
name: 'Team Skeet',
diff --git a/seeds/02_sites.js b/seeds/02_sites.js
index fda5cf0f..e908b240 100644
--- a/seeds/02_sites.js
+++ b/seeds/02_sites.js
@@ -8239,6 +8239,40 @@ const sites = [
tags: ['lesbian'],
parent: 'sexyhub',
},
+ // SPIZOO
+ {
+ slug: 'spizoo',
+ name: 'Spizoo',
+ url: 'https://www.spizoo.com',
+ parent: 'spizoo',
+ },
+ {
+ slug: 'thestripperexperience',
+ name: 'The Stripper Experience',
+ url: 'https://www.spizoo.com/categories/stripper.html',
+ tags: ['stripper'],
+ parent: 'spizoo',
+ },
+ {
+ slug: 'intimatelesbians',
+ name: 'Intimate Lesbians',
+ url: 'https://www.spizoo.com/categories/lesbian.html',
+ tags: ['lesbian'],
+ parent: 'spizoo',
+ },
+ {
+ slug: 'porngoespro',
+ name: 'Porn Goes Pro',
+ url: 'https://www.spizoo.com/categories/porngoespro.html',
+ parent: 'spizoo',
+ },
+ {
+ slug: 'pornstartease',
+ name: 'Porn Star Tease',
+ url: 'https://www.spizoo.com/categories/solo.html',
+ tags: ['solo'],
+ parent: 'spizoo',
+ },
// TEAM SKEET
{
slug: 'exxxtrasmall',
diff --git a/src/actors.js b/src/actors.js
index 8459b9dd..021d7b8c 100644
--- a/src/actors.js
+++ b/src/actors.js
@@ -37,6 +37,7 @@ const hairColors = {
'jet-black': 'black',
'red-head': 'red',
'soft-black': 'black',
+ 'brunette/raven': 'brown',
black: 'black',
blonde: 'blonde',
blondie: 'blonde',
diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js
index 1761f32a..cac0741f 100644
--- a/src/scrapers/scrapers.js
+++ b/src/scrapers/scrapers.js
@@ -51,6 +51,7 @@ const pierrewoodman = require('./pierrewoodman');
const pinkyxxx = require('./pinkyxxx');
const privateNetwork = require('./private'); // reserved keyword
const score = require('./score');
+const spizoo = require('./spizoo');
const teamskeet = require('./teamskeet');
const teencoreclub = require('./teencoreclub');
const topwebmodels = require('./topwebmodels');
@@ -134,6 +135,7 @@ const scrapers = {
private: privateNetwork,
score,
sexyhub: mindgeek,
+ spizoo,
swallowsalon: julesjordan,
teencoreclub,
teamskeet,
@@ -256,6 +258,7 @@ const scrapers = {
sexyhub: mindgeek,
silverstonedvd: famedigital,
silviasaint: famedigital,
+ spizoo,
swallowed: mikeadriano,
teamskeet,
teencoreclub,
diff --git a/src/scrapers/spizoo.js b/src/scrapers/spizoo.js
new file mode 100644
index 00000000..684aa432
--- /dev/null
+++ b/src/scrapers/spizoo.js
@@ -0,0 +1,165 @@
+'use strict';
+
+const qu = require('../utils/qu');
+const slugify = require('../utils/slugify');
+
+function getEntryId(url) {
+ return slugify(new URL(url).pathname.match(/\/updates\/(.*)\.html/)?.[1], '-');
+}
+
+function scrapeAll(scenes) {
+ return scenes.map(({ query }) => {
+ const release = {};
+
+ release.url = query.url('a');
+ release.entryId = getEntryId(release.url);
+
+ release.title = query.cnt('.title-label a');
+ release.actors = query.all('.update_models a').map(el => ({
+ name: query.cnt(el),
+ url: query.url(el, null),
+ }));
+
+ release.poster = query.img('a img');
+
+ return release;
+ });
+}
+
+function scrapeScene({ query }, url) {
+ const release = {};
+
+ release.entryId = getEntryId(url);
+ release.title = query.cnt('#media-holder .title');
+
+ release.date = query.date('#sceneInfo .date', 'YYYY-MM-DD');
+ release.duration = query.duration('#sceneInfo .data-others', /\d+:\d+/);
+
+ release.description = query.cnt('#sceneInfo .description');
+
+ release.actors = query.all('#sceneInfo .data-others a[href*="/models"]').map(el => ({
+ name: query.el(el, null, 'title'),
+ url: query.url(el, null),
+ }));
+
+ release.tags = query.cnts('.categories-holder a');
+
+ const poster = query.img('#video-holder .update_thumb');
+ const posterPathname = poster && new URL(poster)?.pathname;
+
+ release.poster = [poster, poster?.replace(/imgw=\w+/, 'imgw=680')];
+
+ release.photos = query.imgs('.photos-holder img')
+ .filter(src => new URL(src).pathname !== posterPathname)
+ .map(src => [
+ src.replace(/imgw=\d+/, 'imgw=1284'),
+ src,
+ ]);
+
+ return release;
+}
+
+function scrapeProfileScenes(scenes) {
+ return scenes.map(({ query }) => {
+ const release = {};
+
+ release.url = query.url('a[href*="/updates"]');
+ release.entryId = getEntryId(release.url);
+
+ release.title = query.cnt('.titular, h3 a');
+ release.date = query.date('.date-label', 'YYYY-MM-DD');
+ release.duration = query.number('.length-label') * 60;
+
+ release.description = query.cnt('.model-update-description');
+
+ release.actors = query.all('.model-labels a').map(el => ({
+ name: query.cnt(el),
+ url: query.url(el, null),
+ }));
+
+ const poster = query.img('.update_thumb');
+
+ release.poster = [poster, poster?.replace(/imgw=\w+/, 'imgw=680')];
+ release.tags = query.cnts('.categories-holder a');
+
+ return release;
+ });
+}
+
+function scrapeProfile({ query, el }) {
+ const profile = {};
+ const bioKeys = query.cnts('.statsText b');
+ const bioValues = query.texts('.statsText');
+
+ const bio = bioKeys.reduce((acc, key, index) => ({
+ ...acc,
+ [slugify(key, '_')]: bioValues[index],
+ }), {});
+
+ profile.description = query.cnt('.descriptionText');
+ profile.avatar = query.img('.model-bio-pic img');
+
+ profile.height = Number(bio.height?.match(/(\d+)\s?cm/i)?.[1]);
+ profile.dateOfBirth = qu.extractDate(bio.date_of_birth, 'MMMM D, YYYY');
+
+ profile.measurements = bio.measurements;
+ profile.butt = bio.ass_type;
+ profile.pussy = bio.pussy_type;
+
+ profile.ethnicity = bio.ethnicity;
+ profile.hairColor = bio.hair_color;
+ profile.eyes = bio.eye_color;
+ profile.nationality = bio.nationality;
+
+ if (/tattoo/i.test(bio.body_art)) {
+ profile.hasTattoos = true;
+ }
+
+ if (/piercing/i.test(bio.body_art)) {
+ profile.hasPiercings = true;
+ }
+
+ profile.scenes = scrapeProfileScenes(qu.initAll(el, '.model-update'));
+
+ return profile;
+}
+
+async function fetchLatest(channel, page) {
+ const res = await qu.getAll(`${channel.url}/categories/movies_${page}_d.html`, '.thumb-big');
+
+ if (res.ok) {
+ return scrapeAll(res.items, channel);
+ }
+
+ return res.status;
+}
+
+async function fetchProfile(actor, channel) {
+ if (actor.url) {
+ const res = await qu.get(actor.url);
+
+ if (res.ok) {
+ return scrapeProfile(res.item);
+ }
+ }
+
+ const resA = await qu.get(`${channel.url}/models/${slugify(actor.name)}.html`);
+
+ if (resA.ok) {
+ return scrapeProfile(resA.item, channel);
+ }
+
+ const resB = await qu.get(`${channel.url}/models/${slugify(actor.name, '')}.html`);
+
+ if (resB.ok) {
+ return scrapeProfile(resB.item, channel);
+ }
+
+ return resB.status;
+}
+
+module.exports = {
+ fetchLatest,
+ fetchProfile,
+ scrapeScene,
+};