From 37e188a0df6c40a02735ed516da3dfcfc2a79aaf Mon Sep 17 00:00:00 2001 From: Niels Simenon Date: Thu, 12 Mar 2020 00:15:25 +0100 Subject: [PATCH] Added site aliases. Migrated various scrapers to qu. Added BAM Visions base. --- migrations/20190325001339_releases.js | 8 +- public/img/logos/bamvisions/bamvisions.png | Bin 0 -> 8870 bytes public/img/logos/bamvisions/favicon.png | Bin 0 -> 2581 bytes public/img/logos/bamvisions/network.png | Bin 0 -> 7779 bytes seeds/01_networks.js | 5 + seeds/02_sites.js | 335 +++++++++++++++++++-- src/releases.js | 7 +- src/scrapers/assylum.js | 14 +- src/scrapers/bamvisions.js | 26 ++ src/scrapers/hush.js | 70 ++--- src/scrapers/scrapers.js | 4 +- 11 files changed, 400 insertions(+), 69 deletions(-) create mode 100644 public/img/logos/bamvisions/bamvisions.png create mode 100644 public/img/logos/bamvisions/favicon.png create mode 100644 public/img/logos/bamvisions/network.png create mode 100644 src/scrapers/bamvisions.js diff --git a/migrations/20190325001339_releases.js b/migrations/20190325001339_releases.js index c795e8dd..f123e93d 100644 --- a/migrations/20190325001339_releases.js +++ b/migrations/20190325001339_releases.js @@ -151,6 +151,11 @@ exports.up = knex => Promise.resolve() .inTable('networks'); table.string('name'); + table.string('slug', 32) + .unique(); + + table.string('alias'); + table.string('url'); table.text('description'); table.json('parameters'); @@ -162,9 +167,6 @@ exports.up = knex => Promise.resolve() table.boolean('scrape') .defaultTo(true); - table.string('slug', 32) - .unique(); - table.datetime('created_at') .defaultTo(knex.fn.now()); })) diff --git a/public/img/logos/bamvisions/bamvisions.png b/public/img/logos/bamvisions/bamvisions.png new file mode 100644 index 0000000000000000000000000000000000000000..4266904c4820e1f8c12e558bd8237f70969c4f3f GIT binary patch literal 8870 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 literal 0 HcmV?d00001 diff --git a/public/img/logos/bamvisions/network.png b/public/img/logos/bamvisions/network.png new file mode 100644 index 0000000000000000000000000000000000000000..f31811579b97aeb8ef07f1bdf60c6512a81b0195 GIT binary patch literal 7779 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 D<$bTr literal 0 HcmV?d00001 diff --git a/seeds/01_networks.js b/seeds/01_networks.js index bc963251..2a53dab0 100644 --- a/seeds/01_networks.js +++ b/seeds/01_networks.js @@ -78,6 +78,11 @@ const networks = [ url: 'https://www.babes.com', parent: 'mindgeek', }, + { + slug: 'bamvisions', + name: 'BAM Visions', + url: 'https://www.bamvisions.com', + }, { slug: 'bang', name: 'Bang!', diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 458b4aac..b5707180 100644 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -6,6 +6,7 @@ const sites = [ { slug: '21naturals', name: '21Naturals', + alias: ['21 naturals', '21na'], url: 'https://www.21naturals.com', network: '21naturals', parameters: { @@ -15,12 +16,14 @@ const sites = [ { slug: '21footart', name: '21 Foot Art', + alias: ['21fa'], url: 'https://21footart.21naturals.com', network: '21naturals', }, { slug: '21eroticanal', name: '21 Erotic Anal', + alias: ['21ea'], url: 'https://21eroticanal.21naturals.com', network: '21naturals', parameters: { @@ -31,6 +34,7 @@ const sites = [ { slug: 'grandpasfuckteens', name: 'Grandpas Fuck Teens', + alias: ['gft'], url: 'https://grandpasfuckteens.21sextreme.com', network: '21sextreme', }, @@ -52,6 +56,7 @@ const sites = [ { slug: 'teachmefisting', name: 'Teach Me Fisting', + alias: ['tmf'], url: 'https://teachmefisting.21sextreme.com', network: '21sextreme', parameters: { @@ -61,6 +66,7 @@ const sites = [ { slug: 'zoliboy', name: 'Zoliboy', + alias: ['zb'], url: 'https://zoliboy.21sextreme.com', network: '21sextreme', parameters: { @@ -171,6 +177,7 @@ const sites = [ { slug: 'buttplays', name: 'Butt Plays', + alias: ['bp'], network: '21sextury', parameters: { referer: 'https://www.21sextury.com', @@ -201,6 +208,7 @@ const sites = [ { slug: 'dpfanatics', name: 'DP Fanatics', + alias: ['dpf'], url: 'https://www.dpfanatics.com', description: 'Welcome to DPFanatics, brought to you by 21Sextury. DP Fanatics brings you the best DP sex and double penetration porn you can find. Double vaginal penetration, double anal, amateur and teen DP inside!', network: '21sextury', @@ -283,6 +291,7 @@ const sites = [ { slug: 'pixandvideo', name: 'Pix and Video', + alias: ['pav'], network: '21sextury', parameters: { referer: 'https://www.21sextury.com', @@ -404,6 +413,7 @@ const sites = [ { name: 'Amateur Allure', slug: 'amateurallure', + alias: ['aa'], url: 'https://www.amateurallure.com', parameters: { upcoming: false, @@ -415,6 +425,7 @@ const sites = [ { name: 'Swallow Salon', slug: 'swallowsalon', + alias: ['swsn'], url: 'https://www.swallowsalon.com', parameters: { upcoming: false, @@ -483,6 +494,13 @@ const sites = [ slug: 'stepmomlessons', network: 'babes', }, + // BAM VISIONS + { + slug: 'bamvisions', + name: 'BAM Visions', + url: 'https://www.bamvisions.com', + network: 'bamvisions', + }, // BANG { name: 'Trickery', @@ -494,6 +512,7 @@ const sites = [ { name: 'Yngr', slug: 'yngrcom', + alias: ['byngr'], // url: 'https://www.bang.com/original/5010/bang-yngr', url: 'https://yngr.com', parameters: { siteId: 5010 }, @@ -517,6 +536,7 @@ const sites = [ { name: 'Real Teens', slug: 'bangrealteens', + alias: ['brealteens'], url: 'https://www.bang.com/original/3366/bang-real-teens', parameters: { siteId: 3366 }, network: 'bang', @@ -554,6 +574,7 @@ const sites = [ { name: 'Glamkore', slug: 'bangglamkore', + alias: ['bglamkore'], url: 'https://www.bang.com/original/4586/bang-glamkore', parameters: { siteId: 4586 }, network: 'bang', @@ -568,6 +589,7 @@ const sites = [ { name: 'Real MILFs', slug: 'bangrealmilfs', + alias: ['brealmilfs'], url: 'https://www.bang.com/original/4448/bang-real-milfs', parameters: { siteId: 4448 }, network: 'bang', @@ -575,6 +597,7 @@ const sites = [ { name: 'Confessions', slug: 'bangconfessions', + alias: ['bconfessions'], url: 'https://www.bang.com/original/4308/bang-confessions', parameters: { siteId: 4308 }, network: 'bang', @@ -582,6 +605,7 @@ const sites = [ { name: 'Casting', slug: 'bangcasting', + alias: ['bcasting'], url: 'https://www.bang.com/original/3261/bang-casting', parameters: { siteId: 3261 }, network: 'bang', @@ -701,8 +725,9 @@ const sites = [ }, { name: 'Big Tit Cream Pie', - url: 'https://bangbros.com/websites/bigtitcreampie', + alias: ['btc'], slug: 'bigtitcreampie', + url: 'https://bangbros.com/websites/bigtitcreampie', description: null, network: 'bangbros', parameters: { code: 'btcp' }, @@ -710,6 +735,7 @@ const sites = [ { name: 'Big Tits, Round Asses', url: 'https://bangbros.com/websites/bigtitsroundasses', + alias: ['btra'], slug: 'bigtitsroundasses', description: null, network: 'bangbros', @@ -877,8 +903,9 @@ const sites = [ }, { name: 'My Dirty Maid', - url: 'https://bangbros.com/websites/mydirtymaid', slug: 'mydirtymaid', + alias: ['mdm'], + url: 'https://bangbros.com/websites/mydirtymaid', description: null, network: 'bangbros', parameters: { code: 'mda' }, @@ -1007,6 +1034,7 @@ const sites = [ { slug: '1000facials', name: '1000 Facials', + alias: ['1kf'], url: 'https://www.1000facials.com', description: 'Welcome to 1000Facials.com, your source for the best facial porn with huge cumshots on your favorite teen and MILF pornstars. Watch all the blowjob action inside!', network: 'blowpass', @@ -1018,6 +1046,7 @@ const sites = [ { slug: 'immorallive', name: 'Immoral Live', + alias: ['il'], url: 'https://www.immorallive.com', description: 'Watch live sex shows and videos on ImmoralLive.com, featuring wild and crazy sex orgies, group sex, blowjob competitions and toy play from the famous Porno Dan. The hottest pornstars and amateur girls cum hard inside', network: 'blowpass', @@ -1029,6 +1058,7 @@ const sites = [ { slug: 'mommyblowsbest', name: 'Mommy Blows Best', + alias: ['mbb'], url: 'https://www.mommyblowsbest.com', description: 'Welcome to MommyBlowsBest.com. Home to thousands of MILF blowjobs and hot mom porn! Come see why experience counts, right here at MommyBlowsBest.com!', network: 'blowpass', @@ -1040,6 +1070,7 @@ const sites = [ { slug: 'onlyteenblowjobs', name: 'Only Teen Blowjobs', + alias: ['otb'], url: 'https://www.onlyteenblowjobs.com', description: 'OnlyTeenBlowjobs.com brings you the best teen blowjob porn featuring today\'s hottest young pornstars and amateurs. Watch as teens use their little mouths to suck and deepthroat the biggest of cocks!', network: 'blowpass', @@ -1051,6 +1082,7 @@ const sites = [ { slug: 'throated', name: 'Throated', + alias: ['ted'], url: 'https://www.throated.com', description: 'Throated.com is your portal for extreme throat fuck porn, face fucking videos and deepthroat gagging pornstars. Watch teens and MILFs go balls deep, swallowing cock in HD!', network: 'blowpass', @@ -1072,6 +1104,7 @@ const sites = [ { slug: 'momsincontrol', name: 'Moms in Control', + alias: ['mic'], url: 'https://www.brazzers.com/sites/view/id/155/moms-in-control', description: "There's nothing hotter than seeing a wholesome MILf get dirty, and that's exactly what MILFs in Control is all about: the hottest, sluttiest cougars in the business taking control of sexy situations to get exactly what they want. Feast your eyes as these mature beauties suck and fuck huge cocks, dominating big-dick studs and hot teen sluts until they get the cum that all MILFs crave!", network: 'brazzers', @@ -1079,6 +1112,7 @@ const sites = [ { slug: 'pornstarslikeitbig', name: 'Pornstars Like It Big', + alias: ['plib'], url: 'https://www.brazzers.com/sites/view/id/24/pornstars-like-it-big', description: "A real big dick, that's what everyone wants. Porn-stars are no exception, all the biggest stars agree; BIG COCK is for them. Check out how it stretches their tiny pussies and cums on their round tits. We've got the best chicks jocking the biggest dicks.", network: 'brazzers', @@ -1086,6 +1120,7 @@ const sites = [ { slug: 'bigtitsatwork', name: 'Big Tits at Work', + alias: ['btaw'], url: 'https://www.brazzers.com/sites/view/id/15/big-tits-at-work', description: 'Sitting at your desk, wishing you can fuck every busty coworker you have? Well, stop dreaming and step inside Big Tits At Work where you can watch real life work adventures caught on tape. Nothing But Big Breasted Work Professionals getting drilled all day long...', network: 'brazzers', @@ -1093,6 +1128,7 @@ const sites = [ { slug: 'bigtitsatschool', name: 'Big Tits at School', + alias: ['btas'], url: 'https://www.brazzers.com/sites/view/id/20/big-tits-at-school', description: "The windows have been fogging up at Big Tits At School. Just take a peek inside one of our classrooms and you'll see our smoking hot busty students and big boobed dominant teachers getting their wet pussies stuffed with cock. Stay in your seat! you haven't been dismissed yet.", network: 'brazzers', @@ -1100,6 +1136,7 @@ const sites = [ { slug: 'babygotboobs', name: 'Baby Got Boobs', + alias: ['bgb'], url: 'https://www.brazzers.com/sites/view/id/9/baby-got-boobs', description: "From fresh-faced teen to total slut, baby has boobs and she isn't afraid to show them. But does she know how to use them? These teens crave monster cock in their tight pussies, whether they're ready for a big dicking is another matter.", network: 'brazzers', @@ -1107,6 +1144,7 @@ const sites = [ { slug: 'realwifestories', name: 'Real Wife Stories', + alias: ['rws'], url: 'https://www.brazzers.com/sites/view/id/52/real-wife-stories', description: "You might bring home the bacon, but your wife is still starving. That slut is hungry for cock, she can't get enough, and if you starve her any more she'll get it wherever she can. Better leave work early, or your big-titted wife might just have some giant cock getting squeezed into her waiting pussy, and it won't be yours.", network: 'brazzers', @@ -1114,6 +1152,7 @@ const sites = [ { slug: 'teenslikeitbig', name: 'Teens Like It Big', + alias: ['tlib'], url: 'https://www.brazzers.com/sites/view/id/51/teens-like-it-big', description: "Whether they know it or not, teens love big stiff cocks in their tight pussies. Nothing goes better together than a tight, willing teen and a huge dick. In her bedroom or sneaking out to her boyfriend's, teens just want it all. Cum inside to see greedy sluts get more than they asked for", network: 'brazzers', @@ -1121,6 +1160,7 @@ const sites = [ { slug: 'zzseries', name: 'ZZ Series', + alias: ['zzs'], url: 'https://www.brazzers.com/sites/view/id/81/zz-series', description: 'This is the spot for all our high-end content. ZZ series is exclusive footage that offers only the best in terms of story, stars and action. Check out the hottest porn-stars having the nastiest sex here at the ZZ series', network: 'brazzers', @@ -1128,6 +1168,7 @@ const sites = [ { slug: 'mommygotboobs', name: 'Mommy Got Boobs', + alias: ['mgb'], url: 'https://www.brazzers.com/sites/view/id/10/mommy-got-boobs', description: "When hubby's away MILFS will play. Older women just crave cock, and they're experienced enough to know that only a young stud will do. Big-titted sluts everywhere are sucking and fucking in secret, giving it away to anybody they can. At Mommy Got Boobs, you can get some MILF of your own.", network: 'brazzers', @@ -1135,6 +1176,7 @@ const sites = [ { slug: 'milfslikeitbig', name: 'MILFs Like It Big', + alias: ['mlib'], url: 'https://www.brazzers.com/sites/view/id/36/milfs-like-it-big', description: "When hubby's away milfy will play. These bored housewives want to get fucked and they want it now. They're experienced and know what they want. America's suburbs are full of these cum-de-sacs just waiting to get laid. Their round tits and thick asses are just begging for it. Cum inside, but don't park out front!", network: 'brazzers', @@ -1142,6 +1184,7 @@ const sites = [ { slug: 'bigtitsinuniform', name: 'Big Tits In Uniform', + alias: ['btiu'], url: 'https://www.brazzers.com/sites/view/id/73/big-tits-in-uniform', description: "Big titted wonders are all around us, doing the toughest jobs in the tightest uniforms. Look at them just bursting out of that blouse, or over there, bulging under that nurse's uniform. You know when those tight uniforms come off these sluts go wild, sucking and fucking cocks left and right, their big tits just bouncing. I can't wait to punch the clock.", network: 'brazzers', @@ -1149,6 +1192,7 @@ const sites = [ { slug: 'doctoradventures', name: 'Doctor Adventures', + alias: ['da'], url: 'https://www.brazzers.com/sites/view/id/5/doctor-adventures', description: 'Ever had fantasies about fucking your hot doctor? Live out your fantasies on doctoradventures.com. Countless doctor, patient scenarios come to life on this site with the sexiest and bustiest doctors imaginable! This is your one stop for the best in doctor porn in the world!', network: 'brazzers', @@ -1156,6 +1200,7 @@ const sites = [ { slug: 'brazzersexxtra', name: 'Brazzers Exxtra', + alias: ['bex'], url: 'https://www.brazzers.com/sites/view/id/152/brazzers-exxtra', description: "\"Brazzers Exxtra\" is a doorway to new, unseen hardcore content! There are countless Brazzers videos that were not released throughout the years and we haven't been able to show them to you until now. Random videos staring the world's most popular pornstars, fresh new industry faces and a whole lot more! We'll even throw in an occasional free video from our friends at Mofos, Twisty's and Babes! Check it all out and let us know what you think. If you want more, we'll get it for you!", network: 'brazzers', @@ -1163,6 +1208,7 @@ const sites = [ { slug: 'bigtitsinsports', name: 'Big Tits In Sports', + alias: ['btis'], url: 'https://www.brazzers.com/sites/view/id/54/big-tits-in-sports', description: 'Watch them bounce, watch them score and look at the way they handle those balls! Big tits in sports is here and so are the best big titted, athletic babes. Facials on the court and threesomes on the field, these busty sluts are ready for anything, even if it means playing dirty. Could you take them 1 on 1?', network: 'brazzers', @@ -1177,6 +1223,7 @@ const sites = [ { slug: 'bigbuttslikeitbig', name: 'Big Butts Like It Big', + alias: ['bblib'], url: 'https://www.brazzers.com/sites/view/id/53/big-butts-like-it-big', description: "You have to pair like with like. And big butts have to have big dicks to go with them. There's really no choice for these big round asses and the babes who fuck with them. Big assed bitches love it hard and deep, and won't have it any other way. Let the ass stuffing begin.", network: 'brazzers', @@ -1184,6 +1231,7 @@ const sites = [ { slug: 'bigwetbutts', name: 'Big Wet Butts', + alias: ['bwb'], url: 'https://www.brazzers.com/sites/view/id/8/big-wet-butts', description: 'A nice, big, round butt is a special shape. Begging for powerful doggy style or straight anal penetration, cover a big butt in oil and it becomes a big wet butt, a true rarity. Watch these soft, tight asses get slathered and pounded like you only wish you could. Look at it bounce!', network: 'brazzers', @@ -1191,6 +1239,7 @@ const sites = [ { slug: 'daywithapornstar', name: 'Day With A Pornstar', + alias: ['dwp'], url: 'https://www.brazzers.com/sites/view/id/59/day-with-a-pornstar', description: "We all know what our favorite stars can do on camera. We're familiar with the way they fuck and suck. What you don't get to see is what they do on their own time. Day With a Porn-star will show you everything, from crazy parties to total babe pals. Nobody else has access like this, it's the closest you get to living the dream.", network: 'brazzers', @@ -1198,6 +1247,7 @@ const sites = [ { slug: 'dirtymasseur', name: 'Dirty Masseur', + alias: ['dm'], url: 'https://www.brazzers.com/sites/view/id/150/dirty-masseur', description: "Take a moment and unwind. Lay down, relax, and enjoy watching and wanking to these luscious Brazzers beauties getting good and greasy. Boobs, butts, and other lady-parts are at their prettiest when shimmering with slick oil. Book an appointment, and slide on in with a lubed babe. Believe me when I say, you'll have the happiest of endings...", network: 'brazzers', @@ -1205,6 +1255,7 @@ const sites = [ { slug: 'hotandmean', name: 'Hot And Mean', + alias: ['ham'], url: 'https://www.brazzers.com/sites/view/id/78/hot-and-mean', description: "The hottest bitches run together. Hot, mean lesbians love to fuck each other and hate each other for being so beautiful. These lesbo sluts can't get enough pussy and love girl on girl action. Forget the dicks, these chicks don't need 'em. You can watch though, they love that.", network: 'brazzers', @@ -1304,6 +1355,7 @@ const sites = [ { name: 'Burning Angel', slug: 'burningangel', + alias: ['burna'], url: 'https://www.burningangel.com', network: 'burningangel', parameters: { independent: true }, @@ -1312,6 +1364,7 @@ const sites = [ { slug: 'cherrypimps', name: 'Cherry Pimps', + alias: ['cps'], url: 'https://cherrypimps.com', description: 'CherryPimps your premium porn site to Download and Stream the hottest and most exclusive 4K HD videos and pictures on your phone, tablet, TV or console.', network: 'cherrypimps', @@ -1322,6 +1375,7 @@ const sites = [ { slug: 'wildoncam', name: 'Wild On Cam', + alias: ['woc'], url: 'https://wildoncam.com', tags: ['live'], network: 'cherrypimps', @@ -1339,6 +1393,7 @@ const sites = [ { slug: 'ddfbusty', name: 'DDF Busty', + alias: ['ddfb'], url: 'https://ddfbusty.com', description: 'Gorgeous Babes with big tits and Euro pornstars with huge natural boobs filmed in Exclusive Full HD, 4K, & VR porn videos.', network: 'ddfnetwork', @@ -1346,6 +1401,7 @@ const sites = [ { slug: 'handsonhardcore', name: 'Hands on Hardcore', + alias: ['hoh'], url: 'https://handsonhardcore.com', description: 'Hardcore Sex & Anal Fucking Exclusive XXX Videos in VR, 4K and full HD with Hot European Pornstars', network: 'ddfnetwork', @@ -1353,6 +1409,7 @@ const sites = [ { slug: 'houseoftaboo', name: 'House of Taboo', + alias: ['hotb', 'hotab'], url: 'https://houseoftaboo.com', description: 'Exclusive BDSM Porn & Extreme Sex Videos Produced in VR, 4K and full HD with The Hottest European Fetish Pornstars', network: 'ddfnetwork', @@ -1360,6 +1417,7 @@ const sites = [ { slug: 'ddfnetworkvr', name: 'DDF Network VR', + alias: ['ddfvr'], url: 'https://ddfnetworkvr.com', description: 'VR Porn Videos shot Exclusively in 180 3D 4K Virtual Reality featuring the Hottest European & American VR Pornstar Babes', network: 'ddfnetwork', @@ -1381,6 +1439,7 @@ const sites = [ { slug: 'euroteenerotica', name: 'Euro Teen Erotica', + alias: ['ete'], url: 'https://euroteenerotica.com', description: 'Teen Threesomes & Barely Legal Porn Videos in 4K, VR and FULL HD with Hot Nymphomaniac Teen Babes', network: 'ddfnetwork', @@ -1395,6 +1454,7 @@ const sites = [ { slug: 'onlyblowjob', name: 'Only Blowjob', + alias: ['obj'], url: 'https://onlyblowjob.com', description: 'Fantasy Blowjobs & POV Cock Sucking Videos and Photos Produced in VR, 4K and full HD featuring Sexy European Pornstars', network: 'ddfnetwork', @@ -1502,6 +1562,7 @@ const sites = [ { slug: 'wefuckblackgirls', name: 'We Fuck Black Girls', + alias: ['wfbg'], url: 'https://www.wefuckblackgirls.com/tour', description: '', network: 'dogfartnetwork', @@ -1666,6 +1727,7 @@ const sites = [ { slug: 'fakeagent', name: 'Fake Agent', + alias: ['fka'], url: 'https://www.fakehub.com/scenes?site=280', description: '', network: 'fakehub', @@ -1673,6 +1735,7 @@ const sites = [ { slug: 'faketaxi', name: 'Fake Taxi', + alias: ['ftx'], url: 'https://www.fakehub.com/scenes?site=281', description: '', network: 'fakehub', @@ -1680,6 +1743,7 @@ const sites = [ { slug: 'publicagent', name: 'Public Agent', + alias: ['pba'], url: 'https://www.fakehub.com/scenes?site=282', description: '', network: 'fakehub', @@ -1694,6 +1758,7 @@ const sites = [ { slug: 'femalefaketaxi', name: 'Female Fake Taxi', + alias: ['fft'], url: 'https://www.fakehub.com/scenes?site=284', description: '', network: 'fakehub', @@ -1701,6 +1766,7 @@ const sites = [ { slug: 'fakedrivingschool', name: 'Fake Driving School', + alias: ['fds'], url: 'https://www.fakehub.com/scenes?site=285', description: '', network: 'fakehub', @@ -1708,6 +1774,7 @@ const sites = [ { slug: 'fakehuboriginals', name: 'Fake Hub Originals', + alias: ['fho'], url: 'https://www.fakehub.com/scenes?site=287', description: '', network: 'fakehub', @@ -1715,6 +1782,7 @@ const sites = [ { slug: 'fakehostel', name: 'Fake Hostel', + alias: ['fhl'], url: 'https://www.fakehub.com/scenes?site=288', description: '', network: 'fakehub', @@ -1806,6 +1874,7 @@ const sites = [ { slug: 'fantasymassage', name: 'Fantasy Massage', + alias: ['fms'], url: 'https://www.fantasymassage.com', network: 'fantasymassage', parameters: { @@ -1816,6 +1885,7 @@ const sites = [ { slug: 'allgirlmassage', name: 'All Girl Massage', + alias: ['agm'], url: 'https://www.allgirlmassage.com', network: 'fantasymassage', parameters: { @@ -1827,6 +1897,7 @@ const sites = [ { slug: 'nurumassage', name: 'Nuru Massage', + alias: ['num'], url: 'https://www.nurumassage.com', network: 'fantasymassage', parameters: { @@ -1838,6 +1909,7 @@ const sites = [ { slug: 'trickyspa', name: 'Tricky Spa', + alias: ['tspa'], url: 'https://www.trickyspa.com', network: 'fantasymassage', parameters: { @@ -1904,6 +1976,7 @@ const sites = [ { slug: 'baddaddypov', name: 'Bad Daddy POV', + alias: ['bdpov'], url: 'https://baddaddypov.com', tags: ['pov', 'family'], network: 'fullpornnetwork', @@ -2008,6 +2081,7 @@ const sites = [ { slug: 'girlsway', name: 'Girlsway', + alias: ['gw'], url: 'https://www.girlsway.com', description: 'Girlsway.com has the best lesbian porn videos online! The hottest pornstars & first time lesbians in real girl on girl sex, tribbing, squirting & pussy licking action right HERE!', tags: ['lesbian'], @@ -2019,6 +2093,7 @@ const sites = [ { slug: 'girlstryanal', name: 'Girls Try Anal', + alias: ['gta'], url: 'https://www.girlstryanal.com', network: 'girlsway', parameters: { @@ -2029,6 +2104,7 @@ const sites = [ { slug: 'mommysgirl', name: 'Mommy\'s Girl', + alias: ['mmgs'], url: 'https://www.mommysgirl.com', network: 'girlsway', parameters: { @@ -2391,6 +2467,7 @@ const sites = [ { slug: 'sexuallybroken', name: 'Sexually Broken', + alias: ['seb'], url: 'https://www.sexuallybroken.com', tags: ['bdsm'], network: 'insex', @@ -2398,6 +2475,7 @@ const sites = [ { slug: 'infernalrestraints', name: 'Infernal Restraints', + alias: ['infr'], url: 'https://www.infernalrestraints.com', tags: ['bdsm'], network: 'insex', @@ -2412,6 +2490,7 @@ const sites = [ { slug: 'realtimebondage', name: 'Real Time Bondage', + alias: ['rtb'], url: 'https://www.realtimebondage.com', tags: ['bdsm', 'live'], network: 'insex', @@ -2419,6 +2498,7 @@ const sites = [ { slug: 'topgrl', name: 'TopGrl', + alias: ['tg'], url: 'https://www.topgrl.com', tags: ['bdsm', 'femdom'], network: 'insex', @@ -2493,6 +2573,7 @@ const sites = [ { slug: 'manuelferrara', name: 'Manuel Ferrara', + alias: ['mfa'], url: 'https://www.manuelferrara.com', network: 'julesjordan', }, @@ -2500,6 +2581,7 @@ const sites = [ { slug: 'teenfidelity', name: 'Teen Fidelity', + alias: ['tf'], url: 'https://www.teenfidelity.com', description: 'Home of Kelly Madison and Ryan Madison', network: 'kellymadison', @@ -2507,6 +2589,7 @@ const sites = [ { slug: 'pornfidelity', name: 'Porn Fidelity', + alias: ['pf'], url: 'https://www.pornfidelity.com', description: 'Home of Kelly Madison and Ryan Madison', network: 'kellymadison', @@ -2529,6 +2612,7 @@ const sites = [ { slug: 'boundgangbangs', name: 'Bound Gangbangs', + alias: ['bgb', 'bgbs'], url: 'https://www.kink.com/channel/boundgangbangs', description: 'Powerless whores tied in bondage and stuffed with a cock in every hole. At BoundGangbangs women get surprise extreme gangbangs, blindfolds, deepthroat blowjobs, sex punishment, bondage, double penetration and interracial sex.', network: 'kink', @@ -2566,6 +2650,7 @@ const sites = [ { slug: 'devicebondage', name: 'Device Bondage', + alias: ['deb'], url: 'https://www.kink.com/channel/devicebondage', description: 'The Domination Of Sluts In Barbaric Metal Devices. Device Bondage takes BDSM porn to new levels with extreme restraints & unique devices with beautiful pornstars to huge, forced squirting orgasms.', network: 'kink', @@ -2617,6 +2702,7 @@ const sites = [ { slug: 'fuckedandbound', name: 'Fucked and Bound', + alias: ['fab'], url: 'https://www.kink.com/channel/fuckedandbound', description: 'Extreme Anal, Rope Bondage, & Brutal Face Fucking.', network: 'kink', @@ -2624,6 +2710,7 @@ const sites = [ { slug: 'fuckingmachines', name: 'Fucking Machines', + alias: ['fm', 'fum'], url: 'https://www.kink.com/channel/fuckingmachines', description: 'Machines Fucking Squirting Pussies With Extreme Insertions. Fucking Machines is the ultimate hardcore sex toy porn. Huge dildos strapped to sex machines relentlessly fucking pornstars to real squirting oragsms!', network: 'kink', @@ -2638,6 +2725,7 @@ const sites = [ { slug: 'hogtied', name: 'Hogtied', + alias: ['ht'], url: 'https://www.kink.com/channel/hogtied', description: 'Your favorite girls restrained with rope, punished & trained. Hogtied is the original extreme bondage porn website. Watch top pornstars and pain sluts in brutal bondage, getting tormented, and forced to orgasm!', network: 'kink', @@ -2681,6 +2769,7 @@ const sites = [ { slug: 'publicdisgrace', name: 'Public Disgrace', + alias: ['pud'], url: 'https://www.kink.com/channel/publicdisgrace', description: 'Women Bound Stripped And Punished In Public Get Hardcore Fucked Where Everyone Can See. Unscripted public humiliation & punishment of submissive slaves in real life locations. PublicDisgrace features the best outdoor BDSM & voyeur porn!', network: 'kink', @@ -2688,6 +2777,7 @@ const sites = [ { slug: 'sadisticrope', name: 'Sadistic Rope', + alias: ['sr'], url: 'https://www.kink.com/channel/sadisticrope', description: 'Innocence Taken By Extreme Rope Bondage, Hardcore BDSM And Pussy-Destroying Orgasms.', network: 'kink', @@ -2695,6 +2785,7 @@ const sites = [ { slug: 'sexandsubmission', name: 'Sex and Submission', + alias: ['sas'], url: 'https://www.kink.com/channel/sexandsubmission', description: 'Submissive Sluts Are Dominated With Rough Sex And Bondage. Real pornstars, hardcore bondage, master & slave roles are what SexAndSubmission.com is all about. Watch submissive sluts give in to total domination!', network: 'kink', @@ -2709,6 +2800,7 @@ const sites = [ { slug: 'thetrainingofo', name: 'The Training of O', + alias: ['tto'], url: 'https://www.kink.com/channel/thetrainingofo', description: 'Slaves Are Trained And Rewarded With Hardcore Bondage And Sex. Watch real pornstars undergo extreme slave training through hardcore bondage & BDSM porn. The Training of O is the ultimate slave / master experience!', network: 'kink', @@ -2716,6 +2808,7 @@ const sites = [ { slug: 'theupperfloor', name: 'The Upper Floor', + alias: ['tuf'], url: 'https://www.kink.com/channel/theupperfloor', description: 'Trained slaves serve the house and their master in intense BDSM and kinky threesomes. The Upper Floor is a voyeuristic look into BDSM and fetish porn shoots with real submissive pornstars living out their kinky fantasies live on cam.', network: 'kink', @@ -2752,6 +2845,7 @@ const sites = [ { slug: 'whippedass', name: 'Whipped Ass', + alias: ['wpa', 'wa'], url: 'https://www.kink.com/channel/whippedass', description: 'Beautiful Submissive Sluts Take A Hard Fucking From Powerful Dominant Women. Watch brutal lesbian dominatrixes push submissive sluts to their orgasmic breaking points on WhippedAss! Hardcore fisting, huge strapons & face sitting!', network: 'kink', @@ -2767,6 +2861,7 @@ const sites = [ { slug: 'legalporno', name: 'LegalPorno', + alias: ['clip'], url: 'https://www.legalporno.com', description: 'The Best HD Porn For You!', parameters: { independent: true }, @@ -3012,6 +3107,7 @@ const sites = [ { slug: 'sharemybf', name: 'Share My BF', + alias: ['smb'], url: 'https://www.mofos.com/scenes?site=201', description: 'Would your cock be able to handle 2 wet pussies at the same time? One hot teen riding your face while the other deepthroats you. You know your GF tells all her friends how big your dick is. Imagine if you can fuck her and her friend at the same time? Live the fantasy at ShareMyBF.com.', network: 'mofos', @@ -3019,6 +3115,7 @@ const sites = [ { slug: 'dontbreakme', name: "Don't Break Me", + alias: ['dbm'], url: 'https://www.mofos.com/scenes?site=198', description: 'DontBreakMe.com is about tiny spinners fucking big guys with massive dicks! Most of these chicks are shorter than 5 feet tall and weigh less than 100lbs. Meanwhile, these girls are paired up with guys who tower over them by at least 1.5 feet and have 9" dicks!! The look on their faces when they see that huge dick pop out of his pants is priceless. While it turns them on they usually get a bit nervous: "how will I squeeze that huge cock inside?" Ouch! Check it out.', network: 'mofos', @@ -3026,6 +3123,7 @@ const sites = [ { slug: 'iknowthatgirl', name: 'I Know That Girl', + alias: ['iktg'], url: 'https://www.mofos.com/scenes?site=183', description: 'Every single gorgeous girl you see on this site is 100% Real! They are all part of the biggest user submitted, amateur video site in the world...IKnowThatGirl.com! Hot young girlfriends getting kinky on camera, sucking and fucking, even stuffing dildos up their tight pussies, all filmed on home video and leaked to us by some lowlife, soon to be ex-boyfriend or former best friend! Oh well... Enjoy!', network: 'mofos', @@ -3033,6 +3131,7 @@ const sites = [ { slug: 'letstryanal', name: 'Lets Try Anal', + alias: ['lta'], url: 'https://www.mofos.com/scenes?site=189', description: "This isn't just another anal site! Letstryanal.com features the hottest real footage of amateur girls and their first time ass fucking experiences. Watch it all... innocent girlfriends being convinced to try anal, their faces of pain and screaming as they beg their boyfriend to \"please go slower\" while a large cock penetrates their tight asses for the first time! Let's face it, there is nothing like seeing a cock disappear in a virgin asshole. It's so hot!", network: 'mofos', @@ -3040,6 +3139,7 @@ const sites = [ { slug: 'latinasextapes', name: 'Latina Sex Tapes', + alias: ['lst'], url: 'https://www.mofos.com/scenes?site=188', description: "100% Real Latina Girls getting fucked by their boyfriends, filmed and submitted to us for Big $$$! Watch amazing real footage and private videos of these beautiful amateur girls, their perfectly tanned bodies, mouth-watering curves, luscious round asses, and mind blowing accents! We've only kept the best, most outstanding sex videos and uploaded them for you to watch. You'll be amazed with what we received, and more is on the way!", network: 'mofos', @@ -3047,6 +3147,7 @@ const sites = [ { slug: 'publicpickups', name: 'Public Pickups', + alias: ['ppu'], url: 'https://www.mofos.com/scenes?site=190', description: "Check out the hottest REAL footage of young girls getting picked up and fucked in public! The girls are usually shy around guys approaching them with a video camera, but that's the fun part. Besides their shyness slowly disappears after they're offered money to get dirty. While it's a real turn on seeing the girls flash and get fondled in public... the hottest part is watching them get fucked everywhere...in cars, parks, clubs, even the library!", network: 'mofos', @@ -3054,6 +3155,7 @@ const sites = [ { slug: 'pervsonpatrol', name: 'Pervs On Patrol', + alias: ['pop'], url: 'https://www.mofos.com/scenes?site=185', description: "A while back, this beautiful girl who lived next door use to always undress with her window opened. This girl had no fucking clue that I was jerking off over her from across the yard. One day I decided to grab my dad's camera and start filming her. It was amazing... until she finally caught me. Fuck, this girl was PISSED!..., but could you fucking believe that once she calmed down she was actually a little turned on by the whole situation,... and what happened next changed my life!", network: 'mofos', @@ -3061,6 +3163,7 @@ const sites = [ { slug: 'strandedteens', name: 'Stranded Teens', + alias: ['sts'], url: 'https://www.mofos.com/scenes?site=192', description: "Watch videos on StrandedTeens.com and you will never look at a hitchhiker the same way again! Some of these girls will do anything for a ride or simply to make a friend - even the shy ones. From giving road head to getting ass-fucked on the hood of the car, you can watch it all. Check it out now, you won't be disappointed!", network: 'mofos', @@ -3089,6 +3192,7 @@ const sites = [ { slug: 'shesafreak', name: "She's A Freak", + alias: ['saf'], url: 'https://www.mofos.com/scenes?site=187', description: "Fresh, young amateur girls with beautiful tight bodies, pushing themselves to the limit! It's just another great way that today's hottest new models are choosing to showcase their stunning bodies and show all of us that they're ready for more! Soaking wet masturbation, fisting, squirting, double penetration and anal toys are just some of the things they do to show us how freaky they can be and how ready they are to graduate from toys to thick, fat cock!", network: 'mofos', @@ -3097,6 +3201,7 @@ const sites = [ { slug: 'myfriendshotmom', name: 'My Friend\'s Hot Mom', + alias: ['mfhm'], url: 'https://www.naughtyamerica.com/site/my-friend-s-hot-mom', network: 'naughtyamerica', }, @@ -3127,24 +3232,28 @@ const sites = [ { slug: 'bigcockbully', name: 'Big Cock Bully', + alias: ['bcb'], url: 'https://www.naughtyamerica.com/site/big-cock-bully', network: 'naughtyamerica', }, { slug: 'bigcockhero', name: 'Big Cock Hero', + alias: ['bch'], url: 'https://www.naughtyamerica.com/site/big-cock-hero', network: 'naughtyamerica', }, { slug: 'mysistershotfriend', name: "My Sister's Hot Friend", + alias: ['mshf'], url: 'https://www.naughtyamerica.com/site/my-sister-s-hot-friend', network: 'naughtyamerica', }, { slug: 'myfirstsexteacher', name: 'My First Sex Teacher', + alias: ['mfst'], url: 'https://www.naughtyamerica.com/site/my-first-sex-teacher', network: 'naughtyamerica', }, @@ -3181,6 +3290,7 @@ const sites = [ { slug: 'mydaughtershotfriend', name: "My Daughter's Hot Friend", + alias: ['mdhf'], url: 'https://www.naughtyamerica.com/site/my-daughter-s-hot-friend', network: 'naughtyamerica', }, @@ -3204,6 +3314,7 @@ const sites = [ }, { slug: 'tonightsgirlfriendclassic', + alias: ['togc'], name: "Tonight's Girlfriend", url: 'https://www.naughtyamerica.com/site/tonight-s-girlfriend-classic', network: 'naughtyamerica', @@ -3211,24 +3322,28 @@ const sites = [ { slug: 'wivesonvacation', name: 'Wives on Vacation', + alias: ['wov'], url: 'https://www.naughtyamerica.com/site/wives-on-vacation', network: 'naughtyamerica', }, { slug: 'naughtyweddings', name: 'Naughty Weddings', + alias: ['nw'], url: 'https://www.naughtyamerica.com/site/naughty-weddings', network: 'naughtyamerica', }, { slug: 'dirtywivesclub', name: 'Dirty Wives Club', + alias: ['dwc'], url: 'https://www.naughtyamerica.com/site/dirty-wives-club', network: 'naughtyamerica', }, { slug: 'mydadshotgirlfriend', name: "My Dad's Hot Girlfriend", + alias: ['mdhg'], url: 'https://www.naughtyamerica.com/site/my-dad-s-hot-girlfriend', network: 'naughtyamerica', }, @@ -3253,30 +3368,35 @@ const sites = [ { slug: 'naughtyoffice', name: 'Naughty Office', + alias: ['no'], url: 'https://www.naughtyamerica.com/site/naughty-office', network: 'naughtyamerica', }, { slug: 'ihaveawife', name: 'I Have a Wife', + alias: ['ihaw'], url: 'https://www.naughtyamerica.com/site/i-have-a-wife', network: 'naughtyamerica', }, { slug: 'naughtybookworms', name: 'Naughty Bookworms', + alias: ['nb'], url: 'https://www.naughtyamerica.com/site/naughty-bookworms', network: 'naughtyamerica', }, { slug: 'housewife1on1', name: 'Housewife 1 on 1', + alias: ['h1o1'], url: 'https://www.naughtyamerica.com/site/housewife-1-on-1', network: 'naughtyamerica', }, { slug: 'mywifeshotfriend', name: "My Wife's Hot Friend", + alias: ['mwhf'], url: 'https://www.naughtyamerica.com/site/my-wife-s-hot-friend', network: 'naughtyamerica', }, @@ -3289,42 +3409,49 @@ const sites = [ { slug: 'assmasterpiece', name: 'Ass Masterpiece', + alias: ['am'], url: 'https://www.naughtyamerica.com/site/ass-masterpiece', network: 'naughtyamerica', }, { slug: '2chickssametime', name: '2 Chicks Same Time', + alias: ['2cst'], url: 'https://www.naughtyamerica.com/site/2-chicks-same-time', network: 'naughtyamerica', }, { slug: 'myfriendshotgirl', name: "My Friend's Hot Girl", + alias: ['mfhg'], url: 'https://www.naughtyamerica.com/site/my-friend-s-hot-girl', network: 'naughtyamerica', }, { slug: 'neighboraffair', name: 'Neighbor Affair', + alias: ['naf'], url: 'https://www.naughtyamerica.com/site/neighbor-affair', network: 'naughtyamerica', }, { slug: 'mygirlfriendsbustyfriend', name: "My Girlfriend's Busty Friend", + alias: ['mgbf'], url: 'https://www.naughtyamerica.com/site/my-girlfriend-s-busty-friend', network: 'naughtyamerica', }, { slug: 'naughtyathletics', name: 'Naughty Athletics', + alias: ['na'], url: 'https://www.naughtyamerica.com/site/naughty-athletics', network: 'naughtyamerica', }, { slug: 'mynaughtymassage', name: 'My Naughty Massage', + alias: ['mnm'], url: 'https://www.naughtyamerica.com/site/my-naughty-massage', network: 'naughtyamerica', }, @@ -3361,6 +3488,7 @@ const sites = [ { slug: 'americandaydreams', name: 'American Daydreams', + alias: ['ad'], url: 'https://www.naughtyamerica.com/site/american-daydreams', network: 'naughtyamerica', }, @@ -3385,6 +3513,7 @@ const sites = [ { slug: 'naughtyrichgirls', name: 'Naughty Rich Girls', + alias: ['nrg'], url: 'https://www.naughtyamerica.com/site/naughty-rich-girls', network: 'naughtyamerica', }, @@ -3397,6 +3526,7 @@ const sites = [ { slug: 'naughtyamerica', name: 'Naughty America', + alias: ['nam'], url: 'https://www.naughtyamerica.com/site/naughty-america', network: 'naughtyamerica', }, @@ -3598,6 +3728,7 @@ const sites = [ { slug: 'hotcrazymess', name: 'Hot Crazy Mess', + alias: ['hcm'], url: 'https://www.hotcrazymess.com', network: 'nubiles', }, @@ -3614,6 +3745,7 @@ const sites = [ { slug: 'nubilefilms', name: 'Nubile Films', + alias: ['nf', 'nubilef'], url: 'https://www.nubilefilms.com', network: 'nubiles', parameters: { @@ -3639,6 +3771,7 @@ const sites = [ { slug: 'momsteachsex', name: 'Moms Teach Sex', + alias: ['mts'], url: 'https://www.momsteachsex.com', tags: ['family', 'milf'], network: 'nubiles', @@ -3649,6 +3782,7 @@ const sites = [ { slug: 'petitehdporn', name: 'Petite HD Porn', + alias: ['phdp'], url: 'https://www.petitehdporn.com', network: 'nubiles', parameters: { @@ -3664,12 +3798,14 @@ const sites = [ { slug: 'petiteballerinasfucked', name: 'Petite Ballerinas Fucked', + alias: ['pbf'], url: 'https://www.petiteballerinasfucked.com', network: 'nubiles', }, { slug: 'teacherfucksteens', name: 'Teacher Fucks Teens', + alias: ['tft'], url: 'https://www.teacherfucksteens.com', tags: ['teacher'], network: 'nubiles', @@ -3677,6 +3813,7 @@ const sites = [ { slug: 'stepsiblingscaught', name: 'Step Siblings Caught', + alias: ['ssc'], url: 'https://www.stepsiblingscaught.com', tags: ['family'], network: 'nubiles', @@ -3687,12 +3824,14 @@ const sites = [ { slug: 'princesscum', name: 'Princess Cum', + alias: ['pc'], url: 'https://www.princesscum.com', network: 'nubiles', }, { slug: 'badteenspunished', name: 'Bad Teens Punished', + alias: ['btp'], url: 'https://www.badteenspunished.com', network: 'nubiles', }, @@ -3711,6 +3850,7 @@ const sites = [ { slug: 'daddyslilangel', name: 'Daddy\'s Lil Angel', + alias: ['dlla'], url: 'https://www.daddyslilangel.com', tags: ['family', 'anal'], network: 'nubiles', @@ -3718,6 +3858,7 @@ const sites = [ { slug: 'myfamilypies', name: 'My Family Pies', + alias: ['mfp'], url: 'https://www.myfamilypies.com', tags: ['family'], network: 'nubiles', @@ -3740,6 +3881,7 @@ const sites = [ { slug: 'thatsitcomshow', name: 'That Sitcom Show', + alias: ['tss'], url: 'https://www.thatsitcomshow.com', tags: ['parody'], network: 'nubiles', @@ -3892,12 +4034,14 @@ const sites = [ { name: 'Real Ex Girlfriends', slug: 'realexgirlfriends', + alias: ['reg'], url: 'https://pornpros.com/site/realexgirlfriends', network: 'pornpros', }, { name: '18 Years Old', slug: 'eighteenyearsold', + alias: ['18yo'], url: 'https://pornpros.com/site/18yearsold', tags: ['teen'], network: 'pornpros', @@ -3905,6 +4049,7 @@ const sites = [ { name: 'Massage Creep', slug: 'massagecreep', + alias: ['mc'], url: 'https://pornpros.com/site/massagecreep', tags: ['massage'], network: 'pornpros', @@ -4159,6 +4304,7 @@ const sites = [ { name: 'Pretty Dirty', slug: 'prettydirty', + alias: ['prdi'], url: 'https://www.prettydirty.com', network: 'puretaboo', parameters: { @@ -4208,18 +4354,20 @@ const sites = [ }, { name: 'We Live Together', + slug: 'welivetogether', + alias: ['wlt'], url: 'https://www.welivetogether.com', description: "We are girls that love to eat pussy and We Live Together! Every week we go out on the streets, bars, parties, malls... wherever and we pick up the cutest lesbians and invite them to come over and party at our apartment. From our girl friends at college, to roommates, and friends of friends.. we're always looking for the hottest lesbian girls around! We Live Together has hundreds of lesbian videos for you to download right from Reality Kings... it's the sexiest lesbian porn anywhere guys and gals! :-) Come watch us eat pussy and work our dildo magic on gorgeous, sexy girls. We love to get together and get off in steamy hot threesome and foursome lesbian movies! We promise you're going to love our amazing collection of lesbian porn. Thanks for dropping in to the We Live Together Apartment, hope you enjoy your visit! Love xoxo Brittney, Taylor, Nicole & All the Girls", parameters: { siteId: 3 }, - slug: 'welivetogether', network: 'realitykings', }, { name: 'Black GFs', + slug: 'blackgfs', + alias: ['bgfs'], url: 'https://www.realitykings.com/scenes?site=47', description: '', parameters: null, - slug: 'blackgfs', network: 'realitykings', }, { @@ -4232,10 +4380,11 @@ const sites = [ }, { name: 'GF Revenge', + slug: 'gfrevenge', + alias: ['gfr'], url: 'https://www.gfrevenge.com', description: '', parameters: { siteId: 49 }, - slug: 'gfrevenge', network: 'realitykings', }, { @@ -4265,6 +4414,7 @@ const sites = [ { name: 'Teens Love Huge Cocks', url: 'https://www.teenslovehugecocks.com', + alias: ['tlhc'], description: "Teens Love Big Cocks is dedicated to providing you the hottest teens getting fucked by the biggest cocks! Every week Reality Kings introduces another teen to a big hot meat rod! When these girls see a big throbbing penis they can't resist shoving it in their hot teen mouths. These girl next door types are no slouches when it comes to oral sex! Watch them deepthroat & gag on a mouth full of cock before taking big hot loads all over their pretty faces. The fun doesn't stop there! These girls love getting their tight teen pussy & asses spread wide and pounded by massive dicks! These girls won't settle for less & there is no dick too large. Start downloading TeensLoveBigCock porn videos & HD quality pictures now and watch teen pussy get fucked like you've never seen before!", parameters: { siteId: 42 }, slug: 'teenslovehugecocks', @@ -4273,6 +4423,7 @@ const sites = [ { name: 'Big Naturals', url: 'https://www.bignaturals.com', + alias: ['bin'], description: "If you think there is nothing like big natural breasts, Big Naturals welcomes you home. Reality Kings brings you nothing but the hottest amateur big tit women. We're talking about some seriously big boobs. Sexy women with big bouncy tits who love to get it on. These women don't hesitate to let their big natural tits get fucked and let those massive juggs bounce! Big Naturals has hundreds of high quality videos available for download. If into tits, this is the place to be. There's no plastic parts here, only big natural boobs! There's thousands of high resolution pics available to download as well. Check out any of our top rated scenes for the biggest, huge natural tits. Hooters, fun bags, juggs... whatever you want to call them Reality Kings and Big Naturals have the hottest big boobs you'll find anywhere. Sit back, relax, and watch the titties bounce... Reality Kings style!", parameters: { siteId: 5 }, slug: 'bignaturals', @@ -4280,15 +4431,17 @@ const sites = [ }, { name: 'Money Talks', + slug: 'moneytalks', + alias: ['mot'], url: 'https://www.moneytalks.com', description: "Money Talks... bullshit walks. We all know the saying, but at Reality Kings we like to prove it! Just watch us approach everyday people on the street and ask them what they will do for some real American Greenbacks! Check out smokin' hot amateurs preform in porn videos or watch crazy college kids preform insane stunts on film... all in exchange for cold hard cash. People will do anything when Money Talks! Watch as we offer cash in exchange for one, AMAZING blow job! From crazy Spring Breakers to the girl next door, we find some amazing sluts and see just what they'll do for the loot--girls that give up the booty, for the booty! Arrr! Reality Kings has every high quality Money Talks episode available for download. We're talking about some seriously hot videos here. You won't find this crazy porn content anywhere else! Remember, Money Talks... bullshit walks!", parameters: { siteId: 28 }, - slug: 'moneytalks', network: 'realitykings', }, { name: 'Moms Lick Teens', url: 'https://www.momslickteens.com', + alias: ['momslickteens'], description: 'Hot moms know how to fuck, especially when they have a lot of pent up energy. MomsLickTeens.com is where all the magic happens between lustful milf minxes and curious 18+ teen bombshells in HD porn videos. Mature horny women love to sample a fresh batch of pussy and ass whenever possible here at Reality Kings. They love teaching the carnal arts to eager younger women who crave a deeper understanding of the female body. Our bodacious mommies love exploring the anatomy of their fresh-faced lesbian lovers and engage in cunnilingus and anilingus within seconds. Naked women licking, sucking, scissoring, and toying their gaping pussy and assholes with a plethora of adult toys is absolutely riveting to watch. You’ll be aroused by RK girls of different ages rolling around together in sweaty sex scenes. Moms Lick Teens features limber tongues exploring the deepest recesses of female erogenous zones often eliciting projectile squirt orgasms. The phenomenon of female ejaculation occurs regularly in our premium erotica so get a load of it while blowing your own load to our buxom mommies today!', parameters: { siteId: 43 }, slug: 'momslickteens', @@ -4296,10 +4449,10 @@ const sites = [ }, { name: 'RK Prime', - url: 'https://www.realitykings.com/scenes?site=45', - description: '', - parameters: null, slug: 'rkprime', + alias: ['rkp'], + url: 'https://www.realitykings.com/scenes?site=45', + parameters: null, network: 'realitykings', }, { @@ -4329,6 +4482,7 @@ const sites = [ { name: 'Cum Fiesta', url: 'https://www.cumfiesta.com', + alias: ['cuf'], description: '"Is this the fiesta $4 " Of course, welcome to the Cum Fiesta! Every week Reality Kings welcomes another hottie to the party... the dick sucking party! :-) When the girl (or girls!) arrive they show us the super secret password (watch a trailer to find out) and the party begins! As their clothes come off, these babes begin to show off their amazing oral skills. Amateur chicks taking the biggest facial cumshots, that\'s what Cum Fiesta is about! There are no pansy blow jobs here, these chicks give the best head around, and take huge cum shots to their face at the same time. Download hundreds of high quality videos and pics of semen swallowing hotties. Join the party that features amateurs, newbies, and even the girl next door! These babes love to suck cock and take incredible cum shots you\'ll find no where else! This is no siesta folks, it\'s a Cum Fiesta!', parameters: { siteId: 10 }, slug: 'cumfiesta', @@ -4360,10 +4514,11 @@ const sites = [ }, { name: 'CFNM Secret', + slug: 'cfnmsecret', + alias: ['cfnms'], url: 'https://www.realitykings.com/scenes?site=9', description: "Shhh, keep your voice down! At Reality Kings we have a secret to share, the CFNM Secret! What's this secret all about$5 Clothed Females and Nude Males (CFNM)! Beautiful women dressed to impress and an unsuspecting male who is about to discover the secret for himself! These voyeurs are interested in every inch of the male body, touching and grabbing, they won't stop until they've had enough. Who wouldn't mind being these ladies play things$6 Gorgeous babes teasing and embarrassing men for their own fun and pleasure. Vulnerable guys being inspected and scrutinized in amazing high quality voyeur sex scenes. From CFNM handjobs to CFNM party scenes Reality Kings offers the hottest women enjoying the male body like never before. Browse our free CFNM videos below to download high quality pics and trailers. You're going to tell your friends about this secret, the CFNM Secret!", parameters: null, - slug: 'cfnmsecret', network: 'realitykings', }, { @@ -4416,10 +4571,11 @@ const sites = [ }, { name: 'Euro Sex Parties', + slug: 'eurosexparties', + alias: ['esp'], url: 'https://www.realitykings.com/scenes?site=13', description: "Pack your bags folks, we're headed to Europe! It's time to join two best friends as they travel across Europe and throw some amazing Euro Sex Parties. Forget about boring 1on1 sex scenes. Get ready for hardcore threesomes, foursomes, and fivesomes! Hot European porn directly from the source, just the way we like it. Euro babes with tight bodies taking on multiple cocks... what could be better$9 How about watching them eat pussy as well! Now that's a group sex party we'd love to attend. From hardcore group sex to hardcore gangbangs, this is the hottest content anywhere. Euro Sex Parties offers hundreds of European porn videos and pics to download in stunning high quality formats. Don't pack your bags yet, Reality Kings has tons of free movies and pics for you to download right here! Join us on our European vacation, and we'll throw a few Euro Sex Parties along the way.", parameters: null, - slug: 'eurosexparties', network: 'realitykings', }, { @@ -4528,10 +4684,11 @@ const sites = [ }, { name: 'Moms Bang Teens', + slug: 'momsbangteens', + alias: ['mbt'], url: 'https://www.momsbangteens.com', description: "Reality Kings presents the first website dedicated to hot moms who love to bang 18+ teens. Moms Bang Teens features the sexiest MILFs on the web, and these MILFs are all about fucking young guys on camera. If you remember lusting after one of your friend's hot moms back in grade school, then you know exactly what Moms Bang Teens is all about. Imagine if instead of just fantasizing about that sexy mother, you actually got to bang her. These are the same hot moms you see at your local supermarket and shopping at your neighborhood mall. Some of them are married and never get the attention they need. While others are just horny and sexy moms who never got tied down with a husband. Instead they like to go out and find hot young studs that know how to fuck them right. These are experienced and mature women who know what they want; young 18+ teens that can give them that rock hard cock.", parameters: { siteId: 27 }, - slug: 'momsbangteens', network: 'realitykings', }, { @@ -4617,6 +4774,7 @@ const sites = [ { name: 'Round and Brown', url: 'https://www.roundandbrown.com', + alias: ['rab'], description: 'Chocolate lovers out there, Reality Kings presents to you... Round And Brown, the porn site that caters to horny dudes who have a mighty craving for fine "sistah" booties. The ladies featured in these ebony porn movies are SIZZLING HOT, like a newly melted chocolate fondue! We\'re talking about some damn fine black booties! If it\'s Round And Brown, it gets the special lube treatment, no exceptions! Think you can handle this collection of premium ebony ass$1 There\'s no skinny white girls here, only gorgeous black beauties with deliciously round booties, featured in the best hardcore ebony sex videos around! Reality Kings is the only one who can bring you this amazing collection of black girl porn. If you love big round asses, gorgeous black babes, and amazing tits we have the videos and pics you\'re looking for. Warning: This chocolate may melt in your hand and your mouth... but who cares, if it\'s Round And Brown!', parameters: { siteId: 33 }, slug: 'roundandbrown', @@ -4624,10 +4782,11 @@ const sites = [ }, { name: 'Monster Curves', + slug: 'monstercurves', + alias: ['mcu'], url: 'https://www.realitykings.com/scenes?site=29', description: "Forget about those toothpick size runway models, give us some ladies with curves-- Monster Curves! If you love your women round and juicy, ladies with some meat on their bones... then we have the content for you! We're talking about women with hips that don't quit. Incredibly round asses that will make your mouth water! Big booty girls with big round asses. Only people as obsessed as us could bring you this many pairs of perfects hips and asses! Download hundreds of movies and pics featuring gorgeous girls with amazing curves (we call them Monster Curves). Check out some of our free trailers below, these girls and their round butts and perfect hips are sure to wet your appetite! Every week, Reality Kings brings you nothing but the finest butts, the sexy round asses that jiggle when you grab 'em, the women with the Monster Curves!", parameters: null, - slug: 'monstercurves', network: 'realitykings', }, // SCORE @@ -5180,6 +5339,7 @@ const sites = [ { slug: 'danejones', name: 'Dane Jones', + alias: ['dnj'], url: 'https://www.danejones.com/', parameters: { siteId: 290 }, network: 'sexyhub', @@ -5187,6 +5347,7 @@ const sites = [ { slug: 'lesbea', name: 'Lesbea', + alias: ['lsb'], url: 'https://www.lesbea.com', parameters: { siteId: 291 }, tags: ['lesbian'], @@ -5195,6 +5356,7 @@ const sites = [ { slug: 'massagerooms', name: 'Massage Rooms', + alias: ['mrs'], url: 'https://www.sexyhub.com/scenes?site=292', tags: ['massage'], network: 'sexyhub', @@ -5202,6 +5364,7 @@ const sites = [ { slug: 'momxxx', name: 'Mom XXX', + alias: ['mom'], url: 'https://www.sexyhub.com/scenes?site=293', tags: ['milf'], network: 'sexyhub', @@ -5209,6 +5372,7 @@ const sites = [ { slug: 'fitnessrooms', name: 'Fitness Rooms', + alias: ['frs'], url: 'https://www.sexyhub.com/scenes?site=294', network: 'sexyhub', }, @@ -5223,6 +5387,7 @@ const sites = [ { slug: 'exxxtrasmall', name: 'Exxxtra Small', + alias: ['ext'], description: '', url: 'https://www.exxxtrasmall.com', parameters: { id: 'exs' }, @@ -5239,6 +5404,7 @@ const sites = [ { slug: 'innocenthigh', name: 'Innocent High', + alias: ['inh'], description: '', url: 'https://www.innocenthigh.com', parameters: { id: 'ih' }, @@ -5255,7 +5421,7 @@ const sites = [ { slug: 'cfnmteens', name: 'CFNM Teens', - description: '', + alias: ['cfnmt'], url: 'https://www.cfnmteens.com', parameters: { id: 'cfnm' }, network: 'teamskeet', @@ -5263,7 +5429,7 @@ const sites = [ { slug: 'teensloveanal', name: 'Teens Love Anal', - description: '', + alias: ['tla'], url: 'https://www.teensloveanal.com', tags: ['anal'], parameters: { id: 'tla' }, @@ -5280,15 +5446,15 @@ const sites = [ { slug: 'shesnew', name: 'She\'s New', - description: '', - url: 'https://www.shesnow.com', + alias: ['ssn'], + url: 'https://www.shesnew.com', parameters: { id: 'bsc' }, network: 'teamskeet', }, { slug: 'teensdoporn', name: 'Teens Do Porn', - description: '', + alias: ['tdp'], url: 'https://www.teensdoporn.com', parameters: { id: 'tdp' }, network: 'teamskeet', @@ -5312,6 +5478,7 @@ const sites = [ { slug: 'thisgirlsucks', name: 'This Girl Sucks', + alias: ['tgs'], description: '', url: 'https://www.thisgirlsucks.com', parameters: { id: 'tgs' }, @@ -5320,6 +5487,7 @@ const sites = [ { slug: 'teenslovemoney', name: 'Teens Love Money', + alias: ['tlm'], description: '', url: 'https://www.teenslovemoney.com', parameters: { id: 'tlm' }, @@ -5440,7 +5608,7 @@ const sites = [ { slug: 'stepsiblings', name: 'Step Siblings', - description: '', + alias: ['steps'], url: 'https://www.stepsiblings.com', parameters: { id: 'sss' }, network: 'teamskeet', @@ -5457,7 +5625,7 @@ const sites = [ { slug: 'familystrokes', name: 'Family Strokes', - description: '', + alias: ['fams'], url: 'https://www.familystrokes.com', parameters: { scraper: 'A' }, tags: ['family'], @@ -5475,6 +5643,7 @@ const sites = [ { name: 'When Girls Play', slug: 'whengirlsplay', + alias: ['wgp'], url: 'https://www.whengirlsplay.com', description: 'Watch hot girls seducing other girls in steamy lesbian play. These sluts finger, use dildos, strap-ons and squirt their pink pussies in lesbian porn by WhenGirlsPlay.com. Get Access to the Hottest Lesbian videos on the web!', parameters: { siteId: 227 }, @@ -5501,6 +5670,7 @@ const sites = [ { name: 'Twistys Hard', slug: 'twistyshard', + alias: ['th'], url: 'https://www.twistyshard.com', description: 'Watch horny nymphos get stuffed with stiff, bulging cocks. Hot sluts eager to spread their legs, bend over on all fours, or mount a big rock-hard erection. They want their needs fulfilled, and love to show off how they do it. Get into Twistys Hard and see just how hard things can get!', parameters: { siteId: 225 }, @@ -5788,12 +5958,14 @@ const sites = [ { name: 'Casting Couch X', slug: 'castingcouchx', + alias: ['castingcouch x', 'castingcouch-x', 'casting couch-x'], url: 'https://castingcouch-x.com', network: 'whalemember', }, { name: 'Passion HD', slug: 'passionhd', + alias: ['phd', 'passion-hd'], url: 'https://passion-hd.com', network: 'whalemember', }, @@ -5819,6 +5991,7 @@ const sites = [ { name: 'Fantasy HD', slug: 'fantasyhd', + alias: ['fhd'], url: 'https://fantasyhd.com', network: 'whalemember', }, @@ -5860,12 +6033,14 @@ const sites = [ { name: 'My Very First Time', slug: 'myveryfirsttime', + alias: ['mvft'], url: 'https://myveryfirsttime.com', network: 'whalemember', }, { name: 'Baeb', slug: 'baeb', + alias: ['baebz'], url: 'https://baeb.com', network: 'whalemember', }, @@ -5873,6 +6048,7 @@ const sites = [ { slug: 'wicked', name: 'Wicked', + alias: ['wkp'], url: 'https://www.wicked.com', description: 'Welcome to the new Wicked.com! Watch over 25 years of Wicked Pictures\' brand of award-winning porn for couples and women in 4k HD movies & xxx videos', parameters: { independent: true }, @@ -5931,6 +6107,7 @@ exports.seed = knex => Promise.resolve() const sitesWithNetworks = sites.map(site => ({ slug: site.slug, name: site.name, + alias: (site.alias || []).join(','), description: site.description, url: site.url, parameters: site.parameters, @@ -5954,3 +6131,121 @@ exports.seed = knex => Promise.resolve() return upsert('sites_tags', tagAssociations, ['site_id', 'tag_id'], knex); }); + +/* + 'X-Art' => 'xart', + 'met-art' => 'metart', + '18og' => '18OnlyGirls', + 'a1o1' => 'Asian1on1', + 'add' => 'ManualAddActors', + 'analb' => 'AnalBeauty', + 'bgonzo' => 'BangGonzo', + 'btlbd' => 'BigTitsLikeBigDicks', + 'bjf' => 'BlowjobFridays', + 'cws' => 'CzechWifeSwap', + 'Daughter' => 'DaughterSwap', + 'Daughters' => 'DaughterSwap', + 'dc' => 'DorcelVision', + 'dpg' => 'DigitalPlayground', + 'dsw' => 'DaughterSwap', + 'faq' => 'FirstAnalQuest', + 'ft' => 'FastTimes', + 'fittingroom' => 'Fitting-Room', + 'gbcp' => 'GangbangCreampie', + 'hart' => 'Hegre', + 'hegre-art' => 'Hegre', + 'kha' => 'KarupsHA', + 'kow' => 'KarupsOW', + 'kpc' => 'KarupsPC', + 'la' => 'LatinAdultery', + 'lcd' => 'LittleCaprice', + 'lhf' => 'LoveHerFeet', + 'littlecapricedreams' => 'Little Caprice Dreams', + 'maj' => 'ManoJob', + 'mfl' => 'Mofos', + 'mj' => 'ManoJob', + 'mpov' => 'MrPOV', + 'naughtyamericavr' => 'NaughtyAmerica', + 'news' => 'NewSensations', + 'ps' => 'PropertySex', + 'sart' => 'SexArt', + 'sbj' => 'StreetBlowjobs', + 'sislove' => 'SisLovesMe', + 'tds' => 'TheDickSuckers', + 'these' => 'TheStripperExperience', + 'tlc' => 'TeensLoveCream', + 'tle' => 'TheLifeErotic', + 'tog' => 'TonightsGirlfriend', + 'wowg' => 'WowGirls', + 'wy' => 'WebYoung', + 'ztod' => 'ZeroTolerance', + 'itc' => 'InTheCrack', + "abbw" => "AbbyWinters", + "abme" => "AbuseMe", + "ana" => "AnalAngels", + "atke" => "ATKExotics", + "atkg" => "ATKGalleria", + "atkgfs" => "ATKGirlfriends", + "atkh" => "ATKHairy", + "aktp" => "ATKPetites", + "ba" => "Beauty-Angels", + "bna" => "BrandNew", + "bam" => "BruceAndMorgan", + "bcast" => "BrutalCastings", + "bd" => "BrutalDildos", + "bpu" => "BrutalPickups", + "cza" => "CzhecAmateurs", + "czbb" => "CzechBangBus", + "czb" => "CzechBitch", + "cc" => "CzechCasting", + "czc" => "CzechCouples", + "czestro" => "CzechEstrogenolit", + "czf" => "CzechFantasy", + "czgb" => "CzechGangBang", + "cgfs" => "CzechGFS", + "czharem" => "CzechHarem", + "czm" => "CzechMassage", + "czo" => "CzechOrgasm", + "czps" => "CzechPawnShop", + "css" => "CzechStreets", + "cztaxi" => "CzechTaxi", + "czt" => "CzechTwins", + "dts" => "DeepThroatSirens", + "doan" => "DiaryOfANanny", + "ds" => "DungeonSex", + "ffr" => "FacialsForever", + "ff" => "FilthyFamily", + "fbbg" => "FirstBGG", + "fs" => "FuckStudies", + "tfcp" => "FullyClothedPissing", + "gdp" => "GirlsDoPorn", + "Harmony" => "HarmonyVision", + "hletee" => "HelplessTeens", + "jlmf" => "JessieLoadsMonsterFacials", + "lang" => "LANewGirl", + "mmp" => "MMPNetwork", + "mbc" => "MyBabysittersClub", + "nvg" => "NetVideoGirls", + "oo" => "Only-Opaques", + "os" => "Only-Secretaries", + "oss" => "OnlySilAndSatin", + "psus" => "PascalsSubSluts", + "psp" => "PorsntarsPunishment", + "pdmqfo" => "QuestForOrgasm", + "sed" => "SexualDisgrace", + "sislov" => "SisLovesMe", + "tslw" => "SlimeWave", + "stre" => "StrictRestraint", + "t18" => "Taboo18", + "tsma" => "TeenSexMania", + "tsm" => "TeenSexMovs", + "ttw" => "TeensInTheWoods", + "tgw" => "ThaiGirlsWild", + "taob" => "TheArtOfBlowJob", + "trwo" => "TheRealWorkout", + "tt" => "TryTeens", + "vp" => "VIPissy", + "wrh" => "WeAreHairy", + "yt" => "YoungThroats", + ]; +*/ diff --git a/src/releases.js b/src/releases.js index 5acd7980..e4054561 100644 --- a/src/releases.js +++ b/src/releases.js @@ -375,10 +375,11 @@ async function updateReleasesSearch(releaseIds) { TO_TSVECTOR( 'traxxx', releases.title || ' ' || - sites.name || ' ' || - sites.slug || ' ' || networks.name || ' ' || networks.slug || ' ' || + sites.name || ' ' || + sites.slug || ' ' || + COALESCE(sites.alias, '') || ' ' || COALESCE(releases.shoot_id, '') || ' ' || COALESCE(TO_CHAR(releases.date, 'YYYY YY MM FMMM FMmonth mon DD FMDD'), '') || ' ' || STRING_AGG(COALESCE(actors.name, ''), ' ') || ' ' || @@ -394,7 +395,7 @@ async function updateReleasesSearch(releaseIds) { LEFT JOIN tags ON local_tags.tag_id = tags.id LEFT JOIN tags as tags_aliases ON local_tags.tag_id = tags_aliases.alias_for ${releaseIds ? 'WHERE releases.id = ANY(?)' : ''} - GROUP BY releases.id, sites.name, sites.slug, networks.name, networks.slug; + GROUP BY releases.id, sites.name, sites.slug, sites.alias, networks.name, networks.slug; `, releaseIds && [releaseIds]); if (documents.rows?.length > 0) { diff --git a/src/scrapers/assylum.js b/src/scrapers/assylum.js index 09039858..178879e2 100644 --- a/src/scrapers/assylum.js +++ b/src/scrapers/assylum.js @@ -41,22 +41,22 @@ function scrapeLatest(scenes, site, models) { }); } -function scrapeScene({ html, q, qa, qd, qis }, url, site, models) { +function scrapeScene({ html, qu }, url, site, models) { const release = { url }; [release.entryId] = url.split('/').slice(-1); - release.title = q('.mas_title', true); - release.description = q('.mas_longdescription', true); - release.date = qd('.mas_description', 'MMMM DD, YYYY', /\w+ \d{1,2}, \d{4}/); + release.title = qu.q('.mas_title', true); + release.description = qu.q('.mas_longdescription', true); + release.date = qu.date('.mas_description', 'MMMM DD, YYYY', /\w+ \d{1,2}, \d{4}/); - const actorString = q('.mas_description', true).replace(/\w+ \d{1,2}, \d{4}/, ''); + const actorString = qu.q('.mas_description', true).replace(/\w+ \d{1,2}, \d{4}/, ''); const actors = matchActors(actorString, models); if (actors.length > 0) release.actors = actors; else release.actors = extractActors(actorString); - release.tags = qa('.tags a', true); + release.tags = qu.all('.tags a', true); - release.photos = qis('.stills img').map(photoPath => `${site.url}/${photoPath}`); + release.photos = qu.imgs('.stills img').map(photoPath => `${site.url}/${photoPath}`); const posterIndex = 'splash:'; const poster = html.slice(html.indexOf('faceimages/', posterIndex), html.indexOf('.jpg', posterIndex) + 4); diff --git a/src/scrapers/bamvisions.js b/src/scrapers/bamvisions.js new file mode 100644 index 00000000..0580787f --- /dev/null +++ b/src/scrapers/bamvisions.js @@ -0,0 +1,26 @@ +'use strict'; + +const { geta } = require('../utils/qu'); + +function scrapeLatest(scenes, _site) { + return scenes.map(( qu ) => { + const release = {}; + + release.title = qu.q('h3 a', true); + release.url = qu.url('h3 a'); + + console.log(release); + return release; + }); +} + +async function fetchLatest(site, page = 1) { + const url = `https://tour.bamvisions.com/categories/movies/${page}/latest/`; + const res = geta(url, '.item-episode'); + + return res.ok ? scrapeLatest(res.items, site) : res.status; +} + +module.exports = { + fetchLatest, +}; diff --git a/src/scrapers/hush.js b/src/scrapers/hush.js index 8fa828b3..e013986f 100644 --- a/src/scrapers/hush.js +++ b/src/scrapers/hush.js @@ -134,16 +134,16 @@ function scrapeAllTour(scenes) { }); } -function scrapeScene({ html, q, qa, qd, ql }, site, url, baseRelease) { +function scrapeScene({ html, qu }, site, url, baseRelease) { const release = { url }; - release.title = q('.centerwrap h2', true); - release.description = q('.videocontent p', true); + release.title = qu.q('.centerwrap h2', true); + release.description = qu.q('.videocontent p', true); - release.date = qd('.videodetails .date', 'MM/DD/YYYY'); - release.duration = ql('.videodetails .date'); + release.date = qu.date('.videodetails .date', 'MM/DD/YYYY'); + release.duration = qu.dur('.videodetails .date'); - release.actors = qa('.modelname a', true); + release.actors = qu.all('.modelname a', true); const posterPath = html.match(/poster="([\w-/.]+)"/)?.[1]; [release.poster, release.photos] = extractPoster(posterPath, site, baseRelease); @@ -151,7 +151,7 @@ function scrapeScene({ html, q, qa, qd, ql }, site, url, baseRelease) { const trailerPath = html.match(/\/trailers\/.*.mp4/); if (trailerPath) release.trailer = { src: `${site.parameters?.media || site.url}${trailerPath}` }; - const stars = q('.modelrates + p', true).match(/\d.\d/)?.[0]; + const stars = qu.q('.modelrates + p', true).match(/\d.\d/)?.[0]; if (stars) release.stars = Number(stars); // release.entryId = html.match(/set-target-(\d+)/)[1]; @@ -160,31 +160,31 @@ function scrapeScene({ html, q, qa, qd, ql }, site, url, baseRelease) { return release; } -function scrapeSceneT1({ html, q, qa, qd, ql, qtx }, site, url, baseRelease, channelRegExp) { +function scrapeSceneT1({ html, qu }, site, url, baseRelease, channelRegExp) { const release = { url }; - release.title = q('.trailer-section-head .section-title', true); - release.description = qtx('.row .update-info-block'); + release.title = qu.q('.trailer-section-head .section-title', true); + release.description = qu.text('.row .update-info-block'); - release.date = qd('.update-info-row', 'MMM D, YYYY', /\w+ \d{1,2}, \d{4}/); - release.duration = ql('.update-info-row:nth-child(2)'); + release.date = qu.date('.update-info-row', 'MMM D, YYYY', /\w+ \d{1,2}, \d{4}/); + release.duration = qu.dur('.update-info-row:nth-child(2)'); - release.actors = qa('.models-list-thumbs a').map(el => ({ - name: q(el, 'span', true), - avatar: getImageWithFallbacks(q, 'img', site, el), + release.actors = qu.all('.models-list-thumbs a').map(el => ({ + name: qu.q(el, 'span', true), + avatar: getImageWithFallbacks(qu.q, 'img', site, el), })); - release.tags = qa('.tags a', true); + release.tags = qu.all('.tags a', true); // const posterPath = html.match(/poster="(.*\.jpg)/)?.[1]; - const posterPath = q('.player-thumb img', 'src0_1x'); + const posterPath = qu.q('.player-thumb img', 'src0_1x'); [release.poster, release.photos] = extractPoster(posterPath, site, baseRelease); const trailer = html.match(/ { + const bio = qu.texts('.stats p').reduce((acc, info) => { const [key, value] = info.split(':'); return { @@ -254,7 +254,7 @@ function scrapeProfile({ el, q, qtxs }, site) { if (bio.age) profile.age = Number(bio.age); if (bio.height) profile.height = feetInchesToCm(bio.height); - profile.avatar = getImageWithFallbacks(q, '.profileimg img', site); + profile.avatar = getImageWithFallbacks(qu.q, '.profileimg img', site); const qReleases = ctxa(el, '.modelFeatures .modelfeature'); profile.releases = scrapeAll(qReleases, site); @@ -262,10 +262,10 @@ function scrapeProfile({ el, q, qtxs }, site) { return profile; } -function scrapeProfileT1({ el, q, qa }, site) { +function scrapeProfileT1({ el, qu }, site) { const profile = {}; - const bio = qa('.detail-div + .detail-div p, .detail-div p', true).reduce((acc, info) => { + const bio = qu.all('.detail-div + .detail-div p, .detail-div p', true).reduce((acc, info) => { const [key, value] = info.split(':'); if (!value) return acc; @@ -292,7 +292,7 @@ function scrapeProfileT1({ el, q, qa }, site) { if (heightMetric) profile.height = Number(heightMetric[1]); if (heightImperial) profile.height = feetInchesToCm(Number(heightImperial[0]), Number(heightImperial[1])); - profile.avatar = getImageWithFallbacks(q, '.img-div img', site); + profile.avatar = getImageWithFallbacks(qu.q, '.img-div img', site); const qReleases = ctxa(el, '.item-video'); profile.releases = scrapeAllT1(qReleases, site); @@ -300,10 +300,10 @@ function scrapeProfileT1({ el, q, qa }, site) { return profile; } -function scrapeProfileTour({ el, q, qtxs }, site) { +function scrapeProfileTour({ el, qu }, site) { const profile = {}; - const bio = qtxs('.model_bio').reduce((acc, info) => { + const bio = qu.texts('.model_bio').reduce((acc, info) => { const [key, value] = info.split(':'); return { @@ -339,7 +339,7 @@ function scrapeProfileTour({ el, q, qtxs }, site) { if (bio.aliases) profile.aliases = bio.aliases.split(',').map(alias => alias.trim()); - profile.avatar = getImageWithFallbacks(q, '.model_picture img', site); + profile.avatar = getImageWithFallbacks(qu.q, '.model_picture img', site); const qReleases = ctxa(el, '.update_block'); profile.releases = qReleases.map((qRelease) => { diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index 05fd0455..f372298a 100644 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -4,6 +4,7 @@ const adulttime = require('./adulttime'); const assylum = require('./assylum'); const amateurallure = require('./amateurallure'); const babes = require('./babes'); +const bamvisions = require('./bamvisions'); const bang = require('./bang'); const bangbros = require('./bangbros'); const blowpass = require('./blowpass'); @@ -70,6 +71,7 @@ module.exports = { amateurallure, assylum, babes, + bamvisions, bang, bangbros, blowpass, @@ -108,7 +110,7 @@ module.exports = { perfectgonzo, pervcity, pimpxxx: cherrypimps, - pornpros: whalemember, + ornpros: whalemember, private: privateNetwork, puretaboo, realitykings,