16 Commits

Author SHA1 Message Date
DebaucheryLibrarian
4839a3b94c Allowing HTML in disclaimer. 2023-06-19 04:06:52 +02:00
DebaucheryLibrarian
d8b641e461 Removed references to effective date for older databases. 2022-02-25 22:20:28 +01:00
DebaucheryLibrarian
7b3bdadd44 1.209.4 2022-02-25 22:13:43 +01:00
DebaucheryLibrarian
5deba6b90f Passing resolved parameters into before-scrape methods. 2022-02-25 22:13:41 +01:00
DebaucheryLibrarian
a5afffc968 1.209.3 2022-02-25 00:00:21 +01:00
DebaucheryLibrarian
a239a5c593 Fixed entity scenes function for studios. Added triple anal tag alias. 2022-02-25 00:00:18 +01:00
DebaucheryLibrarian
e56e7333e3 1.209.2 2022-02-24 23:33:26 +01:00
DebaucheryLibrarian
d55e3c37cd Updated media seeds from LegalPorno to AnalVids. 2022-02-24 23:33:19 +01:00
DebaucheryLibrarian
97b78ea016 1.209.1 2022-02-24 23:30:49 +01:00
DebaucheryLibrarian
3e290b74dc Updated affiliates from LegalPorno to AnalVids. 2022-02-24 23:30:47 +01:00
DebaucheryLibrarian
65141207ae 1.209.0 2022-02-24 23:28:27 +01:00
DebaucheryLibrarian
17dfeac1af Renamed LegalPorno to AnalVids, added missing studios. 2022-02-24 23:28:24 +01:00
DebaucheryLibrarian
4a9c428d69 1.208.1 2022-02-24 22:43:01 +01:00
DebaucheryLibrarian
333f252099 Added BJ Raw to Radical. 2022-02-24 22:42:59 +01:00
DebaucheryLibrarian
38232f258a 1.208.0 2022-02-24 22:33:03 +01:00
DebaucheryLibrarian
582269cfaa Added Radical metadata layout scraper and the Got Filled and Inserted channels. 2022-02-24 22:33:00 +01:00
87 changed files with 3255 additions and 801 deletions

54
assets/components/container/container.vue Normal file → Executable file
View File

@@ -8,35 +8,40 @@
/>
<transition name="slide">
<Sidebar
v-if="showSidebar"
@toggle-sidebar="(state) => toggleSidebar(state)"
@show-filters="(state) => toggleFilters(state)"
/>
<Sidebar v-if="showSidebar" />
</transition>
<Header
@toggle-sidebar="(state) => toggleSidebar(state)"
@show-filters="(state) => toggleFilters(state)"
/>
<Header />
<p
v-if="config.showDisclaimer"
class="disclaimer"
>{{ config.disclaimer }}</p>
v-html="config.disclaimer"
/>
<p
v-if="config.showAnnouncement"
class="announcement"
v-html="config.announcement"
/>
<div
ref="content"
class="content"
@scroll="scroll"
>
<router-view @scroll="scrollToTop" />
<RouterView @scroll="scrollToTop" />
</div>
<Filters
v-if="showFilters"
@close="toggleFilters(false)"
/>
<Settings
v-if="showSettings"
@close="toggleSettings(false)"
/>
</div>
</template>
@@ -45,6 +50,7 @@ import Warning from './warning.vue';
import Header from '../header/header.vue';
import Sidebar from '../sidebar/sidebar.vue';
import Filters from '../filters/filters.vue';
import Settings from '../settings/settings.vue';
function toggleSidebar(state) {
this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar;
@@ -55,6 +61,11 @@ function toggleFilters(state) {
this.showSidebar = false;
}
function toggleSettings(state) {
this.showSettings = state;
this.showSidebar = false;
}
async function setConsent(consent, includeQueer) {
if (consent) {
this.showWarning = false;
@@ -62,7 +73,7 @@ async function setConsent(consent, includeQueer) {
}
if (includeQueer) {
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter(tag => !['gay', 'bisexual', 'transsexual'].includes(tag)));
this.$store.dispatch('setTagFilter', this.$store.state.ui.tagFilter.filter((tag) => !['gay', 'bisexual', 'transsexual'].includes(tag)));
return;
}
@@ -88,6 +99,9 @@ function scrollToTop() {
function mounted() {
document.addEventListener('click', this.blur);
window.addEventListener('resize', this.resize);
this.events.on('toggleSettings', this.toggleSettings);
this.events.on('toggleSidebar', this.toggleSidebar);
}
function beforeUnmount() {
@@ -101,12 +115,15 @@ export default {
Sidebar,
Warning,
Filters,
Settings,
},
data() {
return {
showSidebar: false,
showWarning: localStorage.getItem('consent') !== window.env.sessionId,
showFilters: false,
showSettings: false,
selected: null,
};
},
mounted,
@@ -114,6 +131,7 @@ export default {
methods: {
toggleSidebar,
toggleFilters,
toggleSettings,
setConsent,
blur,
resize,
@@ -183,13 +201,21 @@ export default {
</style>
<style lang="scss" scoped>
.disclaimer {
.disclaimer,
.announcement {
padding: .5rem 1rem;
margin: 0;
color: var(--text-light);
background: var(--warn);
font-weight: bold;
box-shadow: inset 0 0 3px var(--darken-weak);
text-align: center;
}
.disclaimer {
background: var(--warn);
}
.announcement {
background: var(--notice);
}
</style>

View File

@@ -87,7 +87,7 @@ function initEntitiesActions(store, router) {
or: [
{
date: {
isNull: ${entityType === 'channel'}
isNull: ${entityType !== 'network'}
}
}
{
@@ -96,7 +96,7 @@ function initEntitiesActions(store, router) {
}
}
]
effectiveDate: {
date: {
lessThan: $before,
greaterThan: $after
}

View File

@@ -7,22 +7,22 @@ const dateRanges = {
latest: () => ({
after: '1900-01-01',
before: dayjs.utc().toDate(),
orderBy: ['EFFECTIVE_DATE_DESC'],
orderBy: ['DATE_DESC'],
}),
upcoming: () => ({
after: dayjs.utc().toDate(),
before: '2100-01-01',
orderBy: ['EFFECTIVE_DATE_DESC'],
orderBy: ['DATE_DESC'],
}),
new: () => ({
after: '1900-01-01 00:00:00',
before: '2100-01-01',
orderBy: ['CREATED_AT_DESC', 'EFFECTIVE_DATE_ASC'],
orderBy: ['CREATED_AT_DESC', 'DATE_ASC'],
}),
all: () => ({
after: '1900-01-01',
before: '2100-01-01',
orderBy: ['EFFECTIVE_DATE_DESC'],
orderBy: ['DATE_DESC'],
}),
};

View File

@@ -298,14 +298,6 @@ module.exports = {
interval: 1000,
concurrency: 1,
},
'www.realitykings.com': {
interval: 1000,
concurrency: 1,
},
'www.mofos.com': {
interval: 1000,
concurrency: 1,
},
'westcoastproductions.com': {
interval: 100,
concurrency: 1,

View File

@@ -13,7 +13,12 @@ exports.up = async (knex) => knex.raw(`
)
SELECT releases FROM releases
INNER JOIN children ON children.id = releases.entity_id;
INNER JOIN children ON children.id = releases.entity_id
UNION
SELECT releases FROM releases
INNER JOIN children ON children.id = releases.studio_id;
$$ LANGUAGE SQL STABLE;
COMMENT ON FUNCTION entities_scenes IS E'@sortable';

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "traxxx",
"version": "1.207.5",
"version": "1.209.4",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "traxxx",
"version": "1.207.5",
"version": "1.209.4",
"license": "ISC",
"dependencies": {
"@casl/ability": "^5.2.2",

View File

@@ -1,6 +1,6 @@
{
"name": "traxxx",
"version": "1.207.5",
"version": "1.209.4",
"description": "All the latest porn releases in one place",
"main": "src/app.js",
"scripts": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -392,14 +392,14 @@ const tags = [
name: 'triple anal',
slug: 'tap',
description: 'Getting fucked in the ass by not one, two, but *three* cocks at the same time.',
priority: 7,
priority: 8,
group: 'penetration',
},
{
name: 'triple vaginal',
slug: 'tvp',
description: 'Getting fucked in the pussy by *three* cocks at the same time.',
priority: 7,
priority: 8,
group: 'penetration',
},
{
@@ -1944,6 +1944,10 @@ const aliases = [
name: 'squirt',
for: 'squirting',
},
{
name: 'tap',
for: 'tap',
},
{
name: 'tattoo',
for: 'tattoos',
@@ -1983,6 +1987,10 @@ const aliases = [
for: 'transsexual',
secondary: true,
},
{
name: 'triple anal (tap)',
for: 'tap',
},
{
name: 'shemale',
for: 'transsexual',

View File

@@ -4973,11 +4973,10 @@ const sites = [
},
// LEGALPORNO
{
slug: 'legalporno',
name: 'LegalPorno',
alias: ['clip', 'analvids', 'gonzo'],
url: 'https://www.legalporno.com',
description: 'The Best HD Porn For You!',
slug: 'analvids',
name: 'AnalVids',
alias: ['legalporno', 'clip', 'gonzo'],
url: 'https://www.analvids.com',
independent: true,
parent: 'wgcz',
},
@@ -7554,6 +7553,36 @@ const sites = [
independent: true,
parent: 'radical',
},
{
name: 'Got Filled',
slug: 'gotfilled',
url: 'https://gotfilled.com',
independent: true,
parent: 'radical',
parameters: {
layout: 'metadata',
},
},
{
name: 'Inserted',
slug: 'inserted',
url: 'https://inserted.com',
independent: true,
parent: 'radical',
parameters: {
layout: 'metadata',
},
},
{
name: 'BJ Raw',
slug: 'bjraw',
url: 'https://bjraw.com',
independent: true,
parent: 'radical',
parameters: {
layout: 'metadata',
},
},
// REALITY KINGS
{
name: 'Look At Her Now',

File diff suppressed because it is too large Load Diff

View File

@@ -598,17 +598,17 @@ const tagMedia = [
['airtight', 7, 'Lana Rhoades in "Gangbang Me 3"', 'hardx'],
['airtight', 'hime_marie_blackedraw', 'Hime Marie', 'blackedraw'],
['airtight', 6, 'Remy Lacroix in "Ass Worship 14"', 'julesjordan'],
['airtight', 'anissa_kate_legalporno', 'Anissa Kate in GP1962', 'legalporno'],
['airtight', 'anissa_kate_legalporno', 'Anissa Kate in GP1962', 'analvids'],
['airtight', 'emily_willis_blacked', 'Emily Willis', 'blacked'],
['airtight', 'diamond_foxxx_milfslikeitbig', 'Diamond Foxx in "Diamond\'s Bday Gangbang"', 'milfslikeitbig'],
['airtight', 'tory_lane_bigtitsatwork', 'Tory Lane in "I\'m Your Christmas Bonus"', 'bigtitsatwork'],
['airtight', 11, 'Malena Nazionale in "Rocco\'s Perverted Secretaries 2: Italian Edition"', 'roccosiffredi'],
['airtight', 3, 'Anita Bellini in "Triple Dick Gangbang"', 'handsonhardcore'],
['airtight', 'venera_maxima_legalporno', 'Venera Maxima in LegalPorno SZ2645', 'legalporno'],
['airtight', 'venera_maxima_legalporno', 'Venera Maxima in LegalPorno SZ2645', 'analvids'],
['airtight', 'mina_ddfnetwork', 'Remy Lacroix in "Ass Worship 14"', 'julesjordan'],
['airtight', 1, 'Jynx Maze in "Pump My Ass Full of Cum 3"', 'julesjordan'],
['airtight', 10, 'Asa Akira in "Asa Akira To The Limit"', 'julesjordan'],
['airtight', 8, 'Veronica Leal in SZ2520', 'legalporno'],
['airtight', 8, 'Veronica Leal in SZ2520', 'analvids'],
['airtight', 5, 'Chloe Amour in "DP Masters 4"', 'julesjordan'],
['airtight', 9, 'Cindy Shine in GP1658'],
['anal', 5, 'Abella Danger', 'hardx'],
@@ -667,12 +667,12 @@ const tagMedia = [
['blonde', 2, 'Isabelle Deltore', 'herlimit'],
['blowbang', 'cory_chase_interracialblowbang_4', 'Cory Chase', 'interracialblowbang'],
['blowbang', 'ana_foxxx_hardx', 'Ana Foxxx in "Facialized Vol. 4"', 'hardx'],
['blowbang', 'lisey_sweet_legalporno', 'Lisey Sweet in GIO816', 'legalporno'],
['blowbang', 'lisey_sweet_legalporno', 'Lisey Sweet in GIO816', 'analvids'],
['blowbang', 'angela_white_julesjordan', 'Angela White in "Her Biggest Gangbang Ever"', 'julesjordan'],
['blowbang', 'monika_fox_legalporno', 'Monika Fox in GL479', 'legalporno'],
['blowbang', 'monika_fox_legalporno', 'Monika Fox in GL479', 'analvids'],
['blowbang', 0, 'Lacy Lennon in "Lacy Lennon\'s First Blowbang"', 'hardx'],
['blowbang', 'zaawaadi_roccosiffredi_1', 'Zaawaadi in "My Name Is Zaawaadi"', 'roccosiffredi'],
['blowbang', 1, 'Nicole Black in GIO1680', 'legalporno'],
['blowbang', 1, 'Nicole Black in GIO1680', 'analvids'],
['blowbang', 'gina_gerson_assholefever', 'Gina Gerson in "Oppa Gangbang Style"', 'assholefever'],
['blowjob', 'clanddi_jinkcego_ddfbusty_1', 'Clanddi Jinkcego', 'ddfbusty'],
['blowjob', 'juelz_ventura_babygotboobs', 'Juelz Ventura in "A Deep DP For Dessert"', 'babygotboobs'],
@@ -713,7 +713,7 @@ const tagMedia = [
['cum-in-mouth', 4, 'Vanna Bardot and Isiah Maxwell in "Vanna Craves Isiah\'s Cock!"', 'darkx'],
['cum-in-mouth', 'kaylani_lei_milfslikeitbig', 'Kaylani Lei', 'milfslikeitbig'],
['cum-in-mouth', 2, 'Jaye Summers in "Double The Cum"', 'hardx'],
['cum-in-mouth', 'lara_frost_legalporno', 'Lara Frost in NRX059', 'legalporno'],
['cum-in-mouth', 'lara_frost_legalporno', 'Lara Frost in NRX059', 'analvids'],
['cum-in-mouth', 0, 'Vina Sky and Avi Love', 'hardx'],
['cum-on-boobs', 'september_reign_penthouse', 'September Reign in "Sensual Ride"', 'penthouse'],
['cum-on-boobs', 'gogo_fukme_devilsfilm', 'GoGo FukMe in "BAD Relatives"', 'devilsfilm'],
@@ -724,23 +724,23 @@ const tagMedia = [
['cum-on-butt', 0, 'Jynx Maze in "Don\'t Make Me Beg 4"', 'evilangel'],
['cum-on-pussy', 'katrina_moreno_elegantraw', 'Katrina Moreno in "Pump My Ass Raw!"', 'elegantraw'],
['cum-on-pussy', 0, 'Talinka A', 'sexart'],
['da-tp', 7, 'Polly Petrova in YE069', 'legalporno'],
['da-tp', 7, 'Polly Petrova in YE069', 'analvids'],
['da-tp', 5, 'Venera Maxima in GIO1287'],
['da-tp', 6, 'Adriana Chechik in "Gangbang Me"', 'hardx'],
['da-tp', 0, 'Natasha Teen in SZ2164'],
['da-tp', 1, 'Francys Belle in SZ1702', 'legalporno'],
['da-tp', 1, 'Francys Belle in SZ1702', 'analvids'],
['dap', 7, 'Adriana Chechik in "DP Masters 6"', 'julesjordan'],
['dap', 10, 'Kira Noir', 'hardx'],
['dap', 'emily_pink_legalporno', 'Emily Pink', 'legalporno'],
['dap', 'silvia_dellai_legalporno', 'Silvia Dellai in GIO1765', 'legalporno'],
['dap', 9, 'Vicky Sol in GIO1547', 'legalporno'],
['dap', 'emily_pink_legalporno', 'Emily Pink', 'analvids'],
['dap', 'silvia_dellai_legalporno', 'Silvia Dellai in GIO1765', 'analvids'],
['dap', 9, 'Vicky Sol in GIO1547', 'analvids'],
['dap', 'cherry_kiss_roccosiffredi', 'Cherry Kiss in "My Name Is Zaawaadi"', 'roccosiffredi'],
['dap', 6, 'Sheena Shaw in "Ass Worship 14"', 'julesjordan'],
['dap', 2, 'Lana Rhoades in "Lana Rhoades Unleashed"', 'hardx'],
['dap', 11, 'Haley Reed in "Young Hot Ass"', 'evilangel'],
['dap', 1, 'Ria Sunn in SZ1801', 'legalporno'],
['dap', 1, 'Ria Sunn in SZ1801', 'analvids'],
['dap', 5, 'Riley Reid in "The Gangbang of Riley Reid"', 'julesjordan'],
['dap', 0, 'Nicole Black doing double anal during a gangbang in GIO971', 'legalporno'],
['dap', 0, 'Nicole Black doing double anal during a gangbang in GIO971', 'analvids'],
['deepthroat', 'janice_griffith_throated_1', 'Janice Griffith', 'throated'],
['deepthroat', 2, 'Sarah Vandella', 'throated'],
['deepthroat', 3, 'Kira Noir in "Ebony Throat Vs Monster Cock"', 'throated'],
@@ -796,9 +796,9 @@ const tagMedia = [
['double-dildo-kiss', 3, 'Kiki Daire and Brittany', 'kenmarcus'],
['double-dildo-kiss', 2, 'Adriana Chechik and Vicki Chase in "Anal Savages"', 'julesjordan'],
['dp', 2, 'Megan Rain in "DP Masters 4"', 'julesjordan'],
['dp', 'lara_frost_legalporno', 'Lara Frost in NRX070', 'legalporno'],
['dp', 'lara_frost_legalporno', 'Lara Frost in NRX070', 'analvids'],
['dp', 6, 'Kira Noir', 'hardx'],
['dp', 3, 'Hime Marie in AA047', 'legalporno'],
['dp', 3, 'Hime Marie in AA047', 'analvids'],
['dp', 'kenna_james_tushy_1', 'Kenna James in "Yoga Retreat', 'tushy'],
['dp', 5, 'Lana Rhoades in "Gangbang Me 3"', 'hardx'],
['dp', 'juelz_ventura_babygotboobs_1', 'Juelz Ventura in "A Deep DP For Dessert"', 'babygotboobs'],
@@ -901,23 +901,23 @@ const tagMedia = [
['fisting', '1a', 'Aletta Ocean in "Solo Fisting"', '21sextury'],
['fisting', 0, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'],
['fisting-dp', 0, 'Janice Griffith and Veronica Avluv in "The Nymphomaniac\'s Apprentice', 'theupperfloor'],
['flexible', 'lara_frost_legalporno', 'Lara Frost in NRX059', 'legalporno'],
['flexible', 'lara_frost_legalporno', 'Lara Frost in NRX059', 'analvids'],
['free-use', 'jeni_angel_brazzersexxtra', 'Jeni Angel in "Gamer Girl Threesome Action"', 'brazzersexxtra'],
['free-use', 'veruca_james_brazzersexxtra', 'Veruca James in "The Perfect Maid"', 'brazzersexxtra'],
['free-use', 'gia_dibella_freeusefantasy', 'Gia Dibella in "Learning to Freeuse"', 'freeusefantasy'],
['gangbang', 5, 'Carter Cruise\'s first gangbang in "Slut Puppies 9"', 'julesjordan'],
['gangbang', 'kristen_scott_julesjordan', 'Kristen Scott in "Interracial Gangbang!"', 'julesjordan'],
['gangbang', 'emily_willis_blacked', 'Emily Willis', 'blacked'],
['gangbang', 'monika_fox_legalporno', 'Monika Fox in GL479', 'legalporno'],
['gangbang', 7, 'Alexa Flexy in GL376', 'legalporno'],
['gangbang', 'silvia_dellai_legalporno', 'Silvia Dellai in GIO1825', 'legalporno'],
['gangbang', 'lara_frost_legalporno_1', 'Lara Frost in NRX070', 'legalporno'],
['gangbang', 'monika_fox_legalporno', 'Monika Fox in GL479', 'analvids'],
['gangbang', 7, 'Alexa Flexy in GL376', 'analvids'],
['gangbang', 'silvia_dellai_legalporno', 'Silvia Dellai in GIO1825', 'analvids'],
['gangbang', 'lara_frost_legalporno_1', 'Lara Frost in NRX070', 'analvids'],
['gangbang', 'gina_gerson_assholefever', 'Gina Gerson in "Oppa Gangbang Style"', 'assholefever'],
['gangbang', 0, '"4 On 1 Gangbangs"', 'doghousedigital'],
['gangbang', 4, 'Marley Brinx in "The Gangbang of Marley Brinx"', 'julesjordan'],
['gangbang', 1, 'Ginger Lynn in "Gangbang Mystique", a photoset shot by Suze Randall, 1984. Depicting a woman \'airtight\' pushed the boundaries of pornography at the time.'],
['gaping', 1, 'Vina Sky in "Vina Sky Does Anal"', 'hardx'],
['gaping', 4, 'Nicole Black in GIO1626', 'legalporno'],
['gaping', 4, 'Nicole Black in GIO1626', 'analvids'],
['gaping', 'poster', 'Zoey Monroe in "Manuel DPs Them All 5"', 'julesjordan'],
['gaping', 3, 'Jessyka Swan', '21sextury'],
['gaping', 2, 'Alex Grey in "DP Masters 5"', 'julesjordan'],
@@ -958,7 +958,7 @@ const tagMedia = [
['mfm', 8, 'Ariana Marie in "DP Masters 7"', 'julesjordan'],
['mfm', 1, 'Lana Rhoades in "Gangbang Me 3"', 'hardx'],
['mfm', 'franceska_jaimes_digitalplayground', 'Franceska Jaimes in "Monarch"', 'digitalplayground'],
['mfm', 'hazel_moore_legalporno', 'Hazel Moore', 'legalporno'],
['mfm', 'hazel_moore_legalporno', 'Hazel Moore', 'analvids'],
['mfm', 7, 'Rose Valerie', 'eurosexparties'],
['mfm', 6, 'Honey Gold in "Slut Puppies 12"', 'julesjordan'],
['natural-boobs', 1, 'Nia Nacci', 'firstclasspov'],
@@ -972,7 +972,7 @@ const tagMedia = [
['natural-boobs', 6, 'Blake Blossom in "Naturally Stacked Cutie"', 'hardx'],
['natural-boobs', 5, 'Chloe B in "Lamour"', 'metart'],
['natural-boobs', 2, 'Kylie Page', 'allgirlmassage'],
['nun', 0, 'Lady Zee in NF053', 'legalporno'],
['nun', 0, 'Lady Zee in NF053', 'analvids'],
['nun', 1, 'Penny Pax and Darcie Dolce in "Confessions Of A Sinful Nun"', 'sweetheartvideo'],
['nun', 3, 'Higurashi Rin in "Naughty Nun"', 'allgravure'],
['nun', 2, 'Lea Lexis in "Confessions Of A Sinful Nun"', 'sweetheartvideo'],
@@ -989,12 +989,12 @@ const tagMedia = [
['oral-creampie', 1, 'Valentina Nappi', 'herlimit'],
['oral-creampie', 0, 'Henessy in "B(ass)t Friends"', 'assholefever'],
['orgy', 1, 'Megan Rain (DP), Morgan Lee (anal), Jessa Rhodes, Melissa Moore and Kimmy Granger in "Orgy Masters 8"', 'julesjordan'],
['orgy', 0, 'Vicky Sol and Jolee Love in GIO1550', 'legalporno'],
['orgy', 0, 'Vicky Sol and Jolee Love in GIO1550', 'analvids'],
['orgy', 'zaawaadi_malena_cherry_kiss_roccosiffredi_5', 'Zaawaadi, Cherry Kiss and Malena in "My Name Is Zaawaadi"', 'roccosiffredi'],
['orgy', 'poster', 'Zoey Mornoe (DP), Jillian Janson (sex), Frida Sante, Katerina Kay and Natasha Starr in "Orgy Masters 6"', 'julesjordan'],
['parody', 0, 'Capri Cavanni and Dani Daniels in "The Whore of Wall Street"', 'brazzers'],
['piercings', 0, 'Kaegune in "When The Sun Goes Down"', 'suicidegirls'],
['piss-drinking', 0, 'Scarlet Domingo in GL227', 'legalporno'],
['piss-drinking', 0, 'Scarlet Domingo in GL227', 'analvids'],
['pussy-eating', 5, 'Claudia Macc and Victoria Pure', 'eurogirlsongirls'],
['pussy-eating', 4, 'Anastasia Knight and Jillian Janson in "Teach Me"', 'screwbox'],
['pussy-eating', 'september_reign_penthouse', 'September Reign in "Sensual Ride"', 'penthouse'],
@@ -1019,20 +1019,20 @@ const tagMedia = [
['sex', 'jane_wilde_evilangel', 'Jane Wilde and Brock Cooper in "The Cock Hungry Chronicles"', 'evilangel'],
['squirting', 0, 'Veronica Rodriguez in "Hot Latina Squirting"', 'julesjordan'],
['squirting', 1, 'Abella Danger and Karma Rx in "Neon Dreaming"', 'brazzers'],
['swallowing', 0, 'Kira Thorn in GIO1023', 'legalporno'],
['swallowing', 0, 'Kira Thorn in GIO1023', 'analvids'],
['tattoos', 0, 'Tigerlilly in "Wrapped In Blue"', 'suicidegirls'],
['tattoos', 1, 'Joanna Angel', 'joannaangel'],
['teen', 0, 'Alexa Flexy', 'sensualgirl'],
['teen', 1, 'Stalfra aka Precious', 'nubiles'],
['trainbang', 1, 'Ria Sunn', 'private'],
['trainbang', 0, 'Nicole Black in GIO971', 'legalporno'],
['trainbang', 0, 'Nicole Black in GIO971', 'analvids'],
['transsexual', 'kelly_silva_mel_almeida_brazilliantranssexuals', 'Kelly Silva and Mel Almeida', 'brazilliantranssexuals'],
['transsexual', 'amanda_fialho_tsraw', 'Amanda Fialho', 'tsraw'],
['tap', 4, 'Francys Belle in GIO1103', 'legalporno'],
['tap', 'lisey_sweet_legalporno', 'Lisey Sweet in GIO816', 'legalporno'],
['tap', 3, 'Julia Red in GIO1007', 'legalporno'],
['tap', 1, 'Natasha Teen in SZ2098', 'legalporno'],
['tap', 2, 'Kira Thorn in GIO1018', 'legalporno'],
['tap', 4, 'Francys Belle in GIO1103', 'analvids'],
['tap', 'lisey_sweet_legalporno', 'Lisey Sweet in GIO816', 'analvids'],
['tap', 3, 'Julia Red in GIO1007', 'analvids'],
['tap', 1, 'Natasha Teen in SZ2098', 'analvids'],
['tap', 2, 'Kira Thorn in GIO1018', 'analvids'],
['titty-fucking', 2, 'Layla London in "Touch Me"', 'bignaturals'],
['titty-fucking', 0, 'Kylie Page in "Stepsis Gives Soapy Handjob In Shower"', 'spyfam'],
['titty-fucking', 4, 'Set 5532', 'tugjobs'],
@@ -1050,7 +1050,7 @@ const tagMedia = [
['toys', 1, 'Chloe Lamour in "Curives In All The Right Places"', 'wetandpuffy'],
['toys', 'shawna_lenee_sunrisekings', 'Shawna Lenee', 'sunrisekings'],
['triple-penetration', 'angela_white_julesjordan', 'Angela White in "Her Biggest Gangbang Ever"', 'julesjordan'],
['triple-penetration', 'ria_sunn_legalporno', 'Ria Sunn in SZ2082', 'legalporno'],
['triple-penetration', 'ria_sunn_legalporno', 'Ria Sunn in SZ2082', 'analvids'],
['tvp', 'september_reign_wefuckblackgirls', 'September Reign in "Second Appearance"', 'wefuckblackgirls'],
['trainbang', 'poster', 'Kali Roses in "Passing Me Around"', 'blacked'],
['trainbang', 'gina_gerson_assholefever', 'Gina Gerson in "Oppa Gangbang Style"', 'assholefever'],

View File

@@ -743,20 +743,20 @@ const campaigns = [
comment: '$30 per signup',
},
{
network: 'legalporno',
url: 'https://www.legalporno.com/new-videos?aff=BW90MHT1DP____',
network: 'analvids',
url: 'https://www.analvids.com/new-videos?aff=BW90MHT1DP____',
comment: 'default offer',
},
{
channel: 'legalporno',
channel: 'analvids',
banner: 'pornworld_600_120_1',
url: 'https://www.legalporno.com/new-videos?aff=BW90MHT1DP____',
url: 'https://www.analvids.com/new-videos?aff=BW90MHT1DP____',
comment: 'default offer',
},
{
channel: 'legalporno',
channel: 'analvids',
banner: 'pornworld_600_120_2',
url: 'https://www.legalporno.com/new-videos?aff=BW90MHT1DP____',
url: 'https://www.analvids.com/new-videos?aff=BW90MHT1DP____',
comment: 'default offer',
},
{

View File

@@ -200,7 +200,8 @@ async function scrapeRelease(baseRelease, entitiesBySlug, type = 'scene') {
async function scrapeReleases(baseReleases, entitiesBySlug, type) {
const entitiesWithBeforeDataEntries = await Promise.all(Object.entries(entitiesBySlug).map(async ([slug, entity]) => {
if (entity.scraper?.beforeFetchScenes) {
const preData = await entity.scraper.beforeFetchScenes(entity);
const parameters = getRecursiveParameters(entity);
const preData = await entity.scraper.beforeFetchScenes(entity, parameters);
return [slug, { ...entity, preData }];
}

View File

@@ -34,13 +34,13 @@ function getPoster(posterElement, sceneId) {
if (typeof posterTimeRange === 'number') {
// poster time is already a single time value
return `https://legalporno.com/casting/${sceneId}/${posterTimeRange}`;
return `https://analvids.com/casting/${sceneId}/${posterTimeRange}`;
}
const [max, min] = posterTimeRange.split('-');
const posterTime = Math.floor(Math.random() * (Number(max) - Number(min) + 1) + Number(min));
return `https://legalporno.com/casting/${sceneId}/${posterTime}`;
return `https://analvids.com/casting/${sceneId}/${posterTime}`;
}
function scrapeAll(html) {
@@ -134,7 +134,7 @@ async function scrapeScene(html, url, site, useGallery) {
}
const studioName = $('.watchpage-studioname').first().text().trim();
release.studio = slugify(studioName, '');
release.studio = slugify(studioName, '', { removePunctuation: true });
return release;
}
@@ -181,7 +181,7 @@ async function fetchScene(url, site) {
}
async function fetchProfile({ name: actorName }) {
const res = await http.get(`https://www.legalporno.com/api/autocomplete/search?q=${actorName.replace(' ', '+')}`);
const res = await http.get(`https://www.analvids.com/api/autocomplete/search?q=${actorName.replace(' ', '+')}`);
const data = res.body;
const result = data.terms.find((item) => item.type === 'model');

143
src/scrapers/radical.js Normal file
View File

@@ -0,0 +1,143 @@
'use strict';
const http = require('../utils/http');
const qu = require('../utils/qu');
const slugify = require('../utils/slugify');
const { lbsToKg, feetInchesToCm } = require('../utils/convert');
function scrapeSceneMetadata(data, channel) {
const release = {};
release.entryId = data.id;
release.url = `${channel.url}/tour/videos/${data.id}/${slugify(data.title, '-', { removePunctuation: true })}`;
release.title = data.title;
release.description = data.description;
release.date = new Date(data.release_date);
release.duration = qu.durationToSeconds(data.videos_duration);
release.actors = data.models.map((model) => ({
entryId: model.id,
name: model.name,
gender: model.gender,
avatar: model.thumb,
url: `${channel.url}/tour/models/${model.id}/${slugify(model.name, '-', { removePunctuation: true })}`,
}));
release.poster = data.trailer?.poster || [data.thumb?.replace('mobile.jpg', '.jpg'), data.thumb];
release.photos = [
data.extra_thumbs?.find((url) => /portrait1.jpg/.test(url)),
data.extra_thumbs?.find((url) => /scene.jpg/.test(url)),
data.extra_thumbs?.find((url) => /portrait2.jpg/.test(url)),
]; // ordered by chronology: portrait1.jpg and scene.jpg are usually pre-shoot poses, portrait2.jpg is the cumshot aftermath
release.trailer = data.trailer && {
src: data.trailer.src,
type: data.trailer.type,
};
release.teaser = data.special_thumbs;
release.tags = [].concat(data.tags?.map((tag) => tag.name));
release.qualities = data.downloads && Object.values(data.downloads)?.map((download) => download.meta_data.height);
release.stars = data.rating;
return release;
}
function scrapeAllMetadata(scenes, channel) {
return scenes.map((data) => scrapeSceneMetadata(data, channel));
}
function scrapeProfileMetadata(data, channel) {
const profile = {};
profile.entryId = data.id;
profile.url = `${channel.url}/tour/models/${data.id}/${slugify(data.name, '-', { removePunctuation: true })}`;
profile.description = data.attributes.bio?.value;
profile.dateOfBirth = qu.parseDate(data.attributes.birthdate?.value, 'YYYY-MM-DD');
profile.gender = data.gender;
profile.age = data.attributes.age?.value;
profile.birthPlace = data.attributes.born?.value;
profile.measurements = data.attributes.measurements?.value;
profile.height = feetInchesToCm(data.attributes.height?.value);
profile.weight = lbsToKg(data.attributes.weight?.value);
profile.eyes = data.attributes.eyes?.value;
profile.hairColor = data.attributes.hair?.value;
profile.avatar = data.thumb;
profile.date = new Date(data.publish_date);
return profile;
}
async function fetchLatestMetadata(channel, page = 1) {
const url = `${channel.url}/tour/videos?page=${page}`;
const res = await http.get(url, {
parse: true,
extract: {
runScripts: 'dangerously',
},
});
if (res.ok && res.window.__DATA__) {
return scrapeAllMetadata(res.window.__DATA__.videos.items, channel);
}
if (res.ok) {
return res.window.__DATA__?.error || null;
}
return res.status;
}
async function fetchSceneMetadata(url, channel) {
const res = await http.get(url, {
parse: true,
extract: {
runScripts: 'dangerously',
},
});
if (res.ok && res.window.__DATA__?.video) {
return scrapeSceneMetadata(res.window.__DATA__.video, channel);
}
if (res.ok) {
return res.window.__DATA__?.error || null;
}
return res.status;
}
async function fetchProfileMetadata(actor, channel) {
const res = await http.get(`${channel.url}/tour/search-preview/${actor.name}`, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
});
if (res.ok) {
const model = res.body.models?.items.find((modelX) => slugify(modelX.name) === actor.slug);
if (model) {
return scrapeProfileMetadata(model, channel);
}
return null;
}
return res.status;
}
module.exports = {
metadata: {
fetchLatest: fetchLatestMetadata,
fetchScene: fetchSceneMetadata,
fetchProfile: fetchProfileMetadata,
},
};

View File

@@ -35,7 +35,7 @@ const karups = require('./karups');
const kellymadison = require('./kellymadison');
const killergram = require('./killergram');
const kink = require('./kink');
const legalporno = require('./legalporno');
const analvids = require('./analvids');
const littlecapricedreams = require('./littlecapricedreams');
const mikeadriano = require('./mikeadriano');
const mindgeek = require('./mindgeek');
@@ -52,6 +52,7 @@ const pierrewoodman = require('./pierrewoodman');
const pinkyxxx = require('./pinkyxxx');
const privateNetwork = require('./private'); // reserved keyword
const purgatoryx = require('./purgatoryx'); // reserved keyword
const radical = require('./radical');
const score = require('./score');
const spizoo = require('./spizoo');
const teamskeet = require('./teamskeet');
@@ -117,7 +118,7 @@ const scrapers = {
killergram,
kink,
kinkvr: badoink,
legalporno,
analvids,
letsdoeit: porndoe,
littlecapricedreams,
mamacitaz: porndoe,
@@ -138,6 +139,7 @@ const scrapers = {
pornpros: whalemember,
private: privateNetwork,
purgatoryx,
radical,
score,
sexyhub: mindgeek,
spizoo,
@@ -208,6 +210,7 @@ const scrapers = {
gaywire: bangbros,
girlfaction: fullpornnetwork,
gloryholesecrets: aziani,
gotfilled: radical,
hergape: fullpornnetwork,
hitzefrei,
homemadeanalwhores: fullpornnetwork,
@@ -216,6 +219,7 @@ const scrapers = {
hushpass: hush,
hussiepass: hush,
iconmale: mindgeek,
inserted: radical,
interracialpass: hush,
interracialpovs: hush,
inthecrack,
@@ -226,7 +230,7 @@ const scrapers = {
killergram,
kink,
kinkvr: badoink,
legalporno,
analvids,
letsdoeit: porndoe,
littlecapricedreams,
mamacitaz: porndoe,

1721
src/tools/analvids.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -269,7 +269,8 @@ async function scrapeNetworkSequential(networkEntity) {
async function getBeforeNetwork(networkEntity) {
try {
return await networkEntity.scraper?.beforeNetwork?.(networkEntity);
const parameters = getRecursiveParameters(networkEntity);
return await networkEntity.scraper?.beforeNetwork?.(networkEntity, parameters);
} catch (error) {
if (networkEntity.scraper?.requireBeforeNetwork === false) {
return null;