diff --git a/assets/components/tags/photos.vue b/assets/components/tags/photos.vue
index 1fd4c11c..2b963867 100644
--- a/assets/components/tags/photos.vue
+++ b/assets/components/tags/photos.vue
@@ -12,6 +12,7 @@
:src="`/img/${poster.thumbnail}`"
:alt="tag.poster.comment"
class="poster"
+ @load="$parent.$emit('load')"
>
@@ -28,6 +29,7 @@
:src="`/img/${photo.thumbnail}`"
:alt="photo.comment"
class="photo"
+ @load="$parent.$emit('load')"
>
@@ -67,7 +69,7 @@ export default {
diff --git a/public/img/logos/porncz/network.png b/public/img/logos/porncz/network.png
index f402e7d3..9285575c 100644
Binary files a/public/img/logos/porncz/network.png and b/public/img/logos/porncz/network.png differ
diff --git a/public/img/logos/porncz/porncz.png b/public/img/logos/porncz/porncz.png
new file mode 100644
index 00000000..4c85fab7
Binary files /dev/null and b/public/img/logos/porncz/porncz.png differ
diff --git a/public/img/logos/porncz/publicfrombohemia.png b/public/img/logos/porncz/publicfrombohemia.png
index 271bdf4e..962d1289 100644
Binary files a/public/img/logos/porncz/publicfrombohemia.png and b/public/img/logos/porncz/publicfrombohemia.png differ
diff --git a/public/img/logos/porncz/retroporn.png b/public/img/logos/porncz/retroporn.png
deleted file mode 100644
index 7ac4ff25..00000000
Binary files a/public/img/logos/porncz/retroporn.png and /dev/null differ
diff --git a/public/img/logos/porncz/retroporncz.png b/public/img/logos/porncz/retroporncz.png
new file mode 100644
index 00000000..cb49645e
Binary files /dev/null and b/public/img/logos/porncz/retroporncz.png differ
diff --git a/public/img/logos/porncz/sexwithmuslims.png b/public/img/logos/porncz/sexwithmuslims.png
index f75170b9..b8f9a597 100644
Binary files a/public/img/logos/porncz/sexwithmuslims.png and b/public/img/logos/porncz/sexwithmuslims.png differ
diff --git a/public/img/logos/porncz/susanayn.png b/public/img/logos/porncz/susanayn.png
index 9b76c33e..adfea4f0 100644
Binary files a/public/img/logos/porncz/susanayn.png and b/public/img/logos/porncz/susanayn.png differ
diff --git a/public/img/logos/porncz/teenfrombohemia.png b/public/img/logos/porncz/teenfrombohemia.png
index d8f42b26..de435b06 100644
Binary files a/public/img/logos/porncz/teenfrombohemia.png and b/public/img/logos/porncz/teenfrombohemia.png differ
diff --git a/public/img/logos/porncz/thumbs/amateripremium.png b/public/img/logos/porncz/thumbs/amateripremium.png
index 56453eef..309c9579 100644
Binary files a/public/img/logos/porncz/thumbs/amateripremium.png and b/public/img/logos/porncz/thumbs/amateripremium.png differ
diff --git a/public/img/logos/porncz/thumbs/amateursfrombohemia.png b/public/img/logos/porncz/thumbs/amateursfrombohemia.png
index d62ad83c..8aeafa10 100644
Binary files a/public/img/logos/porncz/thumbs/amateursfrombohemia.png and b/public/img/logos/porncz/thumbs/amateursfrombohemia.png differ
diff --git a/public/img/logos/porncz/thumbs/boysfuckmilfs.png b/public/img/logos/porncz/thumbs/boysfuckmilfs.png
index b83ef247..7d5d2bd2 100644
Binary files a/public/img/logos/porncz/thumbs/boysfuckmilfs.png and b/public/img/logos/porncz/thumbs/boysfuckmilfs.png differ
diff --git a/public/img/logos/porncz/thumbs/czechanalsex.png b/public/img/logos/porncz/thumbs/czechanalsex.png
index cf533899..9580b89c 100644
Binary files a/public/img/logos/porncz/thumbs/czechanalsex.png and b/public/img/logos/porncz/thumbs/czechanalsex.png differ
diff --git a/public/img/logos/porncz/thumbs/czechbiporn.png b/public/img/logos/porncz/thumbs/czechbiporn.png
index a560eb28..dba5e7f4 100644
Binary files a/public/img/logos/porncz/thumbs/czechbiporn.png and b/public/img/logos/porncz/thumbs/czechbiporn.png differ
diff --git a/public/img/logos/porncz/thumbs/czechboobs.png b/public/img/logos/porncz/thumbs/czechboobs.png
index d02e21ac..9b6042e8 100644
Binary files a/public/img/logos/porncz/thumbs/czechboobs.png and b/public/img/logos/porncz/thumbs/czechboobs.png differ
diff --git a/public/img/logos/porncz/thumbs/czechdeviant.png b/public/img/logos/porncz/thumbs/czechdeviant.png
new file mode 100644
index 00000000..7f444c69
Binary files /dev/null and b/public/img/logos/porncz/thumbs/czechdeviant.png differ
diff --git a/public/img/logos/porncz/thumbs/czechescortgirls.png b/public/img/logos/porncz/thumbs/czechescortgirls.png
index cdd84d3c..09a0cf5f 100644
Binary files a/public/img/logos/porncz/thumbs/czechescortgirls.png and b/public/img/logos/porncz/thumbs/czechescortgirls.png differ
diff --git a/public/img/logos/porncz/thumbs/czechexecutor.png b/public/img/logos/porncz/thumbs/czechexecutor.png
index 6742a982..3e57d7b5 100644
Binary files a/public/img/logos/porncz/thumbs/czechexecutor.png and b/public/img/logos/porncz/thumbs/czechexecutor.png differ
diff --git a/public/img/logos/porncz/thumbs/czechgaycity.png b/public/img/logos/porncz/thumbs/czechgaycity.png
index 5918d8c5..c8e87aeb 100644
Binary files a/public/img/logos/porncz/thumbs/czechgaycity.png and b/public/img/logos/porncz/thumbs/czechgaycity.png differ
diff --git a/public/img/logos/porncz/thumbs/czechgypsies.png b/public/img/logos/porncz/thumbs/czechgypsies.png
index eb575dce..cd499e29 100644
Binary files a/public/img/logos/porncz/thumbs/czechgypsies.png and b/public/img/logos/porncz/thumbs/czechgypsies.png differ
diff --git a/public/img/logos/porncz/thumbs/czechhitchhikers.png b/public/img/logos/porncz/thumbs/czechhitchhikers.png
index f9a245c2..77129f12 100644
Binary files a/public/img/logos/porncz/thumbs/czechhitchhikers.png and b/public/img/logos/porncz/thumbs/czechhitchhikers.png differ
diff --git a/public/img/logos/porncz/thumbs/czechrealdolls.png b/public/img/logos/porncz/thumbs/czechrealdolls.png
index 2c4afe15..b3e07637 100644
Binary files a/public/img/logos/porncz/thumbs/czechrealdolls.png and b/public/img/logos/porncz/thumbs/czechrealdolls.png differ
diff --git a/public/img/logos/porncz/thumbs/czechsexcasting.png b/public/img/logos/porncz/thumbs/czechsexcasting.png
index ee539730..1fb73273 100644
Binary files a/public/img/logos/porncz/thumbs/czechsexcasting.png and b/public/img/logos/porncz/thumbs/czechsexcasting.png differ
diff --git a/public/img/logos/porncz/thumbs/czechsexparty.png b/public/img/logos/porncz/thumbs/czechsexparty.png
index acbe2998..41717171 100644
Binary files a/public/img/logos/porncz/thumbs/czechsexparty.png and b/public/img/logos/porncz/thumbs/czechsexparty.png differ
diff --git a/public/img/logos/porncz/thumbs/czechshemale.png b/public/img/logos/porncz/thumbs/czechshemale.png
index 4c15880e..2c56c54d 100644
Binary files a/public/img/logos/porncz/thumbs/czechshemale.png and b/public/img/logos/porncz/thumbs/czechshemale.png differ
diff --git a/public/img/logos/porncz/thumbs/dellaitwins.png b/public/img/logos/porncz/thumbs/dellaitwins.png
index c2788a2e..bae0d817 100644
Binary files a/public/img/logos/porncz/thumbs/dellaitwins.png and b/public/img/logos/porncz/thumbs/dellaitwins.png differ
diff --git a/public/img/logos/porncz/thumbs/dickontrip.png b/public/img/logos/porncz/thumbs/dickontrip.png
index fc9d870b..7b201a2c 100644
Binary files a/public/img/logos/porncz/thumbs/dickontrip.png and b/public/img/logos/porncz/thumbs/dickontrip.png differ
diff --git a/public/img/logos/porncz/thumbs/fuckingoffice.png b/public/img/logos/porncz/thumbs/fuckingoffice.png
index 13e8751e..f7081188 100644
Binary files a/public/img/logos/porncz/thumbs/fuckingoffice.png and b/public/img/logos/porncz/thumbs/fuckingoffice.png differ
diff --git a/public/img/logos/porncz/thumbs/fuckingstreet.png b/public/img/logos/porncz/thumbs/fuckingstreet.png
index 4bdc5845..fe82cb1c 100644
Binary files a/public/img/logos/porncz/thumbs/fuckingstreet.png and b/public/img/logos/porncz/thumbs/fuckingstreet.png differ
diff --git a/public/img/logos/porncz/thumbs/girlstakeaway.png b/public/img/logos/porncz/thumbs/girlstakeaway.png
index 79b04a6d..9a93fdc9 100644
Binary files a/public/img/logos/porncz/thumbs/girlstakeaway.png and b/public/img/logos/porncz/thumbs/girlstakeaway.png differ
diff --git a/public/img/logos/porncz/thumbs/hornydoctor.png b/public/img/logos/porncz/thumbs/hornydoctor.png
index bc97be6a..043c80f9 100644
Binary files a/public/img/logos/porncz/thumbs/hornydoctor.png and b/public/img/logos/porncz/thumbs/hornydoctor.png differ
diff --git a/public/img/logos/porncz/thumbs/hornygirlscz.png b/public/img/logos/porncz/thumbs/hornygirlscz.png
index d224298e..e5357e37 100644
Binary files a/public/img/logos/porncz/thumbs/hornygirlscz.png and b/public/img/logos/porncz/thumbs/hornygirlscz.png differ
diff --git a/public/img/logos/porncz/thumbs/hunterpov.png b/public/img/logos/porncz/thumbs/hunterpov.png
index 8850cfcc..87b246a6 100644
Binary files a/public/img/logos/porncz/thumbs/hunterpov.png and b/public/img/logos/porncz/thumbs/hunterpov.png differ
diff --git a/public/img/logos/porncz/thumbs/ladydee.png b/public/img/logos/porncz/thumbs/ladydee.png
index f934f3a1..b5fb91e8 100644
Binary files a/public/img/logos/porncz/thumbs/ladydee.png and b/public/img/logos/porncz/thumbs/ladydee.png differ
diff --git a/public/img/logos/porncz/thumbs/network.png b/public/img/logos/porncz/thumbs/network.png
index 285e7554..06e2b8d8 100644
Binary files a/public/img/logos/porncz/thumbs/network.png and b/public/img/logos/porncz/thumbs/network.png differ
diff --git a/public/img/logos/porncz/thumbs/porncz.png b/public/img/logos/porncz/thumbs/porncz.png
new file mode 100644
index 00000000..e2625110
Binary files /dev/null and b/public/img/logos/porncz/thumbs/porncz.png differ
diff --git a/public/img/logos/porncz/thumbs/publicfrombohemia.png b/public/img/logos/porncz/thumbs/publicfrombohemia.png
index 43a39655..2098b757 100644
Binary files a/public/img/logos/porncz/thumbs/publicfrombohemia.png and b/public/img/logos/porncz/thumbs/publicfrombohemia.png differ
diff --git a/public/img/logos/porncz/thumbs/retroporn.png b/public/img/logos/porncz/thumbs/retroporn.png
index b503babb..f8c3a73f 100644
Binary files a/public/img/logos/porncz/thumbs/retroporn.png and b/public/img/logos/porncz/thumbs/retroporn.png differ
diff --git a/public/img/logos/porncz/thumbs/retroporncz.png b/public/img/logos/porncz/thumbs/retroporncz.png
new file mode 100644
index 00000000..30ac3bd0
Binary files /dev/null and b/public/img/logos/porncz/thumbs/retroporncz.png differ
diff --git a/public/img/logos/porncz/thumbs/sexwithmuslims.png b/public/img/logos/porncz/thumbs/sexwithmuslims.png
index 75eac873..0dff8582 100644
Binary files a/public/img/logos/porncz/thumbs/sexwithmuslims.png and b/public/img/logos/porncz/thumbs/sexwithmuslims.png differ
diff --git a/public/img/logos/porncz/thumbs/susanayn.png b/public/img/logos/porncz/thumbs/susanayn.png
index ea9f5b03..c2886257 100644
Binary files a/public/img/logos/porncz/thumbs/susanayn.png and b/public/img/logos/porncz/thumbs/susanayn.png differ
diff --git a/public/img/logos/porncz/thumbs/teenfrombohemia.png b/public/img/logos/porncz/thumbs/teenfrombohemia.png
index 29b94d01..d5082f8c 100644
Binary files a/public/img/logos/porncz/thumbs/teenfrombohemia.png and b/public/img/logos/porncz/thumbs/teenfrombohemia.png differ
diff --git a/public/img/tags/blonde/2.jpeg b/public/img/tags/blonde/2.jpeg
new file mode 100644
index 00000000..3f2054f4
Binary files /dev/null and b/public/img/tags/blonde/2.jpeg differ
diff --git a/public/img/tags/blonde/lazy/2.jpeg b/public/img/tags/blonde/lazy/2.jpeg
new file mode 100644
index 00000000..add077dc
Binary files /dev/null and b/public/img/tags/blonde/lazy/2.jpeg differ
diff --git a/public/img/tags/blonde/thumbs/2.jpeg b/public/img/tags/blonde/thumbs/2.jpeg
new file mode 100644
index 00000000..d432ccad
Binary files /dev/null and b/public/img/tags/blonde/thumbs/2.jpeg differ
diff --git a/public/img/tags/bondage/0.jpeg b/public/img/tags/bondage/0.jpeg
new file mode 100644
index 00000000..a5c6ee3e
Binary files /dev/null and b/public/img/tags/bondage/0.jpeg differ
diff --git a/public/img/tags/bondage/lazy/0.jpeg b/public/img/tags/bondage/lazy/0.jpeg
new file mode 100644
index 00000000..85c9da41
Binary files /dev/null and b/public/img/tags/bondage/lazy/0.jpeg differ
diff --git a/public/img/tags/bondage/thumbs/0.jpeg b/public/img/tags/bondage/thumbs/0.jpeg
new file mode 100644
index 00000000..165c4cff
Binary files /dev/null and b/public/img/tags/bondage/thumbs/0.jpeg differ
diff --git a/public/img/tags/latina/2.jpeg b/public/img/tags/latina/2.jpeg
index a92f8f22..18080c0d 100755
Binary files a/public/img/tags/latina/2.jpeg and b/public/img/tags/latina/2.jpeg differ
diff --git a/public/img/tags/latina/lazy/2.jpeg b/public/img/tags/latina/lazy/2.jpeg
index fe5aba1e..517b826b 100644
Binary files a/public/img/tags/latina/lazy/2.jpeg and b/public/img/tags/latina/lazy/2.jpeg differ
diff --git a/public/img/tags/latina/thumbs/2.jpeg b/public/img/tags/latina/thumbs/2.jpeg
index 959a5aca..9e3b53b3 100644
Binary files a/public/img/tags/latina/thumbs/2.jpeg and b/public/img/tags/latina/thumbs/2.jpeg differ
diff --git a/public/img/tags/oral-creampie/1.jpeg b/public/img/tags/oral-creampie/1.jpeg
new file mode 100644
index 00000000..bf8b818e
Binary files /dev/null and b/public/img/tags/oral-creampie/1.jpeg differ
diff --git a/public/img/tags/oral-creampie/lazy/1.jpeg b/public/img/tags/oral-creampie/lazy/1.jpeg
new file mode 100644
index 00000000..4e049644
Binary files /dev/null and b/public/img/tags/oral-creampie/lazy/1.jpeg differ
diff --git a/public/img/tags/oral-creampie/thumbs/0.jpeg b/public/img/tags/oral-creampie/thumbs/0.jpeg
index 807ba13c..3be8523c 100644
Binary files a/public/img/tags/oral-creampie/thumbs/0.jpeg and b/public/img/tags/oral-creampie/thumbs/0.jpeg differ
diff --git a/public/img/tags/oral-creampie/thumbs/1.jpeg b/public/img/tags/oral-creampie/thumbs/1.jpeg
new file mode 100644
index 00000000..babc6e8b
Binary files /dev/null and b/public/img/tags/oral-creampie/thumbs/1.jpeg differ
diff --git a/seeds/01_networks.js b/seeds/01_networks.js
index 504650d3..6776dd3a 100644
--- a/seeds/01_networks.js
+++ b/seeds/01_networks.js
@@ -362,6 +362,11 @@ const networks = [
url: 'https://www.pimp.xxx',
description: 'PIMP.XXX is the NEWEST and HOTTEST site featuring Exclusive Ultra High Definition 4k videos updated daily! Featuring the newest and the biggest pornstars with Big Tits, Tight Asses, and more!',
},
+ {
+ slug: 'porncz',
+ name: 'PornCZ',
+ url: 'https://www.porncz.com',
+ },
{
slug: 'pornpros',
name: 'Porn Pros',
diff --git a/seeds/02_sites.js b/seeds/02_sites.js
index a0d96441..be33a5bd 100644
--- a/seeds/02_sites.js
+++ b/seeds/02_sites.js
@@ -4833,6 +4833,292 @@ const sites = [
url: 'https://bcm.xxx',
parent: 'pimpxxx',
},
+ // PORN CZ
+ {
+ name: 'Czech Sex Casting',
+ slug: 'czechsexcasting',
+ url: 'https://www.czechsexcasting.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 14,
+ },
+ },
+ {
+ name: 'Sex With Muslims',
+ slug: 'sexwithmuslims',
+ url: 'https://www.sexwithmuslims.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 33,
+ },
+ },
+ {
+ name: 'Fuckingstreet',
+ slug: 'fuckingstreet',
+ url: 'https://www.fuckingstreet.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 45,
+ },
+ },
+ {
+ name: 'Hunter POV',
+ slug: 'hunterpov',
+ url: 'https://www.hunterpov.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 43,
+ },
+ },
+ {
+ name: 'Czech Gypsies',
+ slug: 'czechgypsies',
+ url: 'https://www.czechgypsies.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 34,
+ },
+ },
+ {
+ name: 'Dick On Trip',
+ slug: 'dickontrip',
+ url: 'https://www.dickontrip.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 36,
+ },
+ },
+ {
+ name: 'Czech Boobs',
+ slug: 'czechboobs',
+ url: 'https://www.czechboobs.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 38,
+ },
+ },
+ {
+ name: 'Czech Deviant',
+ slug: 'czechdeviant',
+ url: 'https://www.czechdeviant.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 47,
+ },
+ },
+ {
+ name: 'Amateri Premium',
+ slug: 'amateripremium',
+ url: 'https://www.amateripremium.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 29,
+ },
+ },
+ {
+ name: 'Fuckingoffice',
+ slug: 'fuckingoffice',
+ url: 'https://www.fuckingoffice.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 31,
+ },
+ },
+ {
+ name: 'Czech Executor',
+ slug: 'czechexecutor',
+ url: 'https://www.czechexecutor.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 40,
+ },
+ },
+ {
+ name: 'Czech HitchHikers',
+ slug: 'czechhitchhikers',
+ url: 'https://www.czechhitchhikers.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 16,
+ },
+ },
+ {
+ name: 'Girls Take Away',
+ slug: 'girlstakeaway',
+ url: 'https://www.girlstakeaway.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 30,
+ },
+ },
+ {
+ name: 'Czech Escort Girls',
+ slug: 'czechescortgirls',
+ url: 'https://www.czechescortgirls.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 35,
+ },
+ },
+ {
+ name: 'Horny doctor',
+ slug: 'hornydoctor',
+ url: 'https://www.hornydoctor.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 28,
+ },
+ },
+ {
+ name: 'Lady Dee',
+ slug: 'ladydee',
+ url: 'https://www.ladydee.xxx',
+ parent: 'porncz',
+ parameters: {
+ siteId: 32,
+ },
+ },
+ {
+ name: 'Teen From Bohemia',
+ slug: 'teenfrombohemia',
+ url: 'https://www.teenfrombohemia.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 25,
+ },
+ },
+ {
+ name: 'Czech Real Dolls',
+ slug: 'czechrealdolls',
+ url: 'https://www.czechrealdolls.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 37,
+ },
+ },
+ {
+ name: 'Amateurs From Bohemia',
+ slug: 'amateursfrombohemia',
+ url: 'https://www.amateursfrombohemia.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 26,
+ },
+ },
+ {
+ name: 'Czech Anal Sex',
+ slug: 'czechanalsex',
+ url: 'https://www.czechanalsex.com',
+ tags: ['anal'],
+ parent: 'porncz',
+ parameters: {
+ siteId: 17,
+ },
+ },
+ {
+ name: 'Dellai Twins',
+ slug: 'dellaitwins',
+ url: 'https://www.dellaitwins.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 18,
+ },
+ },
+ {
+ name: 'Chloe Lamour',
+ slug: 'chloelamour',
+ url: 'https://www.chloelamour.com',
+ hasLogo: false,
+ parent: 'porncz',
+ parameters: {
+ siteId: 44,
+ },
+ },
+ {
+ name: 'Public From Bohemia',
+ slug: 'publicfrombohemia',
+ url: 'https://www.publicfrombohemia.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 24,
+ },
+ },
+ {
+ name: 'Susan ayn',
+ slug: 'susanayn',
+ url: 'https://www.susanayn.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 27,
+ },
+ },
+ {
+ name: 'Horny Girls CZ',
+ slug: 'hornygirlscz',
+ url: 'https://www.hornygirlscz.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 21,
+ },
+ },
+ {
+ name: 'Czech Sex Party',
+ slug: 'czechsexparty',
+ url: 'https://www.czechsexparty.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 19,
+ },
+ },
+ {
+ name: 'Retro Porn CZ',
+ slug: 'retroporncz',
+ url: 'https://www.retroporncz.com',
+ parent: 'porncz',
+ parameters: {
+ siteId: 22,
+ },
+ },
+ {
+ name: 'Boys Fuck MILFs',
+ slug: 'boysfuckmilfs',
+ url: 'https://www.boysfuckmilfs.com',
+ tags: ['milf'],
+ parent: 'porncz',
+ parameters: {
+ siteId: 23,
+ },
+ },
+ {
+ name: 'Czech Bi Porn',
+ slug: 'czechbiporn',
+ url: 'https://www.czechbiporn.com',
+ tags: ['bisexual'],
+ parent: 'porncz',
+ parameters: {
+ siteId: 42,
+ },
+ },
+ {
+ name: 'Czech Shemale',
+ slug: 'czechshemale',
+ url: 'https://www.czechshemale.com',
+ tags: ['transsexual'],
+ parent: 'porncz',
+ parameters: {
+ siteId: 41,
+ },
+ },
+ {
+ name: 'Czech Gay City',
+ slug: 'czechgaycity',
+ url: 'https://www.czechgaycity.com',
+ tags: ['gay'],
+ parent: 'porncz',
+ parameters: {
+ siteId: 39,
+ },
+ },
// PORN PROS
{
name: 'Real Ex Girlfriends',
diff --git a/seeds/04_media.js b/seeds/04_media.js
index 177e19d6..628a6773 100644
--- a/seeds/04_media.js
+++ b/seeds/04_media.js
@@ -599,6 +599,7 @@ const tagPosters = [
['blowbang', 0, 'Lacy Lennon in "Lacy Lennon\'s First Blowbang" for HardX'],
['blowjob', 0, 'Adriana Chechik in "The Dinner Party" for Real Wife Stories (Brazzers)'],
['brunette', 0, 'Darcie Dolce for Playboy'],
+ ['bondage', 0, 'Veronica Leal for Her Limit'],
['bukkake', 0, 'Jaye Summers in "Facialized 5" for HardX'],
['caucasian', 0, 'Remy Lacroix for HardX'],
['creampie', 'poster', 'ALina Lopez in "Making Yourself Unforgettable" for Blacked'],
@@ -623,7 +624,7 @@ const tagPosters = [
['gaping', 1, 'Vina Sky in "Vina Sky Does Anal" for HardX'],
['indian', 0, 'Resha in "Casting Resha" for Watch 4 Beauty'],
['interracial', 0, 'Jaye Summers and Prince Yahshua in "Platinum Pussy 3" for Jules Jordan'],
- ['latina', 0, 'Vienna Black for Spizoo'],
+ ['latina', 2, 'Veronica Leal for Her Limit'],
['lesbian', 0, 'Jenna Sativa and Alina Lopez in "Opposites Attract" for Girl Girl'],
['maid', 0, 'Whitney Wright in "Dredd Up Your Ass 2" for Jules Jordan'],
['milf', 0, 'Olivia Austin in "Dredd 3" for Jules Jordan'],
@@ -632,7 +633,7 @@ const tagPosters = [
['natural-boobs', 1, 'Nia Nacci for First Class POV'],
['nurse', 0, 'Sarah Vandella in "Cum For Nurse Sarah" for Brazzers'],
['oil', 2, 'Jade Kush for Passion HD'],
- ['oral-creampie', 0, 'Henessy in "B(ass)t Friends" for Asshole Fever'],
+ ['oral-creampie', 1, 'Valentina Nappi for Her Limit'],
['orgy', 1, 'Megan Rain (DP), Morgan Lee (anal), Jessa Rhodes, Melissa Moore and Kimmy Granger in "Orgy Masters 8" for Jules Jordan'],
['parody', 0, 'Capri Cavanni and Dani Daniels in "The Whore of Wall Street" for Brazzers'],
['piercings', 0, 'Kaegune in "When The Sun Goes Down" for Suicide Girls'],
@@ -675,6 +676,7 @@ const tagPhotos = [
// ['anal', 1, 'Veronica Leal and Tina Kay in "Agents On Anal Mission" for Asshole Fever'],
// ['anal', 0, 'Veronica Leal'],
['behind-the-scenes', 1, 'Madison Ivy in "Day With A Pornstar" for Brazzers'],
+ ['blonde', 2, 'Isabelle Deltore for Her Limit'],
['blowbang', 'poster', 'Marsha May in "Feeding Frenzy 12" for Jules Jordan'],
// ['bukkake', 'poster', 'Mia Malkova in "Facialized 2" for HardX'],
['caucasian', 1, 'Sheena Shaw for Brazzers'],
@@ -716,13 +718,14 @@ const tagPhotos = [
['gaping', 3, 'Jessyka Swan for 21Sextury'],
['gaping', 2, 'Alex Grey in "DP Masters 5" for Jules Jordan'],
['latina', 1, 'Jynx Maze in "Big Anal Asses 2" for HardX'],
- ['latina', 2, 'Alexis Love for Penthouse'],
+ ['latina', 0, 'Vienna Black for Spizoo'],
['mff', 0, 'Madison Ivy, Adriana Chechik and Keiran Lee in "Day With A Pornstar" for Brazzers'],
['mfm', 6, 'Honey Gold in "Slut Puppies 12" for Jules Jordan'],
['natural-boobs', 0, 'Valentina Nappi in "Hypnotic Curves" for LesbianX'],
['oil', 1, 'Kissa Sins in "Oil Overload 14" for JulesJordan'],
['oil', 3, 'Vina Sky for Lubed'],
['oil', 0, 'Jada Stevens in "Jada Stevens Anal Ass Oiled Up For James Deen\'s Cock" for Jules Jordan'],
+ ['oral-creampie', 0, 'Henessy in "B(ass)t Friends" for Asshole Fever'],
['orgy', 'poster', 'Zoey Mornoe (DP), Jillian Janson (sex), Frida Sante, Katerina Kay and Natasha Starr in "Orgy Masters 6" for Jules Jordan'],
['pussy-eating', 0, 'Kali Roses licking Emily Willis\' pussy in "Peeping On My Neighbor" for Girl Girl'],
['redhead', 0, 'Penny Pax in "The Submission of Emma Marx: Boundaries" for New Sensations'],
diff --git a/src/scrapers/legalporno.js b/src/scrapers/legalporno.js
index 613b2cdf..ffa982fb 100644
--- a/src/scrapers/legalporno.js
+++ b/src/scrapers/legalporno.js
@@ -9,7 +9,8 @@ const slugify = require('../utils/slugify');
function extractTitle(originalTitle) {
const titleComponents = originalTitle.split(' ');
- const sceneIdMatch = titleComponents.slice(-1)[0].match(/(AB|AF|GP|SZ|IV|GIO|RS|TW|MA|FM|SAL|NR|AA|GL|BZ|FS|KS|OTS|NF|NT|AX|RV|CM)\d+/); // detect studio prefixes
+ // const sceneIdMatch = titleComponents.slice(-1)[0].match(/(AB|AF|GP|SZ|IV|GIO|RS|TW|MA|FM|SAL|NR|AA|GL|BZ|FS|KS|OTS|NF|NT|AX|RV|CM|BTG)\d+/); // detect studio prefixes
+ const sceneIdMatch = titleComponents.slice(-1)[0].match(/\w+\d+\s*$/); // detect studio prefixes
const shootId = sceneIdMatch ? sceneIdMatch[0] : null;
const title = sceneIdMatch ? titleComponents.slice(0, -1).join(' ') : originalTitle;
diff --git a/src/scrapers/porncz.js b/src/scrapers/porncz.js
new file mode 100644
index 00000000..19025143
--- /dev/null
+++ b/src/scrapers/porncz.js
@@ -0,0 +1,119 @@
+'use strict';
+
+const http = require('../utils/http');
+const qu = require('../utils/qu');
+const slugify = require('../utils/slugify');
+const capitalize = require('../utils/capitalize');
+
+function scrapeAll(scenes, channel) {
+ return scenes.map(({ query }) => {
+ const release = {};
+
+ release.url = query.url('h4 a', 'href', { origin: channel.url });
+ release.entryId = new URL(release.url).pathname.match(/\d+$/)[0];
+
+ release.title = query.cnt('h4 a');
+ release.duration = query.duration('.product-item-time');
+
+ release.poster = query.img('.product-item-image img', 'src', { origin: channel.url });
+
+ console.log(release);
+
+ return release;
+ });
+}
+
+function scrapeScene({ query }, url, channel) {
+ const release = {};
+
+ release.entryId = new URL(url).pathname.match(/\d+$/)[0];
+
+ release.title = query.cnt('.heading-detail h1');
+ release.description = query.cnt('.heading-detail p:nth-child(3)');
+
+ const details = query.all('.video-info-item').reduce((acc, detailEl) => {
+ const key = detailEl.textContent.match(/(\w+):/)[1];
+
+ return { ...acc, [slugify(key, '_')]: detailEl };
+ }, {});
+
+ const { date, precision } = query.dateAgo(details.date);
+
+ release.date = date;
+ release.datePrecision = precision;
+
+ release.actors = query.cnts(details.actors, 'a').map(actor => capitalize(actor, { uncapitalize: true }));
+ release.duration = query.duration(details.duration);
+ release.tags = query.cnts(details.genres, 'a');
+
+ release.poster = query.img('#video-poster', 'data-poster', { origin: channel.url });
+ release.photos = query.imgs('#gallery .photo-item img', 'src', { origin: channel.url });
+
+ release.trailer = query.video('.trailer source');
+
+ release.channel = slugify(query.q('.video-detail-logo img', 'alt'), '');
+
+ return release;
+}
+
+function scrapeProfile({ query }, entity) {
+ const profile = {};
+
+ profile.avatar = query.img('.model-heading-photo img', 'src', { origin: entity.url });
+ profile.releases = scrapeAll(qu.initAll(query.all('.product-item')), entity);
+
+ return profile;
+}
+
+async function fetchLatest(channel, _page = 1) {
+ const url = `${channel.url}/en/new-videos?option=date&do=sort`;
+
+ // TODO: session
+ await http.head(url);
+ const res = await qu.getAll(url, '.product-item');
+
+ if (res.ok) {
+ return scrapeAll(res.items, channel);
+ }
+
+ return res.status;
+}
+
+async function fetchScene(url, channel) {
+ const res = await qu.get(url, 'body > .container');
+
+ if (res.ok) {
+ return scrapeScene(res.item, url, channel);
+ }
+
+ return res.status;
+}
+
+async function fetchProfile(baseActor, entity) {
+ const searchRes = await qu.getAll(`https://www.porncz.com/en/search-results?showModels=1&value=${baseActor.name}`, '.project-item');
+
+ if (searchRes.ok) {
+ const model = searchRes.items.find(({ query }) => query.cnt('h3 a') === baseActor.name);
+
+ if (model) {
+ const modelUrl = model.query.url('h3 a', 'href', { origin: 'https://www.porncz.com' });
+ const modelRes = await qu.get(`${modelUrl}?do=nextDetail`); // get more videos
+
+ if (modelRes.ok) {
+ return scrapeProfile(modelRes.item, entity);
+ }
+
+ return modelRes.status;
+ }
+
+ return null;
+ }
+
+ return searchRes.status;
+}
+
+module.exports = {
+ fetchLatest,
+ fetchScene,
+ fetchProfile,
+};
diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js
index bb5f7201..4ae97a34 100644
--- a/src/scrapers/scrapers.js
+++ b/src/scrapers/scrapers.js
@@ -47,6 +47,7 @@ const newsensations = require('./newsensations');
const nubiles = require('./nubiles');
const perfectgonzo = require('./perfectgonzo');
const pervcity = require('./pervcity');
+const porncz = require('./porncz');
const pornhub = require('./pornhub');
const whalemember = require('./whalemember');
const privateNetwork = require('./private'); // reserved keyword
@@ -128,6 +129,7 @@ module.exports = {
perfectgonzo,
pervcity,
pimpxxx: cherrypimps,
+ porncz,
pornpros: whalemember,
private: privateNetwork,
puretaboo,
@@ -217,6 +219,7 @@ module.exports = {
pimpxxx: cherrypimps,
letsdoeit: porndoe,
mamacitaz: porndoe,
+ porncz,
pornhub,
povperverts: fullpornnetwork,
povpornstars: hush,
diff --git a/src/utils/capitalize.js b/src/utils/capitalize.js
index 11eda33e..3cb16c01 100644
--- a/src/utils/capitalize.js
+++ b/src/utils/capitalize.js
@@ -1,13 +1,13 @@
'use strict';
-function capitalize(string, trim = true) {
+function capitalize(string, { trim = true, uncapitalize = false } = {}) {
if (!string) {
return '';
}
const capitalized = string
.split(/\s+/)
- .map(component => `${component.charAt(0).toUpperCase()}${component.slice(1)}`)
+ .map(component => `${component.charAt(0).toUpperCase()}${uncapitalize ? component.slice(1).toLowerCase() : component.slice(1)}`)
.join(' ');
return trim ? capitalized.trim() : capitalized;
diff --git a/src/utils/http.js b/src/utils/http.js
index 27ef089b..71c0ebe9 100644
--- a/src/utils/http.js
+++ b/src/utils/http.js
@@ -112,6 +112,15 @@ async function get(url, headers, options) {
});
}
+async function head(url, headers, options) {
+ return queue.push(options?.queueMethod || defaultQueueMethod, {
+ method: 'HEAD',
+ url,
+ headers,
+ options,
+ });
+}
+
async function post(url, body, headers, options) {
return queue.push(options?.queueMethod || defaultQueueMethod, {
method: 'POST',
@@ -125,4 +134,5 @@ async function post(url, body, headers, options) {
module.exports = {
get,
post,
+ head,
};
diff --git a/src/utils/qu.js b/src/utils/qu.js
index 340edf7a..d10cc652 100644
--- a/src/utils/qu.js
+++ b/src/utils/qu.js
@@ -170,6 +170,28 @@ function date(context, selector, format, match, attr = 'textContent') {
return extractDate(dateString, format, match);
}
+function dateAgo(context, selector, match = /(\d+)\s*(\w+)/, attr = 'textContent') {
+ const timeString = q(context, selector, attr, 'textContent');
+
+ if (!timeString) {
+ return null;
+ }
+
+ const timeMatch = timeString.match(match);
+
+ if (timeMatch) {
+ const [n, period] = timeMatch.slice(1);
+ const thenDate = moment.utc().subtract(Number(n), period);
+
+ return {
+ date: thenDate.toDate(),
+ precision: period.replace(/s$/, ''),
+ };
+ }
+
+ return null;
+}
+
function image(context, selector = 'img', attr, { origin, protocol = 'https' } = {}) {
const imageEl = (attr && q(context, selector, attr))
|| q(context, selector, 'data-src')
@@ -286,6 +308,7 @@ const quFuncs = {
cnt: content,
cnts: contents,
date,
+ dateAgo,
dur: duration,
duration,
element: q,