forked from DebaucheryLibrarian/traxxx
Added Jay Rock network. Fixed site logo not showing up without URL.
This commit is contained in:
parent
1c0030b9f3
commit
8f72e61928
|
@ -175,7 +175,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.releases {
|
.releases {
|
||||||
padding: 1rem;
|
padding: 1rem 1rem 1rem .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar {
|
.sidebar {
|
||||||
|
|
|
@ -13,6 +13,16 @@
|
||||||
<ReleaseTile :release="release" />
|
<ReleaseTile :release="release" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<span
|
||||||
|
v-if="releases.length === 0 && range !== 'all'"
|
||||||
|
class="empty"
|
||||||
|
>No {{ range }} releases</span>
|
||||||
|
|
||||||
|
<span
|
||||||
|
v-else-if="releases.length === 0"
|
||||||
|
class="empty"
|
||||||
|
>No recent or upcoming releases</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -62,6 +72,11 @@ export default {
|
||||||
grid-gap: 1rem;
|
grid-gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.empty {
|
||||||
|
color: $shadow-strong;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
@media(max-width: $breakpoint4) {
|
@media(max-width: $breakpoint4) {
|
||||||
.tiles {
|
.tiles {
|
||||||
grid-template-columns: repeat(auto-fit, minmax(20rem, .5fr));
|
grid-template-columns: repeat(auto-fit, minmax(20rem, .5fr));
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<a
|
<a
|
||||||
v-if="site.url"
|
v-tooltip.bottom="site.url && `Go to ${site.url}`"
|
||||||
v-tooltip.bottom="`Go to ${site.url}`"
|
|
||||||
:href="site.url"
|
:href="site.url"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<li
|
<li
|
||||||
v-for="site in sites"
|
v-for="site in sites"
|
||||||
:key="`site-${site.id}`"
|
:key="`site-${site.id}`"
|
||||||
|
class="site"
|
||||||
>
|
>
|
||||||
<SiteTile :site="site" />
|
<SiteTile :site="site" />
|
||||||
</li>
|
</li>
|
||||||
|
@ -70,9 +71,10 @@ export default {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
scrollbar-color: $highlight-weak $profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tile {
|
.site {
|
||||||
/* vertical grid-gap not compatible with bottom padding on scrolling containers */
|
/* vertical grid-gap not compatible with bottom padding on scrolling containers */
|
||||||
margin: 0 0 1rem 0;
|
margin: 0 0 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class="tile"
|
class="tile"
|
||||||
:class="{ movie: release.type === 'movie' }"
|
:class="{ movie: release.type === 'movie' }"
|
||||||
>
|
>
|
||||||
<span class="banner">
|
<span class="poster">
|
||||||
<span class="details">
|
<span class="details">
|
||||||
<router-link
|
<router-link
|
||||||
v-if="release.site.independent"
|
v-if="release.site.independent"
|
||||||
|
@ -149,14 +149,14 @@ export default {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.banner {
|
.poster {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin: 0 0 .5rem 0;
|
margin: 0 0 .5rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.thumbnail {
|
.thumbnail {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 12rem;
|
height: 14rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
|
@ -114,13 +114,13 @@
|
||||||
box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
.banner[data-v-3abcf101] {
|
.poster[data-v-3abcf101] {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin: 0 0 .5rem 0;
|
margin: 0 0 .5rem 0;
|
||||||
}
|
}
|
||||||
.thumbnail[data-v-3abcf101] {
|
.thumbnail[data-v-3abcf101] {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 12rem;
|
height: 14rem;
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
display: flex;
|
display: flex;
|
||||||
-webkit-box-pack: center;
|
-webkit-box-pack: center;
|
||||||
|
@ -281,6 +281,10 @@
|
||||||
grid-template-columns: repeat(auto-fit, minmax(20rem, 0.33fr));
|
grid-template-columns: repeat(auto-fit, minmax(20rem, 0.33fr));
|
||||||
grid-gap: 1rem;
|
grid-gap: 1rem;
|
||||||
}
|
}
|
||||||
|
.empty[data-v-22ffe3e4] {
|
||||||
|
color: rgba(0, 0, 0, 0.7);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
@media (max-width: 1500px) {
|
@media (max-width: 1500px) {
|
||||||
.tiles[data-v-22ffe3e4] {
|
.tiles[data-v-22ffe3e4] {
|
||||||
grid-template-columns: repeat(auto-fit, minmax(20rem, 0.5fr));
|
grid-template-columns: repeat(auto-fit, minmax(20rem, 0.5fr));
|
||||||
|
@ -685,8 +689,9 @@
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
scrollbar-color: rgba(255, 255, 255, 0.2) #222;
|
||||||
}
|
}
|
||||||
.tile[data-v-7bebaa3e] {
|
.site[data-v-7bebaa3e] {
|
||||||
/* vertical grid-gap not compatible with bottom padding on scrolling containers */
|
/* vertical grid-gap not compatible with bottom padding on scrolling containers */
|
||||||
margin: 0 0 1rem 0;
|
margin: 0 0 1rem 0;
|
||||||
}
|
}
|
||||||
|
@ -724,7 +729,7 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
.releases[data-v-e2e12602] {
|
.releases[data-v-e2e12602] {
|
||||||
padding: 1rem;
|
padding: 1rem 1rem 1rem .5rem;
|
||||||
}
|
}
|
||||||
.sidebar[data-v-e2e12602] {
|
.sidebar[data-v-e2e12602] {
|
||||||
background: #222;
|
background: #222;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
|
@ -53,7 +53,7 @@ const networks = [
|
||||||
{
|
{
|
||||||
slug: 'jayrock',
|
slug: 'jayrock',
|
||||||
name: 'JayRock Productions',
|
name: 'JayRock Productions',
|
||||||
url: 'https://www.jayrockcontent.com',
|
url: 'http://jayrockcontent.com',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
slug: 'julesjordan',
|
slug: 'julesjordan',
|
||||||
|
|
|
@ -1146,7 +1146,13 @@ function getSites(networksMap) {
|
||||||
{
|
{
|
||||||
slug: 'jayspov',
|
slug: 'jayspov',
|
||||||
name: 'Jay\'s POV',
|
name: 'Jay\'s POV',
|
||||||
url: 'https://www.jayspov.net',
|
url: 'https://jayspov.net',
|
||||||
|
network_id: networksMap.jayrock,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
slug: 'cospimps',
|
||||||
|
name: 'CosPimps',
|
||||||
|
url: 'https://cospimps.com',
|
||||||
network_id: networksMap.jayrock,
|
network_id: networksMap.jayrock,
|
||||||
},
|
},
|
||||||
// JULES JORDAN
|
// JULES JORDAN
|
||||||
|
|
|
@ -405,8 +405,6 @@ async function associateActors(mappedActors, releases) {
|
||||||
knex('releases_actors').whereIn('release_id', releases.map(release => release.id)),
|
knex('releases_actors').whereIn('release_id', releases.map(release => release.id)),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
console.log(mappedActors);
|
|
||||||
|
|
||||||
const associations = await Promise.map(Object.entries(mappedActors), async ([actorName, releaseIds]) => {
|
const associations = await Promise.map(Object.entries(mappedActors), async ([actorName, releaseIds]) => {
|
||||||
try {
|
try {
|
||||||
const actorEntry = existingActorEntries.find(actor => actor.name === actorName)
|
const actorEntry = existingActorEntries.find(actor => actor.name === actorName)
|
||||||
|
|
|
@ -115,8 +115,8 @@ async function scrapeScene(html, url, site) {
|
||||||
const playerObject = videoScript.slice(videoScript.indexOf('{'), videoScript.indexOf('};') + 1);
|
const playerObject = videoScript.slice(videoScript.indexOf('{'), videoScript.indexOf('};') + 1);
|
||||||
const playerData = JSON.parse(playerObject);
|
const playerData = JSON.parse(playerObject);
|
||||||
|
|
||||||
const workName = data.isPartOf.name.split(' - ');
|
// const workName = data.isPartOf.name.split(' - ');
|
||||||
const shootId = workName.length > 1 ? workName[1] : null;
|
// const shootId = workName.length > 1 ? workName[1] : null;
|
||||||
const entryId = url.split('/').slice(-1)[0];
|
const entryId = url.split('/').slice(-1)[0];
|
||||||
const title = data.title || $('meta[name="twitter:title"]').attr('content');
|
const title = data.title || $('meta[name="twitter:title"]').attr('content');
|
||||||
const description = data.description || $('meta[name="twitter:description"]').attr('content');
|
const description = data.description || $('meta[name="twitter:description"]').attr('content');
|
||||||
|
@ -139,7 +139,7 @@ async function scrapeScene(html, url, site) {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
url,
|
url,
|
||||||
shootId,
|
// shootId,
|
||||||
entryId,
|
entryId,
|
||||||
title,
|
title,
|
||||||
description,
|
description,
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
/* example for other ModelCentro scrapers */
|
||||||
const Promise = require('bluebird');
|
const Promise = require('bluebird');
|
||||||
const bhttp = require('bhttp');
|
const bhttp = require('bhttp');
|
||||||
|
|
||||||
const slugify = require('../utils/slugify');
|
const slugify = require('../utils/slugify');
|
||||||
|
|
||||||
async function fetchToken() {
|
async function fetchToken(site) {
|
||||||
const res = await bhttp.get('https://jayspov.net/activity');
|
const res = await bhttp.get(site.url);
|
||||||
const html = res.body.toString();
|
const html = res.body.toString();
|
||||||
|
|
||||||
const time = html.match(/"aet":\d+/)[0].split(':')[1];
|
const time = html.match(/"aet":\d+/)[0].split(':')[1];
|
||||||
|
@ -16,8 +17,8 @@ async function fetchToken() {
|
||||||
return { time, token };
|
return { time, token };
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchActors(entryId, { token, time }) {
|
async function fetchActors(entryId, site, { token, time }) {
|
||||||
const url = `https://jayspov.net/sapi/${token}/${time}/model.getModelContent?_method=model.getModelContent&tz=1&fields[0]=modelId.stageName&fields[1]=_last&fields[2]=modelId.upsellLink&fields[3]=modelId.upsellText&limit=25&transitParameters[contentId]=${entryId}`;
|
const url = `${site.url}/sapi/${token}/${time}/model.getModelContent?_method=model.getModelContent&tz=1&fields[0]=modelId.stageName&fields[1]=_last&fields[2]=modelId.upsellLink&fields[3]=modelId.upsellText&limit=25&transitParameters[contentId]=${entryId}`;
|
||||||
const res = await bhttp.get(url);
|
const res = await bhttp.get(url);
|
||||||
|
|
||||||
if (res.statusCode === 200 && res.body.status === true) {
|
if (res.statusCode === 200 && res.body.status === true) {
|
||||||
|
@ -27,8 +28,8 @@ async function fetchActors(entryId, { token, time }) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchTrailerLocation(entryId) {
|
async function fetchTrailerLocation(entryId, site) {
|
||||||
const url = `https://jayspov.net/api/download/${entryId}/hd1080/stream`;
|
const url = `${site.url}/api/download/${entryId}/hd1080/stream`;
|
||||||
const res = await bhttp.get(url, {
|
const res = await bhttp.get(url, {
|
||||||
followRedirects: false,
|
followRedirects: false,
|
||||||
});
|
});
|
||||||
|
@ -49,7 +50,7 @@ async function scrapeScene(scene, site, tokens) {
|
||||||
site,
|
site,
|
||||||
};
|
};
|
||||||
|
|
||||||
release.url = `https://jayspov.net/scene/${release.entryId}/${slugify(release.title, true)}`;
|
release.url = `${site.url}/scene/${release.entryId}/${slugify(release.title, true)}`;
|
||||||
release.date = new Date(scene.sites.collection[scene.id].publishDate);
|
release.date = new Date(scene.sites.collection[scene.id].publishDate);
|
||||||
release.poster = scene._resources.primary[0].url;
|
release.poster = scene._resources.primary[0].url;
|
||||||
|
|
||||||
|
@ -57,8 +58,8 @@ async function scrapeScene(scene, site, tokens) {
|
||||||
if (scene._resources.base) release.photos = scene._resources.base.map(resource => resource.url);
|
if (scene._resources.base) release.photos = scene._resources.base.map(resource => resource.url);
|
||||||
|
|
||||||
const [actors, trailer] = await Promise.all([
|
const [actors, trailer] = await Promise.all([
|
||||||
fetchActors(release.entryId, tokens),
|
fetchActors(release.entryId, site, tokens),
|
||||||
fetchTrailerLocation(release.entryId),
|
fetchTrailerLocation(release.entryId, site),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
release.actors = actors;
|
release.actors = actors;
|
||||||
|
@ -72,9 +73,10 @@ function scrapeLatest(scenes, site, tokens) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchLatest(site) {
|
async function fetchLatest(site) {
|
||||||
const { time, token } = await fetchToken();
|
const { time, token } = await fetchToken(site);
|
||||||
|
|
||||||
const url = `https://jayspov.net/sapi/${token}/${time}/content.load?fields[0]=generatedContentLink&fields[1]=cName&fields[2]=title&fields[3]=_resources.primary.url&fields[4]=sites.publishDate&fields[5]=type&fields[6]=_resources.base.url&fields[7]=_resources.base&fields[8]=length&limit=7&metaFields[resources][thumb]=baseline.sprite.w225i&transitParameters[showOnHome]=true&transitParameters[v1]=OhUOlmasXD&transitParameters[v2]=OhUOlmasXD&transitParameters[preset]=videos`;
|
// transParameters[v1] includes _resources, [v2] includes photos, [preset] is mandatory
|
||||||
|
const url = `${site.url}/sapi/${token}/${time}/content.load?limit=20&transitParameters[v1]=OhUOlmasXD&transitParameters[v2]=OhUOlmasXD&transitParameters[preset]=videos`;
|
||||||
const res = await bhttp.get(url);
|
const res = await bhttp.get(url);
|
||||||
|
|
||||||
if (res.statusCode === 200 && res.body.status) {
|
if (res.statusCode === 200 && res.body.status) {
|
||||||
|
@ -85,11 +87,12 @@ async function fetchLatest(site) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchScene(url, site, release) {
|
async function fetchScene(url, site, release) {
|
||||||
const { time, token } = release?.tokens || await fetchToken(); // use attached tokens when deep fetching
|
const { time, token } = release?.tokens || await fetchToken(site); // use attached tokens when deep fetching
|
||||||
const { pathname } = new URL(url);
|
const { pathname } = new URL(url);
|
||||||
const entryId = pathname.split('/')[2];
|
const entryId = pathname.split('/')[2];
|
||||||
|
|
||||||
const res = await bhttp.get(`https://jayspov.net/sapi/${token}/${time}/content.load?_method=content.load&tz=1&filter[id][fields][0]=id&filter[id][values][0]=${entryId}&fields[0]=type&fields[1]=title&fields[2]=sites.publishDate&fields[3]=member&fields[4]=id&fields[5]=tags._last&fields[6]=tags.alias&fields[7]=tags&fields[8]=description&fields[9]=related.relatedContentId.id&fields[10]=related.relatedContentId.title&fields[11]=siteProps.ubs.joinUrl&fields[12]=extender.contentId&fields[13]=vr&fields[14]=backLinkProp.value&fields[15]=backLinkProp.public&limit=1&transitParameters[v1]=ykYa8ALmUD&transitParameters[preset]=scene`);
|
const apiUrl = `${site.url}/sapi/${token}/${time}/content.load?filter[id][fields][0]=id&filter[id][values][0]=${entryId}&transitParameters[v1]=ykYa8ALmUD&transitParameters[preset]=scene`;
|
||||||
|
const res = await bhttp.get(apiUrl);
|
||||||
|
|
||||||
if (res.statusCode === 200 && res.body.status) {
|
if (res.statusCode === 200 && res.body.status) {
|
||||||
return scrapeScene(res.body.response.collection[0], site, { time, token });
|
return scrapeScene(res.body.response.collection[0], site, { time, token });
|
|
@ -7,7 +7,7 @@ const bangbros = require('./bangbros');
|
||||||
const blowpass = require('./blowpass');
|
const blowpass = require('./blowpass');
|
||||||
const dogfart = require('./dogfart');
|
const dogfart = require('./dogfart');
|
||||||
const evilangel = require('./evilangel');
|
const evilangel = require('./evilangel');
|
||||||
const jayspov = require('./jayspov');
|
const jayrock = require('./jayrock');
|
||||||
const kink = require('./kink');
|
const kink = require('./kink');
|
||||||
const mikeadriano = require('./mikeadriano');
|
const mikeadriano = require('./mikeadriano');
|
||||||
const mofos = require('./mofos');
|
const mofos = require('./mofos');
|
||||||
|
@ -41,7 +41,7 @@ module.exports = {
|
||||||
dogfart,
|
dogfart,
|
||||||
dogfartnetwork: dogfart,
|
dogfartnetwork: dogfart,
|
||||||
evilangel,
|
evilangel,
|
||||||
jayspov,
|
jayrock,
|
||||||
julesjordan,
|
julesjordan,
|
||||||
kellymadison,
|
kellymadison,
|
||||||
kink,
|
kink,
|
||||||
|
|
Loading…
Reference in New Issue