diff --git a/assets/components/releases/media.vue b/assets/components/releases/media.vue index 03919f12..8031bec3 100644 --- a/assets/components/releases/media.vue +++ b/assets/components/releases/media.vue @@ -236,7 +236,7 @@ export default { } .item { - max-height: 18rem; + height: 18rem; max-width: 100%; box-shadow: 0 0 3px var(--shadow-weak); } diff --git a/public/img/logos/killergram/favicon.png b/public/img/logos/killergram/favicon.png new file mode 100644 index 00000000..a358f97a Binary files /dev/null and b/public/img/logos/killergram/favicon.png differ diff --git a/public/img/logos/killergram/killergram.png b/public/img/logos/killergram/killergram.png new file mode 100644 index 00000000..1c54765f Binary files /dev/null and b/public/img/logos/killergram/killergram.png differ diff --git a/public/img/logos/killergram/lazy/favicon.png b/public/img/logos/killergram/lazy/favicon.png new file mode 100644 index 00000000..e937852c Binary files /dev/null and b/public/img/logos/killergram/lazy/favicon.png differ diff --git a/public/img/logos/killergram/lazy/killergram.png b/public/img/logos/killergram/lazy/killergram.png new file mode 100644 index 00000000..772bb2c1 Binary files /dev/null and b/public/img/logos/killergram/lazy/killergram.png differ diff --git a/public/img/logos/killergram/lazy/network.png b/public/img/logos/killergram/lazy/network.png new file mode 100644 index 00000000..97790bd4 Binary files /dev/null and b/public/img/logos/killergram/lazy/network.png differ diff --git a/public/img/logos/killergram/network.png b/public/img/logos/killergram/network.png new file mode 100644 index 00000000..2e914e21 Binary files /dev/null and b/public/img/logos/killergram/network.png differ diff --git a/public/img/logos/killergram/thumbs/favicon.png b/public/img/logos/killergram/thumbs/favicon.png new file mode 100644 index 00000000..e937852c Binary files /dev/null and b/public/img/logos/killergram/thumbs/favicon.png differ diff --git a/public/img/logos/killergram/thumbs/killergram.png b/public/img/logos/killergram/thumbs/killergram.png new file mode 100644 index 00000000..32f44f2a Binary files /dev/null and b/public/img/logos/killergram/thumbs/killergram.png differ diff --git a/public/img/logos/killergram/thumbs/network.png b/public/img/logos/killergram/thumbs/network.png new file mode 100644 index 00000000..ea08b2e0 Binary files /dev/null and b/public/img/logos/killergram/thumbs/network.png differ diff --git a/seeds/01_networks.js b/seeds/01_networks.js index 9ff977dc..1b8e420c 100644 --- a/seeds/01_networks.js +++ b/seeds/01_networks.js @@ -241,6 +241,11 @@ const networks = [ url: 'https://www.kellymadison.com', description: 'Home of Kelly Madison and Ryan Madison', }, + { + slug: 'killergram', + name: 'Killergram', + url: 'http://www.killergram.com', + }, { slug: 'kink', name: 'Kink', diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 0b964d4a..66534f4a 100644 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -2669,6 +2669,281 @@ const sites = [ description: 'Home of Kelly Madison and Ryan Madison', parent: 'kellymadison', }, + // KILLERGRAM + { + name: 'Urban Perversions', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=hard-fi%20sex', + slug: 'urbanperversions', + alias: [ + 'hardfisex', + 'hard-fi sex', + 'hard fi sex', + ], + description: 'Slighly twisted, totally kinky is what its all about. See our masked fuckers slam our fishnet clad sluts in every open wet orifice.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Anal Rehab', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=anal%20rehab', + slug: 'analrehab', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Sexy Club Babes', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=club%20babes', + slug: 'sexyclubbabes', + description: 'UK girls are renowned for having a "mad night out with the girls". A bit too much to drink, dancing followed by hardcore sex.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Bitch Funkers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=bitch%20funkers', + slug: 'bitchfunkers', + description: 'Welcome to the home of the Bitch Funkers. The domain of hardcore sluts that dish out a serious cunt hammering to hot bitches.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Girly Riders', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=girly%20riders', + slug: 'girlyriders', + description: 'The "Porno Brat Babes" cruise the streets on their low-rider cycles in search of hard cock & raw fucking action. Feed them.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'College Babes Exposed', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=college%20babes', + slug: 'collegebabesexposed', + description: 'A collection of the "Hottest UK Porn Babes" in tight ass clinging denim jeans. Super hot sexy babes who are students of "Cockology".', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Cum Into My Office', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=office%20antics', + slug: 'cumintomyoffice', + alias: [ + 'officeantics', + 'office antics', + ], + description: 'Witness the day to day events of a typical day at our offices. We open up the doors at Killergram Towers for horny hot pornstars.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Space Hoppers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=space%20hoppers', + slug: 'spacehoppers', + description: 'Porn School, Teen Nymphos ride their retro Hoppers & chomp on monster candy sticks, dressed in their best Schoolgirl outfits.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Booty Back Packers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=booty%20packers', + slug: 'bootybackpackers', + description: 'A selection of some of the finest fuck-slut booty that the UK has to offer. Your "Plump Assed Platoon of Pornstars" get fucked hard.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Pornostatic', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=pornostatic', + slug: 'pornostatic', + description: 'At Killergram-Pornostatic we aim to bring you the most diverse selection of girls, niches & websites in glorious HD hardcore.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Wife Slut Adventures', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=wife%20sluts', + slug: 'wifeslutadventures', + description: "From the supermarket to the gym, the daily school run to the shopping malls, these sex hungry MILF's are on the prowl for fat cock.", + hasLogo: false, + parent: 'killergram', + }, + { + name: 'The Lady Pimp', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=the%20lady%20pimp', + slug: 'theladypimp', + description: "It's Hardcore Female Power Porn as our resident Porno Pimps try out a bevy of hopeful studs for their own pleasure.", + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Tattooed Fuck Sluts', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=tattooed%20sluts', + slug: 'tattooedfucksluts', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Brown Sugar Rush', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=brown%20sugar', + slug: 'brownsugarrush', + description: 'Killergram is the natural home of UK Hardcore "Woman of Colour" Ebony, Indian, Arabic are mixed with a plethora of ethnic.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Are You For Hire', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=ru%204%20hire', + slug: 'areyouforhire', + description: 'The adventures of our Killergram Cabbie, as he cruises the streets of London in search of babes that want a "hard ride" home for free.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Gloryhole Gaggers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=gloryhole%20girls', + slug: 'gloryholegaggers', + description: 'Swinger MILF sluts & Porn Star babes are literally gagging to visit the Killergram Glory Hole Venue & suck anonymous cocks.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'The Handy Man', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=the%20handy%20man', + slug: 'thehandyman', + description: "When a sexy MILF, teen slut or even a hot hard core Porn Star needs a job doing well, it's time to call in the horny Handy Man.", + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Lets Get Slippy', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=lets%20get%20slippy', + slug: 'letsgetslippy', + description: "The UK's finest Porn babes, soaped up and hard fucked as they experience some clean but totally filthy hardcore oiled up fun.", + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Rock Chicks', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=rock%20chicks', + slug: 'rockchicks', + description: 'Sex, Fucks and Rock n Roll are the order of the day as these groupie porn sluts get their fill of massive hard cocks & hardcore play.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Cum Party Sluts', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=cum%20party%20sluts', + slug: 'cumpartysluts', + description: "Hardcore British Reality Porn featuring the UK's best MILF's, Pornstars, Amateurs and Housewives, fucking everyday guys.", + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Baby Loves The Shaft', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=get%20shafted', + slug: 'babylovestheshaft', + alias: [ + 'getshafted', + 'get shafted', + ], + description: 'Mr Shaft is back to offer his monster black meat to a host of willing ladies that love to take it "The Dark Way". BBC loving whores.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'UK Street Walkers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=street%20walkers', + slug: 'ukstreetwalkers', + description: 'We travel to the inner cities of Britain, visiting seedy red light districts & back street brothels seeking "Street Hustlers".', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Cream My Cunt', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=cream%20my%20cunt', + slug: 'creammycunt', + description: 'A fiesta of "Creampie Cocktails blended with, full on, hardcore fuck scenes". Each and every models cunt is left overflowing.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Chain Smokers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=chain%20smokers', + slug: 'chainsmokers', + description: 'A hot smoking series of hot UK porn sluts being chained, smoked and hard fucked. Deep inhaling whores smoke seductively.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Voyeur Cam Sluts', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=voyeur%20cams', + slug: 'voyeurcamsluts', + description: 'Our perverted Landlord has set up a series of hidden cameras to spy on the day to day sexual encounters of his horny tenants.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Wishes Cum True', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=wishes%20cum%20true', + slug: 'wishescumtrue', + description: 'A cocktail of POV hardcore action and member participation in which our Porno Fairies are here to give you all you need.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Fetish Sex Clinic', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=fetish%20sex%20clinic', + slug: 'fetishsexclinic', + description: 'Fetish Sex Clinic tracks the adventures of our hot "Porno Rubber Clad Nurses" and their perverted patients in hardcore action.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Burlesque XXX', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=burlesque%20xxx', + slug: 'burlesquexxx', + description: 'Creatively shot, erotic slick hardcore action featuring the very best UK Pornstars. Blow Jobs, Rimming, Bareback Fucking, Facials.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'UK Soccer Babes', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=porn%20stars%20utd', + slug: 'uksoccerbabes', + description: 'The Killergram team of football nymphos that travel the length and breath of country in search of prime cock and hot ball play.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Nylon Cum Sluts', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=nylon%20cum%20sluts', + slug: 'nyloncumsluts', + description: 'Sexy sluts in sheer Pantyhose play out their Nylon fetish fantasies as they are fucked and creamed by hot horny hung studs.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'On A Dogging Mission', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=dogging%20missions', + slug: 'onadoggingmission', + description: 'Dogging is real people fucking and sucking in public locations. A craze that has swept the UK and spreading across the globe.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'UK Reality Swingers', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=kinky%20couples', + slug: 'ukrealityswingers', + description: 'Where real partners play out their bedroom routines on video for your pleasure. We visit the homes of swingers and real amateurs.', + hasLogo: false, + parent: 'killergram', + }, + { + name: 'Killergram Cuts', + url: 'http://killergram.com/episodes.asp?page=episodes&ct=site&site=killergram%20cuts', + slug: 'killergramcuts', + hasLogo: false, + parent: 'killergram', + }, // KINK { slug: 'thirtyminutesoftorment', diff --git a/src/scrapers/killergram.js b/src/scrapers/killergram.js new file mode 100644 index 00000000..95c32551 --- /dev/null +++ b/src/scrapers/killergram.js @@ -0,0 +1,77 @@ +'use strict'; + +const qu = require('../utils/qu'); +const slugify = require('../utils/slugify'); + +function scrapeAll({ query }) { + const urls = query.urls('td > a:not([href*=joinnow])').map(pathname => `http://killergram.com/${encodeURI(pathname)}`); + const posters = query.imgs('td > a img'); + const titles = query.all('.episodeheadertext', true); + const actors = query.all('.episodetextinfo:nth-child(3)').map(el => query.all(el, 'a', true)); + const channels = query.all('.episodetextinfo:nth-child(2) a', true).map(channel => slugify(channel, '')); + + if ([urls.length, posters.length, titles.length, actors.length, channels.length].every((value, index, array) => value === array[0])) { // make sure every set has the same number of items + const releases = urls.map((url, index) => ({ + url, + entryId: new URL(url).searchParams.get('id'), + title: titles[index], + actors: actors[index], + channel: channels[index], + poster: posters[index], + })); + + return releases; + } + + return []; +} + +function scrapeScene({ query, html }, url) { + const release = {}; + + release.entryId = new URL(url).searchParams.get('id'); + release.date = query.date('.episodetext', 'DD MMMM YYYY', /\d{2} \w+ \d{4}/); + + release.description = query.q('.episodetext tr:nth-child(5) td:nth-child(2)', true); + release.actors = query.all('.modelstarring a', true); + + const duration = html.match(/(\d+) minutes/)?.[1]; + if (duration) release.duration = Number(duration) * 60; + + [release.poster, ...release.photos] = query.imgs('img[src*="/models"]'); + + return release; +} + +function scrapeProfile({ query }, actorName) { + const profile = {}; + + profile.releases = scrapeAll({ query }).filter(release => release.actors.includes(actorName)); + + return profile; +} + +async function fetchLatest(channel, page = 1) { + const res = await qu.get(`${channel.url}&p=${page}`, '#episodes > table'); + + return res.ok ? scrapeAll(res.item, channel) : res.status; +} + +async function fetchScene(url, channel) { + const res = await qu.get(url, '#episodes > table'); + + return res.ok ? scrapeScene(res.item, url, channel) : res.status; +} + +async function fetchProfile(actorName) { + const url = `http://killergram.com/episodes.asp?page=episodes&model=${encodeURI(actorName)}&ct=model`; + const res = await qu.get(url, '#episodes > table'); + + return res.ok ? scrapeProfile(res.item, actorName) : res.status; +} + +module.exports = { + fetchLatest, + fetchScene, + fetchProfile, +}; diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index 3f2cfb56..7e557006 100644 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -28,6 +28,7 @@ const jayrock = require('./jayrock'); const jesseloadsmonsterfacials = require('./jesseloadsmonsterfacials'); const julesjordan = require('./julesjordan'); const kellymadison = require('./kellymadison'); +const killergram = require('./killergram'); const kink = require('./kink'); const legalporno = require('./legalporno'); const men = require('./men'); @@ -101,6 +102,7 @@ module.exports = { jesseloadsmonsterfacials, julesjordan, kellymadison, + killergram, kink, legalporno, men, @@ -177,6 +179,7 @@ module.exports = { jamesdeen: fullpornnetwork, julesjordan, kellymadison, + killergram, legalporno, men, metrohd,