Added MariskaX.
| After Width: | Height: | Size: 2.6 KiB | 
| After Width: | Height: | Size: 2.6 KiB | 
| After Width: | Height: | Size: 2.6 KiB | 
| After Width: | Height: | Size: 4.1 KiB | 
| After Width: | Height: | Size: 8.3 KiB | 
| After Width: | Height: | Size: 133 KiB | 
| After Width: | Height: | Size: 99 KiB | 
| After Width: | Height: | Size: 119 KiB | 
| After Width: | Height: | Size: 20 KiB | 
| After Width: | Height: | Size: 25 KiB | 
|  | @ -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', | ||||
|  |  | |||
|  | @ -32,6 +32,8 @@ function scrapeAll(scenes, site) { | |||
| 
 | ||||
| 		release.entryId = `${formatDate(release.date, 'YYYY-MM-DD')}-${slugify(release.title)}`; | ||||
| 
 | ||||
| 		console.log(release); | ||||
| 
 | ||||
| 		return release; | ||||
| 	}); | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
| 	}); | ||||
| } | ||||
|  |  | |||
|  | @ -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, | ||||
| }; | ||||
|  | @ -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, | ||||
|  |  | |||