diff --git a/public/img/logos/mariskax/favicon.png b/public/img/logos/mariskax/favicon.png new file mode 100644 index 00000000..871498b4 Binary files /dev/null and b/public/img/logos/mariskax/favicon.png differ diff --git a/public/img/logos/mariskax/favicon_dark.png b/public/img/logos/mariskax/favicon_dark.png new file mode 100644 index 00000000..01291fc3 Binary files /dev/null and b/public/img/logos/mariskax/favicon_dark.png differ diff --git a/public/img/logos/mariskax/favicon_light.png b/public/img/logos/mariskax/favicon_light.png new file mode 100644 index 00000000..e4f06354 Binary files /dev/null and b/public/img/logos/mariskax/favicon_light.png differ diff --git a/public/img/logos/mariskax/lazy/mariska_logo.png b/public/img/logos/mariskax/lazy/mariska_logo.png new file mode 100644 index 00000000..9efaa039 Binary files /dev/null and b/public/img/logos/mariskax/lazy/mariska_logo.png differ diff --git a/public/img/logos/mariskax/lazy/mariskax.png b/public/img/logos/mariskax/lazy/mariskax.png new file mode 100644 index 00000000..15325068 Binary files /dev/null and b/public/img/logos/mariskax/lazy/mariskax.png differ diff --git a/public/img/logos/mariskax/mariska_logo.png b/public/img/logos/mariskax/mariska_logo.png new file mode 100644 index 00000000..3ffdc2be Binary files /dev/null and b/public/img/logos/mariskax/mariska_logo.png differ diff --git a/public/img/logos/mariskax/mariskax.png b/public/img/logos/mariskax/mariskax.png new file mode 100644 index 00000000..b3609f52 Binary files /dev/null and b/public/img/logos/mariskax/mariskax.png differ diff --git a/public/img/logos/mariskax/misc/mariska-x_tld.png b/public/img/logos/mariskax/misc/mariska-x_tld.png new file mode 100644 index 00000000..bd74f753 Binary files /dev/null and b/public/img/logos/mariskax/misc/mariska-x_tld.png differ diff --git a/public/img/logos/mariskax/thumbs/mariska_logo.png b/public/img/logos/mariskax/thumbs/mariska_logo.png new file mode 100644 index 00000000..2f2a4827 Binary files /dev/null and b/public/img/logos/mariskax/thumbs/mariska_logo.png differ diff --git a/public/img/logos/mariskax/thumbs/mariskax.png b/public/img/logos/mariskax/thumbs/mariskax.png new file mode 100644 index 00000000..edea6472 Binary files /dev/null and b/public/img/logos/mariskax/thumbs/mariskax.png differ diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 24311dea..2e969acb 100755 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -5681,6 +5681,15 @@ const sites = [ tags: ['latina'], parent: 'mamacitaz', }, + // MARISKA X + { + name: 'MariskaX', + slug: 'mariskax', + url: 'https://tour.mariskax.com', + parameters: { + latest: 'https://tour.mariskax.com/scenes?page={page}', + }, + }, // METRO HD { slug: 'devianthardcore', diff --git a/src/scrapers/bamvisions.js b/src/scrapers/bamvisions.js index 46aeee51..f254a016 100755 --- a/src/scrapers/bamvisions.js +++ b/src/scrapers/bamvisions.js @@ -32,6 +32,8 @@ function scrapeAll(scenes, site) { release.entryId = `${formatDate(release.date, 'YYYY-MM-DD')}-${slugify(release.title)}`; + console.log(release); + return release; }); } diff --git a/src/scrapers/julesjordan.js b/src/scrapers/julesjordan.js index f7bc8f4e..fe46756b 100755 --- a/src/scrapers/julesjordan.js +++ b/src/scrapers/julesjordan.js @@ -101,11 +101,10 @@ function scrapeUpcoming(scenes, channel) { })); release.poster = query.img('img') || query.img('img', { attribute: 'src0_1x' }); + release.teaser = html.match(/src=['"](https:\/\/.*\.mp4)['"]/)?.[1]; release.entryId = channel.parameters?.entryIdFromTitle ? slugify(release.title) : getEntryId(html); - // TODO: teaser - return release; }); } diff --git a/src/scrapers/mariskax.js b/src/scrapers/mariskax.js new file mode 100644 index 00000000..c5cd2d36 --- /dev/null +++ b/src/scrapers/mariskax.js @@ -0,0 +1,96 @@ +'use strict'; + +const unprint = require('unprint'); + +const slugify = require('../utils/slugify'); + +function scrapeLatest(scenes) { + return scenes.map(({ query }) => { + const release = {}; + + release.title = query.content('.title a'); + release.url = query.url('.title a') || query.url('.thumb-wrap a'); + + release.entryId = new URL(release.url).pathname.match(/view\/(\d+)\//)[1]; + + release.date = query.date('time', 'Do MMM YYYY', { match: /\d+\w+ \w+ \d{4}/ }); + release.duration = query.duration('.total-time'); + + release.actors = query.all('.models a').map((el) => ({ + name: unprint.query.content(el), + url: unprint.query.url(el, null), + })); + + [release.poster, ...release.photos] = query.json('.thumb-wrap a', { attribute: 'data-images' }); + + release.photoCount = query.number('.total-photos'); + + return release; + }); +} + +async function fetchLatest(channel, page) { + const res = await unprint.get(`https://tour.mariskax.com/scenes?page=${page}`, { + selectAll: '.content-item', + timeout: 30000, // slow site + }); + + if (res.ok) { + return scrapeLatest(res.context); + } + + return res.status; +} + +function scrapeScene({ query }, { url }) { + const release = {}; + + release.title = query.content('.content-meta .title'); + release.entryId = new URL(url).pathname.match(/view\/(\d+)\//)[1]; + + release.date = query.date('.post-date', 'Do MMM YYYY', { match: /\d+\w+ \w+ \d{4}/ }); + + release.actors = query.all('.content-meta .models a').map((el) => ({ + name: unprint.query.content(el), + url: unprint.query.url(el, null), + })); + + release.poster = query.poster('.trailer-wrap video'); + release.trailer = query.video('.trailer-wrap source') || query.video('.download-trailer-wrap a', { attribute: 'href' }); + + return release; +} + +async function fetchProfile(actor) { + const res = await unprint.post('https://tour.mariskax.com/search-preview-mrx', `q=${slugify(actor.name, '+')}`, { + headers: { + 'Accept-Language': 'en-US,en', // necessary for some reason + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + }, + }); + + if (res.ok) { + const model = res.data.find((result) => result.type === 'model' && slugify(result.title) === actor.slug); + + if (model) { + const curatedModel = { + entryId: model.url?.match(/model\/(\d+)\//)?.[1], + url: model.url, + avatar: model.thumb, + }; + + return curatedModel; + } + } + + return null; +} + +module.exports = { + fetchLatest, + scrapeScene: { + scraper: scrapeScene, + unprint: true, + }, + fetchProfile, +}; diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index 45c30402..9357bea9 100755 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -34,6 +34,7 @@ const karups = require('./karups'); const kellymadison = require('./kellymadison'); const killergram = require('./killergram'); const kink = require('./kink'); +const mariskax = require('./mariskax'); const analvids = require('./analvids'); const littlecapricedreams = require('./littlecapricedreams'); const loveherfilms = require('./loveherfilms'); @@ -85,6 +86,7 @@ const scrapers = { bamvisions, bang, bangbros, + bluedonkeymedia, bradmontana, brazzers: mindgeek, cherrypimps, @@ -122,7 +124,7 @@ const scrapers = { littlecapricedreams, loveherfilms, mamacitaz: porndoe, - bluedonkeymedia, + mariskax, mikeadriano, mindgeek, mylf: teamskeet, @@ -242,6 +244,7 @@ const scrapers = { littlecapricedreams, mamacitaz: porndoe, men: mindgeek, + mariskax, metrohd: mindgeek, milehighmedia: mindgeek, milfvr: wankzvr,