diff --git a/assets/components/releases/release.vue b/assets/components/releases/release.vue
index b3d2d550..571ba221 100644
--- a/assets/components/releases/release.vue
+++ b/assets/components/releases/release.vue
@@ -103,7 +103,7 @@
>{{ release.title }}
{{ release.actors.map(actor => actor.name).join(', ') }} for {{ release.entity.name }}
@@ -240,7 +240,9 @@ import Scroll from '../scroll/scroll.vue';
import Expand from '../expand/expand.vue';
function pageTitle() {
- return this.release && this.release.title;
+ return this.release
+ && (this.release.title
+ || (this.release.actors.length > 0 ? `${this.release.actors.map(actor => actor.name).join(', ')} for ${this.release.entity.name}` : null));
}
async function mounted() {
diff --git a/public/img/logos/teencoreclub/favicon.png b/public/img/logos/teencoreclub/favicon.png
new file mode 100644
index 00000000..eaec4d36
Binary files /dev/null and b/public/img/logos/teencoreclub/favicon.png differ
diff --git a/public/img/logos/teencoreclub/misc/favicon.png b/public/img/logos/teencoreclub/misc/favicon.png
new file mode 100644
index 00000000..884b4afe
Binary files /dev/null and b/public/img/logos/teencoreclub/misc/favicon.png differ
diff --git a/seeds/02_sites.js b/seeds/02_sites.js
index cb9f4b57..43254f31 100644
--- a/seeds/02_sites.js
+++ b/seeds/02_sites.js
@@ -203,6 +203,7 @@ const sites = [
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!',
+ tags: ['dp'],
parent: '21sextury',
parameters: {
referer: 'https://www.21sextury.com',
@@ -5732,6 +5733,7 @@ const sites = [
name: 'AssTeenMouth',
slug: 'assteenmouth',
url: 'https://assteenmouth.com',
+ tags: ['anal'],
parent: 'teencoreclub',
parameters: {
siteId: '180',
@@ -5751,6 +5753,7 @@ const sites = [
slug: 'analyzedgirls',
parent: 'teencoreclub',
url: 'https://analyzedgirls.com',
+ tags: ['anal'],
parameters: {
siteId: '178',
},
@@ -5782,6 +5785,7 @@ const sites = [
slug: 'defiled18',
parent: 'teencoreclub',
url: 'https://defiled18.com',
+ tags: ['bdsm'],
parameters: {
siteId: '188',
},
@@ -5791,6 +5795,7 @@ const sites = [
slug: 'doubleteamedteens',
parent: 'teencoreclub',
url: 'https://doubleteamedteens.com',
+ tags: ['dp', 'mfm', 'threesome'],
parameters: {
siteId: '190',
},
@@ -5834,6 +5839,7 @@ const sites = [
slug: 'maketeengape',
parent: 'teencoreclub',
url: 'https://maketeengape.com',
+ tags: ['anal', 'gaping'],
parameters: {
siteId: '200',
},
@@ -5852,6 +5858,7 @@ const sites = [
slug: 'seductive18',
parent: 'teencoreclub',
url: 'https://seductive18.com',
+ tags: ['teen'],
parameters: {
siteId: '204',
},
@@ -5861,6 +5868,7 @@ const sites = [
slug: 'teenanalcasting',
parent: 'teencoreclub',
url: 'https://teenanalcasting.com',
+ tags: ['anal'],
parameters: {
siteId: '206',
},
@@ -5888,6 +5896,7 @@ const sites = [
slug: 'teenstryblacks',
parent: 'teencoreclub',
url: 'https://teenstryblacks.com',
+ tags: ['interracial', 'bbc'],
parameters: {
siteId: '214',
},
@@ -5906,24 +5915,11 @@ const sites = [
slug: 'teachmyass',
parent: 'teencoreclub',
url: 'https://teachmyass.com',
+ tags: ['anal'],
parameters: {
siteId: '368',
},
},
- {
- name: 'Nightclub',
- slug: 'nightclub',
- parent: 'teencoreclub',
- url: 'https://nightclub.com',
- parameters: {},
- },
- {
- name: 'Nightclub Live',
- slug: 'nightclublive',
- parent: 'teencoreclub',
- url: 'https://nightclublive.com',
- parameters: {},
- },
{
name: 'Drilled Chicks',
slug: 'drilledchicks',
@@ -5936,6 +5932,7 @@ const sites = [
slug: 'analcheckups',
parent: 'teencoreclub',
url: 'https://analcheckups.com',
+ tags: ['anal'],
parameters: {},
},
{
@@ -5945,13 +5942,6 @@ const sites = [
url: 'https://fabsluts.com',
parameters: {},
},
- {
- name: 'Jerk-Off Pass',
- slug: 'jerkoffpass',
- parent: 'teencoreclub',
- url: 'https://jerkoffpass.com',
- parameters: {},
- },
{
name: 'Nylon Spunk Junkies',
slug: 'nylonspunkjunkies',
@@ -5964,6 +5954,7 @@ const sites = [
slug: 'shegotsix',
parent: 'teencoreclub',
url: 'https://shegotsix.com',
+ tags: ['gangbang'],
parameters: {},
},
{
@@ -6013,17 +6004,39 @@ const sites = [
slug: 'youngthroats',
parent: 'teencoreclub',
url: 'https://youngthroats.com',
+ tags: ['blowjob', 'facefucking', 'deepthroat'],
parameters: {
siteId: '220',
},
},
- /* VOD service
+ /* VOD services
+ {
+ name: 'Nightclub',
+ slug: 'nightclub',
+ parent: 'teencoreclub',
+ url: 'https://nightclub.com',
+ parameters: {},
+ },
+ {
+ name: 'Nightclub Live',
+ slug: 'nightclublive',
+ parent: 'teencoreclub',
+ url: 'https://nightclublive.com',
+ parameters: {},
+ },
{
name: "Let's Go Dirty",
slug: 'letsgodirty',
parent: 'teencoreclub',
url: 'https://letsgodirty.com',
},
+ {
+ name: 'Jerk-Off Pass',
+ slug: 'jerkoffpass',
+ parent: 'teencoreclub',
+ url: 'https://jerkoffpass.com',
+ parameters: {},
+ },
*/
// TWISTYS
{
diff --git a/src/scrapers/teencoreclub.js b/src/scrapers/teencoreclub.js
new file mode 100644
index 00000000..a84d8b01
--- /dev/null
+++ b/src/scrapers/teencoreclub.js
@@ -0,0 +1,63 @@
+'use strict';
+
+const moment = require('moment');
+
+const http = require('../utils/http');
+const { prefixUrl } = require('../utils/qu');
+
+function scrapeLatest(scenes, entity) {
+ return scenes.map((scene) => {
+ const release = {};
+
+ release.entryId = scene.id;
+ release.url = `${entity.url}/video/${scene.id}/${scene.slug}`;
+
+ if (/bic/i.test(scene.title)) {
+ release.shootId = scene.title.toUpperCase().replace('-', '_');
+ } else {
+ release.title = scene.title;
+ }
+
+ release.description = scene.description;
+ release.date = moment.utc(scene.year, 'YYYY').toDate();
+ release.datePrecision = 'year';
+
+ release.actors = scene.actors.map(actor => ({
+ name: actor.name,
+ avatar: actor.image,
+ }));
+
+ release.duration = scene.duration;
+ release.stars = scene.video_rating_score;
+
+ [release.poster, ...release.photos] = scene.screenshots.map(url => prefixUrl(url));
+
+ if (scene.is_gay) {
+ release.tags = ['gay'];
+ }
+
+ console.log(scene);
+ console.log(release);
+ return release;
+ });
+}
+
+async function fetchLatest(entity, page = 1) {
+ // console.log(entity, page);
+
+ if (entity.parameters?.siteId) {
+ const res = await http.get(`https://teencoreclub.com/browsevideos/api/all?resType=all&page=${page}&label=${entity.parameters.siteId}`);
+
+ if (res.ok) {
+ return scrapeLatest(res.body.data, entity);
+ }
+
+ return res.status;
+ }
+
+ return null;
+}
+
+module.exports = {
+ fetchLatest,
+};