diff --git a/assets/components/tags/tag.vue b/assets/components/tags/tag.vue index 9a407148..e070a712 100644 --- a/assets/components/tags/tag.vue +++ b/assets/components/tags/tag.vue @@ -37,12 +37,12 @@ v-for="photo in tag.photos" :key="`photo-${photo.id}`" :title="photo.comment" - :href="`/media/${photo.path}`" + :href="`/img/${photo.path}`" target="_blank" rel="noopener noreferrer" > diff --git a/public/img/tags/airtight/0.jpeg b/public/img/tags/airtight/0.jpeg new file mode 100755 index 00000000..7abcc220 Binary files /dev/null and b/public/img/tags/airtight/0.jpeg differ diff --git a/public/img/tags/airtight/0_thumb.jpeg b/public/img/tags/airtight/0_thumb.jpeg new file mode 100755 index 00000000..dd487ab9 Binary files /dev/null and b/public/img/tags/airtight/0_thumb.jpeg differ diff --git a/public/img/tags/airtight/1.jpeg b/public/img/tags/airtight/1.jpeg new file mode 100755 index 00000000..cd586a4a Binary files /dev/null and b/public/img/tags/airtight/1.jpeg differ diff --git a/public/img/tags/airtight/1_thumb.jpeg b/public/img/tags/airtight/1_thumb.jpeg new file mode 100755 index 00000000..0d127157 Binary files /dev/null and b/public/img/tags/airtight/1_thumb.jpeg differ diff --git a/public/img/tags/airtight/2.jpg b/public/img/tags/airtight/2.jpg new file mode 100755 index 00000000..4b981301 Binary files /dev/null and b/public/img/tags/airtight/2.jpg differ diff --git a/public/img/tags/airtight/2_thumb.jpeg b/public/img/tags/airtight/2_thumb.jpeg new file mode 100755 index 00000000..7d257ec1 Binary files /dev/null and b/public/img/tags/airtight/2_thumb.jpeg differ diff --git a/public/img/tags/airtight.jpeg b/public/img/tags/airtight/poster.jpeg similarity index 100% rename from public/img/tags/airtight.jpeg rename to public/img/tags/airtight/poster.jpeg diff --git a/public/img/tags/airtight_thumb.jpeg b/public/img/tags/airtight/poster_thumb.jpeg similarity index 100% rename from public/img/tags/airtight_thumb.jpeg rename to public/img/tags/airtight/poster_thumb.jpeg diff --git a/public/img/tags/anal-creampie.jpeg b/public/img/tags/anal-creampie/poster.jpeg similarity index 100% rename from public/img/tags/anal-creampie.jpeg rename to public/img/tags/anal-creampie/poster.jpeg diff --git a/public/img/tags/anal-creampie_thumb.jpeg b/public/img/tags/anal-creampie/poster_thumb.jpeg similarity index 100% rename from public/img/tags/anal-creampie_thumb.jpeg rename to public/img/tags/anal-creampie/poster_thumb.jpeg diff --git a/public/img/tags/anal.jpeg b/public/img/tags/anal/poster.jpeg similarity index 100% rename from public/img/tags/anal.jpeg rename to public/img/tags/anal/poster.jpeg diff --git a/public/img/tags/anal_thumb.jpeg b/public/img/tags/anal/poster_thumb.jpeg similarity index 100% rename from public/img/tags/anal_thumb.jpeg rename to public/img/tags/anal/poster_thumb.jpeg diff --git a/public/img/tags/asian.jpeg b/public/img/tags/asian/poster.jpeg similarity index 100% rename from public/img/tags/asian.jpeg rename to public/img/tags/asian/poster.jpeg diff --git a/public/img/tags/asian_thumb.jpeg b/public/img/tags/asian/poster_thumb.jpeg similarity index 100% rename from public/img/tags/asian_thumb.jpeg rename to public/img/tags/asian/poster_thumb.jpeg diff --git a/public/img/tags/bdsm.jpeg b/public/img/tags/bdsm/poster.jpeg similarity index 100% rename from public/img/tags/bdsm.jpeg rename to public/img/tags/bdsm/poster.jpeg diff --git a/public/img/tags/bdsm_thumb.jpeg b/public/img/tags/bdsm/poster_thumb.jpeg similarity index 100% rename from public/img/tags/bdsm_thumb.jpeg rename to public/img/tags/bdsm/poster_thumb.jpeg diff --git a/public/img/tags/blowbang.jpeg b/public/img/tags/blowbang/poster.jpeg similarity index 100% rename from public/img/tags/blowbang.jpeg rename to public/img/tags/blowbang/poster.jpeg diff --git a/public/img/tags/blowbang_thumb.jpeg b/public/img/tags/blowbang/poster_thumb.jpeg similarity index 100% rename from public/img/tags/blowbang_thumb.jpeg rename to public/img/tags/blowbang/poster_thumb.jpeg diff --git a/public/img/tags/bukkake.jpeg b/public/img/tags/bukkake/poster.jpeg similarity index 100% rename from public/img/tags/bukkake.jpeg rename to public/img/tags/bukkake/poster.jpeg diff --git a/public/img/tags/bukkake_thumb.jpeg b/public/img/tags/bukkake/poster_thumb.jpeg similarity index 100% rename from public/img/tags/bukkake_thumb.jpeg rename to public/img/tags/bukkake/poster_thumb.jpeg diff --git a/public/img/tags/caucasian.jpeg b/public/img/tags/caucasian/poster.jpeg similarity index 100% rename from public/img/tags/caucasian.jpeg rename to public/img/tags/caucasian/poster.jpeg diff --git a/public/img/tags/caucasian_thumb.jpeg b/public/img/tags/caucasian/poster_thumb.jpeg similarity index 100% rename from public/img/tags/caucasian_thumb.jpeg rename to public/img/tags/caucasian/poster_thumb.jpeg diff --git a/public/img/tags/creampie.jpeg b/public/img/tags/creampie/poster.jpeg similarity index 100% rename from public/img/tags/creampie.jpeg rename to public/img/tags/creampie/poster.jpeg diff --git a/public/img/tags/creampie_thumb.jpeg b/public/img/tags/creampie/poster_thumb.jpeg similarity index 100% rename from public/img/tags/creampie_thumb.jpeg rename to public/img/tags/creampie/poster_thumb.jpeg diff --git a/public/img/tags/da-tp/1.jpeg b/public/img/tags/da-tp/1.jpeg new file mode 100755 index 00000000..4e0178bf Binary files /dev/null and b/public/img/tags/da-tp/1.jpeg differ diff --git a/public/img/tags/da-tp/1_thumb.jpeg b/public/img/tags/da-tp/1_thumb.jpeg new file mode 100755 index 00000000..0dd1faf6 Binary files /dev/null and b/public/img/tags/da-tp/1_thumb.jpeg differ diff --git a/public/img/tags/da-tp/2.jpeg b/public/img/tags/da-tp/2.jpeg new file mode 100755 index 00000000..3d2ab4f6 Binary files /dev/null and b/public/img/tags/da-tp/2.jpeg differ diff --git a/public/img/tags/da-tp/2_thumb.jpeg b/public/img/tags/da-tp/2_thumb.jpeg new file mode 100755 index 00000000..2b8c867d Binary files /dev/null and b/public/img/tags/da-tp/2_thumb.jpeg differ diff --git a/public/img/tags/da-tp/3.jpeg b/public/img/tags/da-tp/3.jpeg new file mode 100755 index 00000000..af80a2a9 Binary files /dev/null and b/public/img/tags/da-tp/3.jpeg differ diff --git a/public/img/tags/da-tp/3_thumb.jpeg b/public/img/tags/da-tp/3_thumb.jpeg new file mode 100755 index 00000000..c643d41c Binary files /dev/null and b/public/img/tags/da-tp/3_thumb.jpeg differ diff --git a/public/img/tags/da-tp.jpeg b/public/img/tags/da-tp/poster.jpeg similarity index 100% rename from public/img/tags/da-tp.jpeg rename to public/img/tags/da-tp/poster.jpeg diff --git a/public/img/tags/da-tp_thumb.jpeg b/public/img/tags/da-tp/poster_thumb.jpeg similarity index 100% rename from public/img/tags/da-tp_thumb.jpeg rename to public/img/tags/da-tp/poster_thumb.jpeg diff --git a/public/img/tags/double-anal.jpeg b/public/img/tags/double-anal/poster.jpeg similarity index 100% rename from public/img/tags/double-anal.jpeg rename to public/img/tags/double-anal/poster.jpeg diff --git a/public/img/tags/double-anal_thumb.jpeg b/public/img/tags/double-anal/poster_thumb.jpeg similarity index 100% rename from public/img/tags/double-anal_thumb.jpeg rename to public/img/tags/double-anal/poster_thumb.jpeg diff --git a/public/img/tags/double-penetration.jpeg b/public/img/tags/double-penetration/poster.jpeg similarity index 100% rename from public/img/tags/double-penetration.jpeg rename to public/img/tags/double-penetration/poster.jpeg diff --git a/public/img/tags/double-penetration_thumb.jpeg b/public/img/tags/double-penetration/poster_thumb.jpeg similarity index 100% rename from public/img/tags/double-penetration_thumb.jpeg rename to public/img/tags/double-penetration/poster_thumb.jpeg diff --git a/public/img/tags/double-vaginal.jpeg b/public/img/tags/double-vaginal/poster.jpeg similarity index 100% rename from public/img/tags/double-vaginal.jpeg rename to public/img/tags/double-vaginal/poster.jpeg diff --git a/public/img/tags/double-vaginal_thumb.jpeg b/public/img/tags/double-vaginal/poster_thumb.jpeg similarity index 100% rename from public/img/tags/double-vaginal_thumb.jpeg rename to public/img/tags/double-vaginal/poster_thumb.jpeg diff --git a/public/img/tags/dv-tp.jpeg b/public/img/tags/dv-tp/poster.jpeg similarity index 100% rename from public/img/tags/dv-tp.jpeg rename to public/img/tags/dv-tp/poster.jpeg diff --git a/public/img/tags/dv-tp_thumb.jpeg b/public/img/tags/dv-tp/poster_thumb.jpeg similarity index 100% rename from public/img/tags/dv-tp_thumb.jpeg rename to public/img/tags/dv-tp/poster_thumb.jpeg diff --git a/public/img/tags/ebony.jpeg b/public/img/tags/ebony/poster.jpeg similarity index 100% rename from public/img/tags/ebony.jpeg rename to public/img/tags/ebony/poster.jpeg diff --git a/public/img/tags/ebony_thumb.jpeg b/public/img/tags/ebony/poster_thumb.jpeg similarity index 100% rename from public/img/tags/ebony_thumb.jpeg rename to public/img/tags/ebony/poster_thumb.jpeg diff --git a/public/img/tags/facial.jpeg b/public/img/tags/facial/poster.jpeg similarity index 100% rename from public/img/tags/facial.jpeg rename to public/img/tags/facial/poster.jpeg diff --git a/public/img/tags/facial_thumb.jpeg b/public/img/tags/facial/poster_thumb.jpeg similarity index 100% rename from public/img/tags/facial_thumb.jpeg rename to public/img/tags/facial/poster_thumb.jpeg diff --git a/public/img/tags/gangbang/1.jpeg b/public/img/tags/gangbang/1.jpeg new file mode 100755 index 00000000..68a1daa9 Binary files /dev/null and b/public/img/tags/gangbang/1.jpeg differ diff --git a/public/img/tags/gangbang/1_thumb.jpeg b/public/img/tags/gangbang/1_thumb.jpeg new file mode 100755 index 00000000..ddab0fbe Binary files /dev/null and b/public/img/tags/gangbang/1_thumb.jpeg differ diff --git a/public/img/tags/gangbang/2.jpeg b/public/img/tags/gangbang/2.jpeg new file mode 100755 index 00000000..8dd7ca96 Binary files /dev/null and b/public/img/tags/gangbang/2.jpeg differ diff --git a/public/img/tags/gangbang/2_thumb.jpeg b/public/img/tags/gangbang/2_thumb.jpeg new file mode 100755 index 00000000..d37a5938 Binary files /dev/null and b/public/img/tags/gangbang/2_thumb.jpeg differ diff --git a/public/img/tags/gangbang/3.jpeg b/public/img/tags/gangbang/3.jpeg new file mode 100755 index 00000000..a167396f Binary files /dev/null and b/public/img/tags/gangbang/3.jpeg differ diff --git a/public/img/tags/gangbang/3_thumb.jpeg b/public/img/tags/gangbang/3_thumb.jpeg new file mode 100755 index 00000000..7c518f31 Binary files /dev/null and b/public/img/tags/gangbang/3_thumb.jpeg differ diff --git a/public/img/tags/gangbang.jpeg b/public/img/tags/gangbang/poster.jpeg similarity index 100% rename from public/img/tags/gangbang.jpeg rename to public/img/tags/gangbang/poster.jpeg diff --git a/public/img/tags/gangbang_thumb.jpeg b/public/img/tags/gangbang/poster_thumb.jpeg similarity index 100% rename from public/img/tags/gangbang_thumb.jpeg rename to public/img/tags/gangbang/poster_thumb.jpeg diff --git a/public/img/tags/interracial.jpeg b/public/img/tags/interracial/poster.jpeg similarity index 100% rename from public/img/tags/interracial.jpeg rename to public/img/tags/interracial/poster.jpeg diff --git a/public/img/tags/interracial_thumb.jpeg b/public/img/tags/interracial/poster_thumb.jpeg similarity index 100% rename from public/img/tags/interracial_thumb.jpeg rename to public/img/tags/interracial/poster_thumb.jpeg diff --git a/public/img/tags/latina.jpeg b/public/img/tags/latina/poster.jpeg similarity index 100% rename from public/img/tags/latina.jpeg rename to public/img/tags/latina/poster.jpeg diff --git a/public/img/tags/latina_thumb.jpeg b/public/img/tags/latina/poster_thumb.jpeg similarity index 100% rename from public/img/tags/latina_thumb.jpeg rename to public/img/tags/latina/poster_thumb.jpeg diff --git a/public/img/tags/lesbian.jpeg b/public/img/tags/lesbian/poster.jpeg similarity index 100% rename from public/img/tags/lesbian.jpeg rename to public/img/tags/lesbian/poster.jpeg diff --git a/public/img/tags/lesbian_thumb.jpeg b/public/img/tags/lesbian/poster_thumb.jpeg similarity index 100% rename from public/img/tags/lesbian_thumb.jpeg rename to public/img/tags/lesbian/poster_thumb.jpeg diff --git a/public/img/tags/mff.jpeg b/public/img/tags/mff/poster.jpeg similarity index 100% rename from public/img/tags/mff.jpeg rename to public/img/tags/mff/poster.jpeg diff --git a/public/img/tags/mff_thumb.jpeg b/public/img/tags/mff/poster_thumb.jpeg similarity index 100% rename from public/img/tags/mff_thumb.jpeg rename to public/img/tags/mff/poster_thumb.jpeg diff --git a/public/img/tags/mfm/0.jpg b/public/img/tags/mfm/0.jpg new file mode 100755 index 00000000..7b41e11c Binary files /dev/null and b/public/img/tags/mfm/0.jpg differ diff --git a/public/img/tags/mfm/0_thumb.jpg b/public/img/tags/mfm/0_thumb.jpg new file mode 100755 index 00000000..b58d71e5 Binary files /dev/null and b/public/img/tags/mfm/0_thumb.jpg differ diff --git a/public/img/tags/mfm.jpeg b/public/img/tags/mfm/poster.jpeg similarity index 100% rename from public/img/tags/mfm.jpeg rename to public/img/tags/mfm/poster.jpeg diff --git a/public/img/tags/mfm_thumb.jpeg b/public/img/tags/mfm/poster_thumb.jpeg similarity index 100% rename from public/img/tags/mfm_thumb.jpeg rename to public/img/tags/mfm/poster_thumb.jpeg diff --git a/public/img/tags/oral-creampie.jpeg b/public/img/tags/oral-creampie/poster.jpeg similarity index 100% rename from public/img/tags/oral-creampie.jpeg rename to public/img/tags/oral-creampie/poster.jpeg diff --git a/public/img/tags/oral-creampie_thumb.jpeg b/public/img/tags/oral-creampie/poster_thumb.jpeg similarity index 100% rename from public/img/tags/oral-creampie_thumb.jpeg rename to public/img/tags/oral-creampie/poster_thumb.jpeg diff --git a/public/img/tags/orgy.jpeg b/public/img/tags/orgy/poster.jpeg similarity index 100% rename from public/img/tags/orgy.jpeg rename to public/img/tags/orgy/poster.jpeg diff --git a/public/img/tags/orgy_thumb.jpeg b/public/img/tags/orgy/poster_thumb.jpeg similarity index 100% rename from public/img/tags/orgy_thumb.jpeg rename to public/img/tags/orgy/poster_thumb.jpeg diff --git a/public/img/tags/swallowing.jpeg b/public/img/tags/swallowing/poster.jpeg similarity index 100% rename from public/img/tags/swallowing.jpeg rename to public/img/tags/swallowing/poster.jpeg diff --git a/public/img/tags/swallowing_thumb.jpeg b/public/img/tags/swallowing/poster_thumb.jpeg similarity index 100% rename from public/img/tags/swallowing_thumb.jpeg rename to public/img/tags/swallowing/poster_thumb.jpeg diff --git a/public/img/tags/tattoo.jpeg b/public/img/tags/tattoo/poster.jpeg old mode 100644 new mode 100755 similarity index 100% rename from public/img/tags/tattoo.jpeg rename to public/img/tags/tattoo/poster.jpeg diff --git a/public/img/tags/tattoo_thumb.jpeg b/public/img/tags/tattoo/poster_thumb.jpeg old mode 100644 new mode 100755 similarity index 100% rename from public/img/tags/tattoo_thumb.jpeg rename to public/img/tags/tattoo/poster_thumb.jpeg diff --git a/public/img/tags/triple-anal/1.jpeg b/public/img/tags/triple-anal/1.jpeg new file mode 100755 index 00000000..f65467bd Binary files /dev/null and b/public/img/tags/triple-anal/1.jpeg differ diff --git a/public/img/tags/triple-anal/1_thumb.jpeg b/public/img/tags/triple-anal/1_thumb.jpeg new file mode 100755 index 00000000..f65467bd Binary files /dev/null and b/public/img/tags/triple-anal/1_thumb.jpeg differ diff --git a/public/img/tags/triple-anal/2.jpeg b/public/img/tags/triple-anal/2.jpeg new file mode 100755 index 00000000..fb60cc79 Binary files /dev/null and b/public/img/tags/triple-anal/2.jpeg differ diff --git a/public/img/tags/triple-anal/2_thumb.jpeg b/public/img/tags/triple-anal/2_thumb.jpeg new file mode 100755 index 00000000..2118e2d9 Binary files /dev/null and b/public/img/tags/triple-anal/2_thumb.jpeg differ diff --git a/public/img/tags/triple-anal.jpeg b/public/img/tags/triple-anal/poster.jpeg similarity index 100% rename from public/img/tags/triple-anal.jpeg rename to public/img/tags/triple-anal/poster.jpeg diff --git a/public/img/tags/triple-anal_thumb.jpeg b/public/img/tags/triple-anal/poster_thumb.jpeg similarity index 100% rename from public/img/tags/triple-anal_thumb.jpeg rename to public/img/tags/triple-anal/poster_thumb.jpeg diff --git a/seeds/04_media.js b/seeds/04_media.js index a5e36253..1eed8233 100644 --- a/seeds/04_media.js +++ b/seeds/04_media.js @@ -3,7 +3,7 @@ const upsert = require('../src/utils/upsert'); function getMedia(tagsMap) { return [ { - path: 'tags/airtight.jpeg', + path: 'tags/airtight/poster.jpeg', target_id: tagsMap.airtight, role: 'poster', comment: 'Jynx Maze in "Pump My Ass Full of Cum 3" for Jules Jordan', @@ -19,41 +19,47 @@ function getMedia(tagsMap) { comment: 'Chloe Amour in "DP Masters 4" for Jules Jordan', }, { - path: 'tags/airtight/0.jpeg', + path: 'tags/airtight/0/poster.jpeg', domain: 'tags', target_id: tagsMap.airtight, comment: 'Sheena Shaw in "Ass Worship 14" for Jules Jordan', }, { - path: 'tags/anal.jpeg', + path: 'tags/anal/poster.jpeg', target_id: tagsMap.anal, role: 'poster', comment: '', }, { - path: 'tags/double-penetration.jpeg', + path: 'tags/double-penetration/poster.jpeg', target_id: tagsMap['double-penetration'], role: 'poster', comment: '', }, { - path: 'tags/double-anal.jpeg', + path: 'tags/double-anal/poster.jpeg', target_id: tagsMap['double-anal'], role: 'poster', comment: '', }, { - path: 'tags/double-vaginal.jpeg', + path: 'tags/double-vaginal/poster.jpeg', target_id: tagsMap['double-vaginal'], role: 'poster', comment: '', }, { - path: 'tags/da-tp.jpeg', + path: 'tags/da-tp/poster.jpeg', target_id: tagsMap['da-tp'], role: 'poster', comment: 'Ninel Mojado aka Mira Cuckold in GIO063 for LegalPorno', }, + { + path: 'tags/da-tp/3.jpeg', + target_id: tagsMap['da-tp'], + role: 'photo', + comment: 'Evelina Darling in GIO294', + }, { path: 'tags/da-tp/1.jpeg', target_id: tagsMap['da-tp'], @@ -67,19 +73,19 @@ function getMedia(tagsMap) { comment: 'Angel Smalls in GIO408 for LegalPorno', }, { - path: 'tags/dv-tp.jpeg', + path: 'tags/dv-tp/poster.jpeg', target_id: tagsMap['dv-tp'], role: 'poster', comment: 'Juelz Ventura in "Gangbanged 5" for Elegant Angel', }, { - path: 'tags/tattoo.jpeg', + path: 'tags/tattoo/poster.jpeg', target_id: tagsMap.tattoo, role: 'poster', comment: 'Kali Roses in "Goes All In For Anal" for Hussie Pass', }, { - path: 'tags/triple-anal.jpeg', + path: 'tags/triple-anal/poster.jpeg', target_id: tagsMap['triple-anal'], role: 'poster', comment: 'Kristy Black in SZ1986 for LegalPorno', @@ -97,13 +103,13 @@ function getMedia(tagsMap) { comment: 'Kira Thorn in GIO1018 for LegalPorno', }, { - path: 'tags/blowbang.jpeg', + path: 'tags/blowbang/poster.jpeg', target_id: tagsMap.blowbang, role: 'poster', comment: '', }, { - path: 'tags/gangbang.jpeg', + path: 'tags/gangbang/poster.jpeg', target_id: tagsMap.gangbang, role: 'poster', comment: '', @@ -127,85 +133,85 @@ function getMedia(tagsMap) { comment: 'Kelsi Monroe in "Brazzers House 2, Day 2" for Brazzers', }, { - path: 'tags/mff.jpeg', + path: 'tags/mff/poster.jpeg', target_id: tagsMap.mff, role: 'poster', comment: '', }, { - path: 'tags/mfm.jpeg', + path: 'tags/mfm/poster.jpeg', target_id: tagsMap.mfm, role: 'poster', comment: '', }, { - path: 'tags/orgy.jpeg', + path: 'tags/orgy/poster.jpeg', target_id: tagsMap.orgy, role: 'poster', comment: '', }, { - path: 'tags/asian.jpeg', + path: 'tags/asian/poster.jpeg', target_id: tagsMap.asian, role: 'poster', comment: '', }, { - path: 'tags/caucasian.jpeg', + path: 'tags/caucasian/poster.jpeg', target_id: tagsMap.caucasian, role: 'poster', comment: '', }, { - path: 'tags/ebony.jpeg', + path: 'tags/ebony/poster.jpeg', target_id: tagsMap.ebony, role: 'poster', comment: '', }, { - path: 'tags/latina.jpeg', + path: 'tags/latina/poster.jpeg', target_id: tagsMap.latina, role: 'poster', comment: '', }, { - path: 'tags/interracial.jpeg', + path: 'tags/interracial/poster.jpeg', target_id: tagsMap.interracial, role: 'poster', comment: '', }, { - path: 'tags/facial.jpeg', + path: 'tags/facial/poster.jpeg', target_id: tagsMap.facial, role: 'poster', comment: '', }, { - path: 'tags/bukkake.jpeg', + path: 'tags/bukkake/poster.jpeg', target_id: tagsMap.bukkake, role: 'poster', comment: '', }, { - path: 'tags/swallowing.jpeg', + path: 'tags/swallowing/poster.jpeg', target_id: tagsMap.swallowing, role: 'poster', comment: '', }, { - path: 'tags/creampie.jpeg', + path: 'tags/creampie/poster.jpeg', target_id: tagsMap.creampie, role: 'poster', comment: '', }, { - path: 'tags/anal-creampie.jpeg', + path: 'tags/anal-creampie/poster.jpeg', target_id: tagsMap['anal-creampie'], role: 'poster', comment: '', }, { - path: 'tags/oral-creampie.jpeg', + path: 'tags/oral-creampie/poster.jpeg', target_id: tagsMap['oral-creampie'], role: 'poster', comment: '', diff --git a/src/actors.js b/src/actors.js index b161c31b..617e62de 100644 --- a/src/actors.js +++ b/src/actors.js @@ -332,8 +332,9 @@ async function scrapeActors(actorNames) { const profile = await scraper.fetchProfile(actorEntry ? actorEntry.name : actorName); return { - scraper: scraperSlug, ...profile, + name: actorName, + scraper: scraperSlug, }; }); diff --git a/src/scrapers/freeones.js b/src/scrapers/freeones.js index 7711a1c3..0f0a02bb 100644 --- a/src/scrapers/freeones.js +++ b/src/scrapers/freeones.js @@ -1,135 +1,86 @@ 'use strict'; -/* eslint-disable newline-per-chained-call */ const bhttp = require('bhttp'); const { JSDOM } = require('jsdom'); const moment = require('moment'); -async function scrapeProfileFrontpage(html, url, name) { +function scrapeProfile(html, actorName) { const { document } = new JSDOM(html).window; - const bioEl = document.querySelector('.dashboard-bio-list'); + const profile = { name: actorName }; - const bioUrl = `https:${document.querySelector('.seemore a').href}`; + const bio = Array.from(document.querySelectorAll('a[href^="/babes"]'), el => decodeURI(el.href)).reduce((acc, item) => { + const keyMatch = item.match(/\[\w+\]/); - const keys = Array.from(bioEl.querySelectorAll('dt'), el => el.textContent.trim()); - const values = Array.from(bioEl.querySelectorAll('dd'), el => el.textContent.trim()); + if (keyMatch) { + const key = keyMatch[0].slice(1, -1); + const [, value] = item.split('='); - const bio = keys.reduce((acc, key, index) => ({ ...acc, [key]: values[index] }), {}); + // both hip and waist link to 'waist', assume biggest value is hip + if (key === 'waist' && acc.waist) { + if (acc.waist > value) { + acc.hip = acc.waist; + acc.waist = value; - const profile = { - name, - gender: 'female', - }; + return acc; + } - const birthdateString = bio['Date of Birth:']; - const measurementsString = bio['Measurements:']; + acc.hip = value; - const birthCityString = bio['Place of Birth:']; - const birthCity = birthCityString !== undefined && birthCityString !== 'Unknown' && birthCityString !== 'Unknown (add)' && birthCityString; + return acc; + } - const birthCountryString = bio['Country of Origin:']; - const birthCountry = birthCountryString !== undefined && birthCountryString !== 'Unknown' && birthCountryString !== 'Unknown (add)' && birthCountryString; + acc[key] = value; + } - const piercingsString = bio['Piercings:']; - const tattoosString = bio['Tattoos:']; + return acc; + }, {}); - if (birthdateString && birthdateString !== 'Unknown (add)') profile.birthdate = moment.utc(birthdateString.slice(0, birthdateString.indexOf(' (')), 'MMMM D, YYYY').toDate(); - if (measurementsString) [profile.bust, profile.waist, profile.hip] = measurementsString.split('-').map(measurement => (measurement === '??' ? null : measurement)); + if (bio.dateOfBirth) profile.birthdate = moment.utc(bio.dateOfBirth, 'YYYY-MM-DD').toDate(); - if (bio['Fake Boobs:']) profile.naturalBoobs = bio['Fake Boobs:'] === 'No'; - profile.birthPlace = `${birthCity || ''}${birthCity ? ', ' : ''}${birthCountry || ''}`; + if (profile.placeOfBirth || bio.country) profile.birthPlace = `${bio.placeOfBirth}, ${bio.country}`; + profile.eyes = bio.eyeColor; + profile.hair = bio.hairColor; + profile.ethnicity = bio.ethnicity; - profile.hair = bio['Hair Color:'].toLowerCase(); - profile.eyes = bio['Eye Color:'].toLowerCase(); + profile.bust = bio.bra; + if (bio.waist) profile.waist = Number(bio.waist.split(',')[0]); + if (bio.hip) profile.hip = Number(bio.hip.split(',')[0]); - if (piercingsString) profile.hasPiercings = !!(piercingsString !== 'Unknown (add)' && piercingsString !== 'None'); - if (tattoosString) profile.hasTattoos = !!(tattoosString !== 'Unknown (add)' && tattoosString !== 'None'); + if (bio.height) profile.height = Number(bio.height.split(',')[0]); + if (bio.weight) profile.weight = Number(bio.weight.split(',')[0]); - if (profile.hasPiercings && piercingsString !== 'various') profile.piercings = piercingsString; - if (profile.hasTattoos && tattoosString !== 'various') profile.tattoos = tattoosString; - - profile.social = Array.from(bioEl.querySelectorAll('.dashboard-socialmedia a'), el => el.href); - - return { - profile, - url: bioUrl, - }; -} - -async function scrapeProfileBio(html, frontpageProfile, url, name) { - const { document } = new JSDOM(html).window; - const bioEl = document.querySelector('#biographyTable'); - - const keys = Array.from(bioEl.querySelectorAll('td:nth-child(1)'), el => el.textContent.trim()); - const values = Array.from(bioEl.querySelectorAll('td:nth-child(2)'), el => el.textContent.trim()); - - const bio = keys.reduce((acc, key, index) => ({ ...acc, [key]: values[index] }), {}); - - const profile = { - ...frontpageProfile, - name, - gender: 'female', - }; - - const birthdateString = bio['Date of Birth:']; - const measurementsString = bio['Measurements:']; - - const birthCityString = bio['Place of Birth:']; - const birthCity = birthCityString !== undefined && birthCityString !== 'Unknown' && birthCityString !== 'Unknown (add)' && birthCityString; - - const birthCountryString = bio['Country of Origin:']; - const birthCountry = birthCountryString !== undefined && birthCountryString !== 'Unknown' && birthCountryString !== 'Unknown (add)' && birthCountryString; - - const piercingsString = bio['Piercings:']; - const tattoosString = bio['Tattoos:']; - - if (birthdateString && birthdateString !== 'Unknown') profile.birthdate = moment.utc(birthdateString.slice(0, birthdateString.indexOf(' (')), 'MMMM D, YYYY').toDate(); - if (measurementsString) [profile.bust, profile.waist, profile.hip] = measurementsString.split('-').map(measurement => (measurement === '??' ? null : measurement)); - - if (bio['Fake boobs']) profile.naturalBoobs = bio['Fake boobs:'] === 'No'; - profile.ethnicity = bio['Ethnicity:']; - - profile.birthPlace = `${birthCity || ''}${birthCity ? ', ' : ''}${birthCountry || ''}`; - - profile.hair = bio['Hair Color:'].toLowerCase(); - profile.eyes = bio['Eye Color:'].toLowerCase(); - profile.height = Number(bio['Height:'].match(/\d+/)[0]); - profile.weight = Number(bio['Weight:'].match(/\d+/)[0]); - - if (piercingsString) profile.hasPiercings = !!(piercingsString !== 'Unknown (add)' && piercingsString !== 'None'); - if (tattoosString) profile.hasTattoos = !!(tattoosString !== 'Unknown (add)' && tattoosString !== 'None'); - - if (profile.hasPiercings && piercingsString !== 'various') profile.piercings = piercingsString; - if (profile.hasTattoos && tattoosString !== 'various') profile.tattoos = tattoosString; - - profile.social = Array.from(bioEl.querySelectorAll('#socialmedia a'), el => el.href); + profile.social = Array.from(document.querySelectorAll('.profile-meta-item a.social-icons'), el => el.href); + profile.avatar = document.querySelector('.profile-image-large img').src; return profile; } +function scrapeSearch(html) { + const { document } = new JSDOM(html).window; + + return document.querySelector('a.image-link')?.href || null; +} + async function fetchProfile(actorName) { - const slug = actorName.replace(' ', '_'); - const frontpageUrl = `https://www.freeones.com/html/v_links/${slug}`; + const actorSlug = actorName.toLowerCase().replace(/\s+/g, '-'); - const resFrontpage = await bhttp.get(frontpageUrl); + const res = await bhttp.get(`https://freeones.nl/${actorSlug}/profile`); - if (resFrontpage.statusCode === 200) { - const { url, bio } = await scrapeProfileFrontpage(resFrontpage.body.toString(), frontpageUrl, actorName); - const resBio = await bhttp.get(url); - - return scrapeProfileBio(resBio.body.toString(), bio, url, actorName); + if (res.statusCode === 200) { + return scrapeProfile(res.body.toString(), actorName); } - // apparently some actors are appended 'Babe' as their surname... - const fallbackSlug = `${slug}_Babe`; - const fallbackUrl = `https://www.freeones.com/html/s_links/${fallbackSlug}`; - const resFallback = await bhttp.get(fallbackUrl); + const searchRes = await bhttp.get(`https://freeones.nl/babes?q=${actorName}`); + const actorPath = scrapeSearch(searchRes.body.toString()); - if (resFallback.statusCode === 200) { - const { url, profile } = await scrapeProfileFrontpage(resFallback.body.toString(), fallbackUrl, actorName); - const resBio = await bhttp.get(url); + if (actorPath) { + const actorRes = await bhttp.get(`https://freeones.nl${actorPath}/profile`); - return scrapeProfileBio(resBio.body.toString(), profile, url, actorName); + if (actorRes.statusCode === 200) { + return scrapeProfile(actorRes.body.toString(), actorName); + } + + return null; } return null; diff --git a/src/scrapers/freeones_legacy.js b/src/scrapers/freeones_legacy.js new file mode 100644 index 00000000..7711a1c3 --- /dev/null +++ b/src/scrapers/freeones_legacy.js @@ -0,0 +1,140 @@ +'use strict'; + +/* eslint-disable newline-per-chained-call */ +const bhttp = require('bhttp'); +const { JSDOM } = require('jsdom'); +const moment = require('moment'); + +async function scrapeProfileFrontpage(html, url, name) { + const { document } = new JSDOM(html).window; + const bioEl = document.querySelector('.dashboard-bio-list'); + + const bioUrl = `https:${document.querySelector('.seemore a').href}`; + + const keys = Array.from(bioEl.querySelectorAll('dt'), el => el.textContent.trim()); + const values = Array.from(bioEl.querySelectorAll('dd'), el => el.textContent.trim()); + + const bio = keys.reduce((acc, key, index) => ({ ...acc, [key]: values[index] }), {}); + + const profile = { + name, + gender: 'female', + }; + + const birthdateString = bio['Date of Birth:']; + const measurementsString = bio['Measurements:']; + + const birthCityString = bio['Place of Birth:']; + const birthCity = birthCityString !== undefined && birthCityString !== 'Unknown' && birthCityString !== 'Unknown (add)' && birthCityString; + + const birthCountryString = bio['Country of Origin:']; + const birthCountry = birthCountryString !== undefined && birthCountryString !== 'Unknown' && birthCountryString !== 'Unknown (add)' && birthCountryString; + + const piercingsString = bio['Piercings:']; + const tattoosString = bio['Tattoos:']; + + if (birthdateString && birthdateString !== 'Unknown (add)') profile.birthdate = moment.utc(birthdateString.slice(0, birthdateString.indexOf(' (')), 'MMMM D, YYYY').toDate(); + if (measurementsString) [profile.bust, profile.waist, profile.hip] = measurementsString.split('-').map(measurement => (measurement === '??' ? null : measurement)); + + if (bio['Fake Boobs:']) profile.naturalBoobs = bio['Fake Boobs:'] === 'No'; + profile.birthPlace = `${birthCity || ''}${birthCity ? ', ' : ''}${birthCountry || ''}`; + + profile.hair = bio['Hair Color:'].toLowerCase(); + profile.eyes = bio['Eye Color:'].toLowerCase(); + + if (piercingsString) profile.hasPiercings = !!(piercingsString !== 'Unknown (add)' && piercingsString !== 'None'); + if (tattoosString) profile.hasTattoos = !!(tattoosString !== 'Unknown (add)' && tattoosString !== 'None'); + + if (profile.hasPiercings && piercingsString !== 'various') profile.piercings = piercingsString; + if (profile.hasTattoos && tattoosString !== 'various') profile.tattoos = tattoosString; + + profile.social = Array.from(bioEl.querySelectorAll('.dashboard-socialmedia a'), el => el.href); + + return { + profile, + url: bioUrl, + }; +} + +async function scrapeProfileBio(html, frontpageProfile, url, name) { + const { document } = new JSDOM(html).window; + const bioEl = document.querySelector('#biographyTable'); + + const keys = Array.from(bioEl.querySelectorAll('td:nth-child(1)'), el => el.textContent.trim()); + const values = Array.from(bioEl.querySelectorAll('td:nth-child(2)'), el => el.textContent.trim()); + + const bio = keys.reduce((acc, key, index) => ({ ...acc, [key]: values[index] }), {}); + + const profile = { + ...frontpageProfile, + name, + gender: 'female', + }; + + const birthdateString = bio['Date of Birth:']; + const measurementsString = bio['Measurements:']; + + const birthCityString = bio['Place of Birth:']; + const birthCity = birthCityString !== undefined && birthCityString !== 'Unknown' && birthCityString !== 'Unknown (add)' && birthCityString; + + const birthCountryString = bio['Country of Origin:']; + const birthCountry = birthCountryString !== undefined && birthCountryString !== 'Unknown' && birthCountryString !== 'Unknown (add)' && birthCountryString; + + const piercingsString = bio['Piercings:']; + const tattoosString = bio['Tattoos:']; + + if (birthdateString && birthdateString !== 'Unknown') profile.birthdate = moment.utc(birthdateString.slice(0, birthdateString.indexOf(' (')), 'MMMM D, YYYY').toDate(); + if (measurementsString) [profile.bust, profile.waist, profile.hip] = measurementsString.split('-').map(measurement => (measurement === '??' ? null : measurement)); + + if (bio['Fake boobs']) profile.naturalBoobs = bio['Fake boobs:'] === 'No'; + profile.ethnicity = bio['Ethnicity:']; + + profile.birthPlace = `${birthCity || ''}${birthCity ? ', ' : ''}${birthCountry || ''}`; + + profile.hair = bio['Hair Color:'].toLowerCase(); + profile.eyes = bio['Eye Color:'].toLowerCase(); + profile.height = Number(bio['Height:'].match(/\d+/)[0]); + profile.weight = Number(bio['Weight:'].match(/\d+/)[0]); + + if (piercingsString) profile.hasPiercings = !!(piercingsString !== 'Unknown (add)' && piercingsString !== 'None'); + if (tattoosString) profile.hasTattoos = !!(tattoosString !== 'Unknown (add)' && tattoosString !== 'None'); + + if (profile.hasPiercings && piercingsString !== 'various') profile.piercings = piercingsString; + if (profile.hasTattoos && tattoosString !== 'various') profile.tattoos = tattoosString; + + profile.social = Array.from(bioEl.querySelectorAll('#socialmedia a'), el => el.href); + + return profile; +} + +async function fetchProfile(actorName) { + const slug = actorName.replace(' ', '_'); + const frontpageUrl = `https://www.freeones.com/html/v_links/${slug}`; + + const resFrontpage = await bhttp.get(frontpageUrl); + + if (resFrontpage.statusCode === 200) { + const { url, bio } = await scrapeProfileFrontpage(resFrontpage.body.toString(), frontpageUrl, actorName); + const resBio = await bhttp.get(url); + + return scrapeProfileBio(resBio.body.toString(), bio, url, actorName); + } + + // apparently some actors are appended 'Babe' as their surname... + const fallbackSlug = `${slug}_Babe`; + const fallbackUrl = `https://www.freeones.com/html/s_links/${fallbackSlug}`; + const resFallback = await bhttp.get(fallbackUrl); + + if (resFallback.statusCode === 200) { + const { url, profile } = await scrapeProfileFrontpage(resFallback.body.toString(), fallbackUrl, actorName); + const resBio = await bhttp.get(url); + + return scrapeProfileBio(resBio.body.toString(), profile, url, actorName); + } + + return null; +} + +module.exports = { + fetchProfile, +}; diff --git a/src/scrapers/legalporno.js b/src/scrapers/legalporno.js index 00a29b87..b05f83f3 100644 --- a/src/scrapers/legalporno.js +++ b/src/scrapers/legalporno.js @@ -28,6 +28,10 @@ function getPoster(posterElement, sceneId) { const posterRangeData = posterRange ? JSON.parse(posterRange) : null; const posterTimeRange = posterRangeData[Math.floor(Math.random() * posterRangeData.length)]; + if (!posterTimeRange) { + return null; + } + if (typeof posterTimeRange === 'number') { // poster time is already a single time value return `https://legalporno.com/casting/${sceneId}/${posterTimeRange}`; diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index 4c99b473..26d44810 100644 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -25,6 +25,7 @@ const xempire = require('./xempire'); // profiles const freeones = require('./freeones'); +const freeonesLegacy = require('./freeones_legacy'); const pornhub = require('./pornhub'); module.exports = { @@ -54,11 +55,12 @@ module.exports = { // ordered by data priority xempire, brazzers, - freeones, - kellymadison, - julesjordan, legalporno, pornhub, + freeones, + freeonesLegacy, + kellymadison, + julesjordan, ddfnetwork, }, };