diff --git a/assets/components/entities/entity.vue b/assets/components/entities/entity.vue
index 0ab76e55..e32937c2 100644
--- a/assets/components/entities/entity.vue
+++ b/assets/components/entities/entity.vue
@@ -156,7 +156,7 @@ export default {
return {
entity: null,
totalCount: null,
- limit: 20,
+ limit: Number(this.$route.query.limit) || 20,
expanded: false,
};
},
diff --git a/assets/js/entities/actions.js b/assets/js/entities/actions.js
index d4262bf1..b002c5e9 100644
--- a/assets/js/entities/actions.js
+++ b/assets/js/entities/actions.js
@@ -86,7 +86,6 @@ function initEntitiesActions(store, _router) {
or: [
{
slug: { equalTo: $entitySlug }
- type: { equalTo: "channel" }
},
{
parent: {
diff --git a/public/img/logos/paperstreetmedia/favicon.png b/public/img/logos/paperstreetmedia/favicon.png
new file mode 100644
index 00000000..b52b7381
Binary files /dev/null and b/public/img/logos/paperstreetmedia/favicon.png differ
diff --git a/public/img/logos/paperstreetmedia/lazy/favicon.png b/public/img/logos/paperstreetmedia/lazy/favicon.png
new file mode 100644
index 00000000..5280dfa2
Binary files /dev/null and b/public/img/logos/paperstreetmedia/lazy/favicon.png differ
diff --git a/public/img/logos/paperstreetmedia/lazy/network.png b/public/img/logos/paperstreetmedia/lazy/network.png
new file mode 100644
index 00000000..54655ce3
Binary files /dev/null and b/public/img/logos/paperstreetmedia/lazy/network.png differ
diff --git a/public/img/logos/paperstreetmedia/lazy/paperstreetmedia.png b/public/img/logos/paperstreetmedia/lazy/paperstreetmedia.png
new file mode 100644
index 00000000..8a15dd95
Binary files /dev/null and b/public/img/logos/paperstreetmedia/lazy/paperstreetmedia.png differ
diff --git a/public/img/logos/paperstreetmedia/network.png b/public/img/logos/paperstreetmedia/network.png
new file mode 100644
index 00000000..bd6eb997
Binary files /dev/null and b/public/img/logos/paperstreetmedia/network.png differ
diff --git a/public/img/logos/paperstreetmedia/paperstreetmedia.png b/public/img/logos/paperstreetmedia/paperstreetmedia.png
new file mode 100644
index 00000000..77358028
Binary files /dev/null and b/public/img/logos/paperstreetmedia/paperstreetmedia.png differ
diff --git a/public/img/logos/paperstreetmedia/thumbs/favicon.png b/public/img/logos/paperstreetmedia/thumbs/favicon.png
new file mode 100644
index 00000000..5280dfa2
Binary files /dev/null and b/public/img/logos/paperstreetmedia/thumbs/favicon.png differ
diff --git a/public/img/logos/paperstreetmedia/thumbs/network.png b/public/img/logos/paperstreetmedia/thumbs/network.png
new file mode 100644
index 00000000..e5c8cb0b
Binary files /dev/null and b/public/img/logos/paperstreetmedia/thumbs/network.png differ
diff --git a/public/img/logos/paperstreetmedia/thumbs/paperstreetmedia.png b/public/img/logos/paperstreetmedia/thumbs/paperstreetmedia.png
new file mode 100644
index 00000000..1d7da7e7
Binary files /dev/null and b/public/img/logos/paperstreetmedia/thumbs/paperstreetmedia.png differ
diff --git a/public/img/logos/teamskeet/lazy/badmilfs.png b/public/img/logos/teamskeet/lazy/badmilfs.png
index 55095730..eaa83f42 100644
Binary files a/public/img/logos/teamskeet/lazy/badmilfs.png and b/public/img/logos/teamskeet/lazy/badmilfs.png differ
diff --git a/public/img/logos/teamskeet/lazy/bracefaced.png b/public/img/logos/teamskeet/lazy/bracefaced.png
index 312cb264..02406f23 100644
Binary files a/public/img/logos/teamskeet/lazy/bracefaced.png and b/public/img/logos/teamskeet/lazy/bracefaced.png differ
diff --git a/public/img/logos/teamskeet/lazy/cfnmteens.png b/public/img/logos/teamskeet/lazy/cfnmteens.png
index fac1d70f..76a6a06a 100644
Binary files a/public/img/logos/teamskeet/lazy/cfnmteens.png and b/public/img/logos/teamskeet/lazy/cfnmteens.png differ
diff --git a/public/img/logos/teamskeet/lazy/dadcrush.png b/public/img/logos/teamskeet/lazy/dadcrush.png
index 5ce667e9..0e341a08 100644
Binary files a/public/img/logos/teamskeet/lazy/dadcrush.png and b/public/img/logos/teamskeet/lazy/dadcrush.png differ
diff --git a/public/img/logos/teamskeet/lazy/daughterswap.png b/public/img/logos/teamskeet/lazy/daughterswap.png
index 172fdd12..9b8be405 100644
Binary files a/public/img/logos/teamskeet/lazy/daughterswap.png and b/public/img/logos/teamskeet/lazy/daughterswap.png differ
diff --git a/public/img/logos/teamskeet/lazy/dyked.png b/public/img/logos/teamskeet/lazy/dyked.png
index 978c0cfa..69938e90 100644
Binary files a/public/img/logos/teamskeet/lazy/dyked.png and b/public/img/logos/teamskeet/lazy/dyked.png differ
diff --git a/public/img/logos/teamskeet/lazy/exxxtrasmall.png b/public/img/logos/teamskeet/lazy/exxxtrasmall.png
index dd0cab74..b04c02a3 100644
Binary files a/public/img/logos/teamskeet/lazy/exxxtrasmall.png and b/public/img/logos/teamskeet/lazy/exxxtrasmall.png differ
diff --git a/public/img/logos/teamskeet/lazy/familystrokes.png b/public/img/logos/teamskeet/lazy/familystrokes.png
index 87ed8b6b..876f4a4d 100644
Binary files a/public/img/logos/teamskeet/lazy/familystrokes.png and b/public/img/logos/teamskeet/lazy/familystrokes.png differ
diff --git a/public/img/logos/teamskeet/lazy/favicon.png b/public/img/logos/teamskeet/lazy/favicon.png
index 26712f74..bd73ddcd 100644
Binary files a/public/img/logos/teamskeet/lazy/favicon.png and b/public/img/logos/teamskeet/lazy/favicon.png differ
diff --git a/public/img/logos/teamskeet/lazy/gingerpatch.png b/public/img/logos/teamskeet/lazy/gingerpatch.png
index b12b5e14..1adb76ad 100644
Binary files a/public/img/logos/teamskeet/lazy/gingerpatch.png and b/public/img/logos/teamskeet/lazy/gingerpatch.png differ
diff --git a/public/img/logos/teamskeet/lazy/herfreshmanyear.png b/public/img/logos/teamskeet/lazy/herfreshmanyear.png
index 87e7ece4..30bf368d 100644
Binary files a/public/img/logos/teamskeet/lazy/herfreshmanyear.png and b/public/img/logos/teamskeet/lazy/herfreshmanyear.png differ
diff --git a/public/img/logos/teamskeet/lazy/innocenthigh.png b/public/img/logos/teamskeet/lazy/innocenthigh.png
index 6c4e9b5d..122a2484 100644
Binary files a/public/img/logos/teamskeet/lazy/innocenthigh.png and b/public/img/logos/teamskeet/lazy/innocenthigh.png differ
diff --git a/public/img/logos/teamskeet/lazy/lusthd.png b/public/img/logos/teamskeet/lazy/lusthd.png
index 1e6580e5..400c8561 100644
Binary files a/public/img/logos/teamskeet/lazy/lusthd.png and b/public/img/logos/teamskeet/lazy/lusthd.png differ
diff --git a/public/img/logos/teamskeet/lazy/mybabysittersclub.png b/public/img/logos/teamskeet/lazy/mybabysittersclub.png
index 7168b65e..7f7c8538 100644
Binary files a/public/img/logos/teamskeet/lazy/mybabysittersclub.png and b/public/img/logos/teamskeet/lazy/mybabysittersclub.png differ
diff --git a/public/img/logos/teamskeet/lazy/network.png b/public/img/logos/teamskeet/lazy/network.png
index 58fad66e..2f68c637 100644
Binary files a/public/img/logos/teamskeet/lazy/network.png and b/public/img/logos/teamskeet/lazy/network.png differ
diff --git a/public/img/logos/teamskeet/lazy/oyeloca.png b/public/img/logos/teamskeet/lazy/oyeloca.png
index 35962cbc..3d27dbd5 100644
Binary files a/public/img/logos/teamskeet/lazy/oyeloca.png and b/public/img/logos/teamskeet/lazy/oyeloca.png differ
diff --git a/public/img/logos/teamskeet/lazy/povlife.png b/public/img/logos/teamskeet/lazy/povlife.png
index aef453f9..13c8e3a0 100644
Binary files a/public/img/logos/teamskeet/lazy/povlife.png and b/public/img/logos/teamskeet/lazy/povlife.png differ
diff --git a/public/img/logos/teamskeet/lazy/rubateen.png b/public/img/logos/teamskeet/lazy/rubateen.png
index 43c857b8..6c0779a5 100644
Binary files a/public/img/logos/teamskeet/lazy/rubateen.png and b/public/img/logos/teamskeet/lazy/rubateen.png differ
diff --git a/public/img/logos/teamskeet/lazy/selfdesire.png b/public/img/logos/teamskeet/lazy/selfdesire.png
index 67c28a94..6ec65b02 100644
Binary files a/public/img/logos/teamskeet/lazy/selfdesire.png and b/public/img/logos/teamskeet/lazy/selfdesire.png differ
diff --git a/public/img/logos/teamskeet/lazy/shesnew.png b/public/img/logos/teamskeet/lazy/shesnew.png
index 3110c960..9689422d 100644
Binary files a/public/img/logos/teamskeet/lazy/shesnew.png and b/public/img/logos/teamskeet/lazy/shesnew.png differ
diff --git a/public/img/logos/teamskeet/lazy/sislovesme.png b/public/img/logos/teamskeet/lazy/sislovesme.png
index 4b17d3c3..ec2e9c7e 100644
Binary files a/public/img/logos/teamskeet/lazy/sislovesme.png and b/public/img/logos/teamskeet/lazy/sislovesme.png differ
diff --git a/public/img/logos/teamskeet/lazy/solointerviews.png b/public/img/logos/teamskeet/lazy/solointerviews.png
index bddaaf8a..6f9349de 100644
Binary files a/public/img/logos/teamskeet/lazy/solointerviews.png and b/public/img/logos/teamskeet/lazy/solointerviews.png differ
diff --git a/public/img/logos/teamskeet/lazy/stayhomepov.png b/public/img/logos/teamskeet/lazy/stayhomepov.png
new file mode 100644
index 00000000..edc9389a
Binary files /dev/null and b/public/img/logos/teamskeet/lazy/stayhomepov.png differ
diff --git a/public/img/logos/teamskeet/lazy/stepsiblings.png b/public/img/logos/teamskeet/lazy/stepsiblings.png
index 302a7d25..01b93606 100644
Binary files a/public/img/logos/teamskeet/lazy/stepsiblings.png and b/public/img/logos/teamskeet/lazy/stepsiblings.png differ
diff --git a/public/img/logos/teamskeet/lazy/submissived.png b/public/img/logos/teamskeet/lazy/submissived.png
index da711bf4..9075d92a 100644
Binary files a/public/img/logos/teamskeet/lazy/submissived.png and b/public/img/logos/teamskeet/lazy/submissived.png differ
diff --git a/public/img/logos/teamskeet/lazy/teamskeet.png b/public/img/logos/teamskeet/lazy/teamskeet.png
new file mode 100644
index 00000000..850261e4
Binary files /dev/null and b/public/img/logos/teamskeet/lazy/teamskeet.png differ
diff --git a/public/img/logos/teamskeet/lazy/teamskeetextras.png b/public/img/logos/teamskeet/lazy/teamskeetextras.png
index 9d6ad3e8..4245378c 100644
Binary files a/public/img/logos/teamskeet/lazy/teamskeetextras.png and b/public/img/logos/teamskeet/lazy/teamskeetextras.png differ
diff --git a/public/img/logos/teamskeet/lazy/teencurves.png b/public/img/logos/teamskeet/lazy/teencurves.png
index c3319dee..50af1418 100644
Binary files a/public/img/logos/teamskeet/lazy/teencurves.png and b/public/img/logos/teamskeet/lazy/teencurves.png differ
diff --git a/public/img/logos/teamskeet/lazy/teenjoi.png b/public/img/logos/teamskeet/lazy/teenjoi.png
index a5e7516a..898eb0a4 100644
Binary files a/public/img/logos/teamskeet/lazy/teenjoi.png and b/public/img/logos/teamskeet/lazy/teenjoi.png differ
diff --git a/public/img/logos/teamskeet/lazy/teenpies.png b/public/img/logos/teamskeet/lazy/teenpies.png
index 88978371..b8943981 100644
Binary files a/public/img/logos/teamskeet/lazy/teenpies.png and b/public/img/logos/teamskeet/lazy/teenpies.png differ
diff --git a/public/img/logos/teamskeet/lazy/teensdoporn.png b/public/img/logos/teamskeet/lazy/teensdoporn.png
index c11a96d6..0dcde318 100644
Binary files a/public/img/logos/teamskeet/lazy/teensdoporn.png and b/public/img/logos/teamskeet/lazy/teensdoporn.png differ
diff --git a/public/img/logos/teamskeet/lazy/teensloveanal.png b/public/img/logos/teamskeet/lazy/teensloveanal.png
index 609be2a9..61f9bef0 100644
Binary files a/public/img/logos/teamskeet/lazy/teensloveanal.png and b/public/img/logos/teamskeet/lazy/teensloveanal.png differ
diff --git a/public/img/logos/teamskeet/lazy/teenslovemoney.png b/public/img/logos/teamskeet/lazy/teenslovemoney.png
index 51b3d827..ab3aa9b2 100644
Binary files a/public/img/logos/teamskeet/lazy/teenslovemoney.png and b/public/img/logos/teamskeet/lazy/teenslovemoney.png differ
diff --git a/public/img/logos/teamskeet/lazy/teenyblack.png b/public/img/logos/teamskeet/lazy/teenyblack.png
index 323ac33a..3f4f206b 100644
Binary files a/public/img/logos/teamskeet/lazy/teenyblack.png and b/public/img/logos/teamskeet/lazy/teenyblack.png differ
diff --git a/public/img/logos/teamskeet/lazy/therealworkout.png b/public/img/logos/teamskeet/lazy/therealworkout.png
index e27116d3..e42bc1ea 100644
Binary files a/public/img/logos/teamskeet/lazy/therealworkout.png and b/public/img/logos/teamskeet/lazy/therealworkout.png differ
diff --git a/public/img/logos/teamskeet/lazy/thisgirlsucks.png b/public/img/logos/teamskeet/lazy/thisgirlsucks.png
index 06769e04..eab25b89 100644
Binary files a/public/img/logos/teamskeet/lazy/thisgirlsucks.png and b/public/img/logos/teamskeet/lazy/thisgirlsucks.png differ
diff --git a/public/img/logos/teamskeet/lazy/tittyattack.png b/public/img/logos/teamskeet/lazy/tittyattack.png
index dd2bc4d9..b82743e4 100644
Binary files a/public/img/logos/teamskeet/lazy/tittyattack.png and b/public/img/logos/teamskeet/lazy/tittyattack.png differ
diff --git a/public/img/logos/teamskeet/misc/stay-home-pov.svg b/public/img/logos/teamskeet/misc/stay-home-pov.svg
new file mode 100644
index 00000000..35b20008
--- /dev/null
+++ b/public/img/logos/teamskeet/misc/stay-home-pov.svg
@@ -0,0 +1,195 @@
+
+
+
diff --git a/public/img/logos/teamskeet/misc/team-skeet.svg b/public/img/logos/teamskeet/misc/team-skeet.svg
new file mode 100644
index 00000000..53698123
--- /dev/null
+++ b/public/img/logos/teamskeet/misc/team-skeet.svg
@@ -0,0 +1,29 @@
+
+
+
diff --git a/public/img/logos/teamskeet/network.png b/public/img/logos/teamskeet/network.png
index babf5af9..66333590 100644
Binary files a/public/img/logos/teamskeet/network.png and b/public/img/logos/teamskeet/network.png differ
diff --git a/public/img/logos/teamskeet/stayhomepov.png b/public/img/logos/teamskeet/stayhomepov.png
new file mode 100644
index 00000000..273bf7f4
Binary files /dev/null and b/public/img/logos/teamskeet/stayhomepov.png differ
diff --git a/public/img/logos/teamskeet/teamskeet.png b/public/img/logos/teamskeet/teamskeet.png
new file mode 100644
index 00000000..4a9e55c5
Binary files /dev/null and b/public/img/logos/teamskeet/teamskeet.png differ
diff --git a/public/img/logos/teamskeet/thumbs/badmilfs.png b/public/img/logos/teamskeet/thumbs/badmilfs.png
index d05eb444..dfd35b5a 100644
Binary files a/public/img/logos/teamskeet/thumbs/badmilfs.png and b/public/img/logos/teamskeet/thumbs/badmilfs.png differ
diff --git a/public/img/logos/teamskeet/thumbs/bracefaced.png b/public/img/logos/teamskeet/thumbs/bracefaced.png
index 1e545dc0..bdf91175 100644
Binary files a/public/img/logos/teamskeet/thumbs/bracefaced.png and b/public/img/logos/teamskeet/thumbs/bracefaced.png differ
diff --git a/public/img/logos/teamskeet/thumbs/cfnmteens.png b/public/img/logos/teamskeet/thumbs/cfnmteens.png
index 25379a15..7767589f 100644
Binary files a/public/img/logos/teamskeet/thumbs/cfnmteens.png and b/public/img/logos/teamskeet/thumbs/cfnmteens.png differ
diff --git a/public/img/logos/teamskeet/thumbs/dadcrush.png b/public/img/logos/teamskeet/thumbs/dadcrush.png
index 868830a1..53873628 100644
Binary files a/public/img/logos/teamskeet/thumbs/dadcrush.png and b/public/img/logos/teamskeet/thumbs/dadcrush.png differ
diff --git a/public/img/logos/teamskeet/thumbs/daughterswap.png b/public/img/logos/teamskeet/thumbs/daughterswap.png
index 6a63494d..b33ba214 100644
Binary files a/public/img/logos/teamskeet/thumbs/daughterswap.png and b/public/img/logos/teamskeet/thumbs/daughterswap.png differ
diff --git a/public/img/logos/teamskeet/thumbs/dyked.png b/public/img/logos/teamskeet/thumbs/dyked.png
index 6773b002..13ee72ab 100644
Binary files a/public/img/logos/teamskeet/thumbs/dyked.png and b/public/img/logos/teamskeet/thumbs/dyked.png differ
diff --git a/public/img/logos/teamskeet/thumbs/exxxtrasmall.png b/public/img/logos/teamskeet/thumbs/exxxtrasmall.png
index 79fdd026..40e4f057 100644
Binary files a/public/img/logos/teamskeet/thumbs/exxxtrasmall.png and b/public/img/logos/teamskeet/thumbs/exxxtrasmall.png differ
diff --git a/public/img/logos/teamskeet/thumbs/familystrokes.png b/public/img/logos/teamskeet/thumbs/familystrokes.png
index efa66689..6d7ddcd9 100644
Binary files a/public/img/logos/teamskeet/thumbs/familystrokes.png and b/public/img/logos/teamskeet/thumbs/familystrokes.png differ
diff --git a/public/img/logos/teamskeet/thumbs/favicon.png b/public/img/logos/teamskeet/thumbs/favicon.png
index 8940ab75..d00077f7 100644
Binary files a/public/img/logos/teamskeet/thumbs/favicon.png and b/public/img/logos/teamskeet/thumbs/favicon.png differ
diff --git a/public/img/logos/teamskeet/thumbs/gingerpatch.png b/public/img/logos/teamskeet/thumbs/gingerpatch.png
index 7d612d8f..402fbfd2 100644
Binary files a/public/img/logos/teamskeet/thumbs/gingerpatch.png and b/public/img/logos/teamskeet/thumbs/gingerpatch.png differ
diff --git a/public/img/logos/teamskeet/thumbs/herfreshmanyear.png b/public/img/logos/teamskeet/thumbs/herfreshmanyear.png
index ca85ce5c..64cd3a7d 100644
Binary files a/public/img/logos/teamskeet/thumbs/herfreshmanyear.png and b/public/img/logos/teamskeet/thumbs/herfreshmanyear.png differ
diff --git a/public/img/logos/teamskeet/thumbs/innocenthigh.png b/public/img/logos/teamskeet/thumbs/innocenthigh.png
index 04ba8261..488bdebc 100644
Binary files a/public/img/logos/teamskeet/thumbs/innocenthigh.png and b/public/img/logos/teamskeet/thumbs/innocenthigh.png differ
diff --git a/public/img/logos/teamskeet/thumbs/lusthd.png b/public/img/logos/teamskeet/thumbs/lusthd.png
index 2b17c27f..722cc30b 100644
Binary files a/public/img/logos/teamskeet/thumbs/lusthd.png and b/public/img/logos/teamskeet/thumbs/lusthd.png differ
diff --git a/public/img/logos/teamskeet/thumbs/mybabysittersclub.png b/public/img/logos/teamskeet/thumbs/mybabysittersclub.png
index e4550d11..2f04dd19 100644
Binary files a/public/img/logos/teamskeet/thumbs/mybabysittersclub.png and b/public/img/logos/teamskeet/thumbs/mybabysittersclub.png differ
diff --git a/public/img/logos/teamskeet/thumbs/network.png b/public/img/logos/teamskeet/thumbs/network.png
index abf1b268..33f112ed 100644
Binary files a/public/img/logos/teamskeet/thumbs/network.png and b/public/img/logos/teamskeet/thumbs/network.png differ
diff --git a/public/img/logos/teamskeet/thumbs/oyeloca.png b/public/img/logos/teamskeet/thumbs/oyeloca.png
index f711d3aa..7b6fcd19 100644
Binary files a/public/img/logos/teamskeet/thumbs/oyeloca.png and b/public/img/logos/teamskeet/thumbs/oyeloca.png differ
diff --git a/public/img/logos/teamskeet/thumbs/povlife.png b/public/img/logos/teamskeet/thumbs/povlife.png
index b87b15af..322434dd 100644
Binary files a/public/img/logos/teamskeet/thumbs/povlife.png and b/public/img/logos/teamskeet/thumbs/povlife.png differ
diff --git a/public/img/logos/teamskeet/thumbs/rubateen.png b/public/img/logos/teamskeet/thumbs/rubateen.png
index 79d327a0..33249616 100644
Binary files a/public/img/logos/teamskeet/thumbs/rubateen.png and b/public/img/logos/teamskeet/thumbs/rubateen.png differ
diff --git a/public/img/logos/teamskeet/thumbs/selfdesire.png b/public/img/logos/teamskeet/thumbs/selfdesire.png
index 8629a3d5..d0f65f6e 100644
Binary files a/public/img/logos/teamskeet/thumbs/selfdesire.png and b/public/img/logos/teamskeet/thumbs/selfdesire.png differ
diff --git a/public/img/logos/teamskeet/thumbs/shesnew.png b/public/img/logos/teamskeet/thumbs/shesnew.png
index 884725b7..740491b2 100644
Binary files a/public/img/logos/teamskeet/thumbs/shesnew.png and b/public/img/logos/teamskeet/thumbs/shesnew.png differ
diff --git a/public/img/logos/teamskeet/thumbs/sislovesme.png b/public/img/logos/teamskeet/thumbs/sislovesme.png
index 905a13fd..2bcf9112 100644
Binary files a/public/img/logos/teamskeet/thumbs/sislovesme.png and b/public/img/logos/teamskeet/thumbs/sislovesme.png differ
diff --git a/public/img/logos/teamskeet/thumbs/solointerviews.png b/public/img/logos/teamskeet/thumbs/solointerviews.png
index 6fd76aaf..e70eb56a 100644
Binary files a/public/img/logos/teamskeet/thumbs/solointerviews.png and b/public/img/logos/teamskeet/thumbs/solointerviews.png differ
diff --git a/public/img/logos/teamskeet/thumbs/stayhomepov.png b/public/img/logos/teamskeet/thumbs/stayhomepov.png
new file mode 100644
index 00000000..99bae8f1
Binary files /dev/null and b/public/img/logos/teamskeet/thumbs/stayhomepov.png differ
diff --git a/public/img/logos/teamskeet/thumbs/stepsiblings.png b/public/img/logos/teamskeet/thumbs/stepsiblings.png
index 1997fc7e..57257baf 100644
Binary files a/public/img/logos/teamskeet/thumbs/stepsiblings.png and b/public/img/logos/teamskeet/thumbs/stepsiblings.png differ
diff --git a/public/img/logos/teamskeet/thumbs/submissived.png b/public/img/logos/teamskeet/thumbs/submissived.png
index 04942ec1..af347615 100644
Binary files a/public/img/logos/teamskeet/thumbs/submissived.png and b/public/img/logos/teamskeet/thumbs/submissived.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teamskeet.png b/public/img/logos/teamskeet/thumbs/teamskeet.png
new file mode 100644
index 00000000..7a18f628
Binary files /dev/null and b/public/img/logos/teamskeet/thumbs/teamskeet.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teamskeetextras.png b/public/img/logos/teamskeet/thumbs/teamskeetextras.png
index 329f540d..85df95b1 100644
Binary files a/public/img/logos/teamskeet/thumbs/teamskeetextras.png and b/public/img/logos/teamskeet/thumbs/teamskeetextras.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teencurves.png b/public/img/logos/teamskeet/thumbs/teencurves.png
index 58f1aaf8..25200085 100644
Binary files a/public/img/logos/teamskeet/thumbs/teencurves.png and b/public/img/logos/teamskeet/thumbs/teencurves.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teenjoi.png b/public/img/logos/teamskeet/thumbs/teenjoi.png
index 7c7a5a8a..ac616402 100644
Binary files a/public/img/logos/teamskeet/thumbs/teenjoi.png and b/public/img/logos/teamskeet/thumbs/teenjoi.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teenpies.png b/public/img/logos/teamskeet/thumbs/teenpies.png
index 52f64e16..58477767 100644
Binary files a/public/img/logos/teamskeet/thumbs/teenpies.png and b/public/img/logos/teamskeet/thumbs/teenpies.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teensdoporn.png b/public/img/logos/teamskeet/thumbs/teensdoporn.png
index 5edc4beb..0ec6f2a6 100644
Binary files a/public/img/logos/teamskeet/thumbs/teensdoporn.png and b/public/img/logos/teamskeet/thumbs/teensdoporn.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teensloveanal.png b/public/img/logos/teamskeet/thumbs/teensloveanal.png
index eaa1656c..d4423362 100644
Binary files a/public/img/logos/teamskeet/thumbs/teensloveanal.png and b/public/img/logos/teamskeet/thumbs/teensloveanal.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teenslovemoney.png b/public/img/logos/teamskeet/thumbs/teenslovemoney.png
index 2cb2daa3..79163116 100644
Binary files a/public/img/logos/teamskeet/thumbs/teenslovemoney.png and b/public/img/logos/teamskeet/thumbs/teenslovemoney.png differ
diff --git a/public/img/logos/teamskeet/thumbs/teenyblack.png b/public/img/logos/teamskeet/thumbs/teenyblack.png
index 74886ef0..4857d2f0 100644
Binary files a/public/img/logos/teamskeet/thumbs/teenyblack.png and b/public/img/logos/teamskeet/thumbs/teenyblack.png differ
diff --git a/public/img/logos/teamskeet/thumbs/therealworkout.png b/public/img/logos/teamskeet/thumbs/therealworkout.png
index fc6d5ffc..aa915f41 100644
Binary files a/public/img/logos/teamskeet/thumbs/therealworkout.png and b/public/img/logos/teamskeet/thumbs/therealworkout.png differ
diff --git a/public/img/logos/teamskeet/thumbs/thisgirlsucks.png b/public/img/logos/teamskeet/thumbs/thisgirlsucks.png
index 829b3e2b..d246dd92 100644
Binary files a/public/img/logos/teamskeet/thumbs/thisgirlsucks.png and b/public/img/logos/teamskeet/thumbs/thisgirlsucks.png differ
diff --git a/public/img/logos/teamskeet/thumbs/tittyattack.png b/public/img/logos/teamskeet/thumbs/tittyattack.png
index 3416f166..fe6e73ec 100644
Binary files a/public/img/logos/teamskeet/thumbs/tittyattack.png and b/public/img/logos/teamskeet/thumbs/tittyattack.png differ
diff --git a/seeds/00_tags.js b/seeds/00_tags.js
index 59b9da37..534b20a7 100644
--- a/seeds/00_tags.js
+++ b/seeds/00_tags.js
@@ -229,6 +229,10 @@ const tags = [
name: 'bondage',
slug: 'bondage',
},
+ {
+ name: 'braces',
+ slug: 'braces',
+ },
{
name: 'brunette',
slug: 'brunette',
@@ -900,6 +904,11 @@ const tags = [
name: 'virtual reality',
slug: 'virtual-reality',
},
+ {
+ name: 'quarantine',
+ slug: 'quarantine',
+ description: 'The 2019 Coronavirus outbreak (COVID-19) forced sensible people to quarantine at home, spawning a new porn theme featuring self-isolation and masks.',
+ },
{
name: 'Russian',
slug: 'russian',
diff --git a/seeds/01_networks.js b/seeds/01_networks.js
index 6776dd3a..b1ed6d1a 100644
--- a/seeds/01_networks.js
+++ b/seeds/01_networks.js
@@ -21,6 +21,10 @@ const parentNetworks = [
slug: 'whalemember',
name: 'Whale Member',
},
+ {
+ slug: 'paperstreetmedia',
+ name: 'Paper Street Media',
+ },
{
slug: 'porndoe',
name: 'PornDoe',
@@ -412,6 +416,7 @@ const networks = [
name: 'Team Skeet',
url: 'https://www.teamskeet.com',
description: 'Welcome to teamskeet.com, the largest collection of exclusive teen porn sites and videos on the web. Check out our TeamSkeet porn sites now.',
+ parent: 'paperstreetmedia',
},
{
slug: 'teencoreclub',
diff --git a/seeds/02_sites.js b/seeds/02_sites.js
index be33a5bd..976790de 100644
--- a/seeds/02_sites.js
+++ b/seeds/02_sites.js
@@ -6465,43 +6465,57 @@ const sites = [
{
slug: 'exxxtrasmall',
name: 'Exxxtra Small',
- alias: ['ext'],
- description: '',
+ alias: ['exs', 'ext'],
url: 'https://www.exxxtrasmall.com',
- parameters: { id: 'exs' },
+ parameters: { id: 'exxxtrasmall' },
parent: 'teamskeet',
},
{
slug: 'teenpies',
name: 'Teen Pies',
- description: '',
+ alias: ['tp'],
url: 'https://www.teenpies.com',
- parameters: { id: 'tp' },
+ parameters: { id: 'teenpies' },
parent: 'teamskeet',
},
{
slug: 'innocenthigh',
name: 'Innocent High',
- alias: ['inh'],
- description: '',
+ alias: ['ih', 'inh'],
url: 'https://www.innocenthigh.com',
- parameters: { id: 'ih' },
+ parameters: { id: 'innocenthigh' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'kissingsis',
+ name: 'Kissing Sis',
+ alias: ['ss'],
+ url: 'https://www.kissingsis.com',
+ parameters: { id: 'kissing-sis' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'latinateam',
+ name: 'Latina Team',
+ alias: ['lt'],
+ url: 'https://www.latinateam.com',
+ parameters: { id: 'latina-team' },
parent: 'teamskeet',
},
{
slug: 'teencurves',
name: 'Teen Curves',
- description: '',
+ alias: ['tc'],
url: 'https://www.teencurves.com',
- parameters: { id: 'tc' },
+ parameters: { id: 'teen-curves' },
parent: 'teamskeet',
},
{
slug: 'cfnmteens',
name: 'CFNM Teens',
- alias: ['cfnmt'],
+ alias: ['cfnm', 'cfnmt'],
url: 'https://www.cfnmteens.com',
- parameters: { id: 'cfnm' },
+ parameters: { id: 'cfnm-teens' },
parent: 'teamskeet',
},
{
@@ -6510,23 +6524,23 @@ const sites = [
alias: ['tla'],
url: 'https://www.teensloveanal.com',
tags: ['anal'],
- parameters: { id: 'tla' },
+ parameters: { id: 'teens-love-anal' },
parent: 'teamskeet',
},
{
slug: 'mybabysittersclub',
name: 'My Babysitters Club',
- description: '',
+ alias: ['bsc'],
url: 'https://www.mybabysittersclub.com',
- parameters: { id: 'bsc' },
+ parameters: { id: 'my-babysitters-club' },
parent: 'teamskeet',
},
{
slug: 'shesnew',
name: 'She\'s New',
- alias: ['ssn'],
+ alias: ['sn', 'ssn'],
url: 'https://www.shesnew.com',
- parameters: { id: 'bsc' },
+ parameters: { id: 'shesnew' },
parent: 'teamskeet',
},
{
@@ -6534,163 +6548,292 @@ const sites = [
name: 'Teens Do Porn',
alias: ['tdp'],
url: 'https://www.teensdoporn.com',
- parameters: { id: 'tdp' },
+ parameters: { id: 'teens-do-porn' },
parent: 'teamskeet',
},
{
slug: 'povlife',
name: 'POV Life',
- description: '',
+ alias: ['pov'],
url: 'https://www.povlife.com',
- parameters: { id: 'pov' },
+ parameters: { id: 'povlife' },
parent: 'teamskeet',
},
{
slug: 'therealworkout',
name: 'The Real Workout',
- description: '',
+ alias: ['trw'],
url: 'https://www.therealworkout.com',
- parameters: { id: 'trw' },
+ parameters: { id: 'therealworkout' },
parent: 'teamskeet',
},
{
slug: 'thisgirlsucks',
name: 'This Girl Sucks',
alias: ['tgs'],
- description: '',
url: 'https://www.thisgirlsucks.com',
- parameters: { id: 'tgs' },
+ parameters: { id: 'this-girl-sucks' },
parent: 'teamskeet',
},
{
slug: 'teenslovemoney',
name: 'Teens Love Money',
alias: ['tlm'],
- description: '',
url: 'https://www.teenslovemoney.com',
- parameters: { id: 'tlm' },
+ parameters: { id: 'teens-love-money' },
parent: 'teamskeet',
},
{
slug: 'oyeloca',
name: 'Oye Loca',
- description: '',
+ alias: ['ol'],
url: 'https://www.oyeloca.com',
- parameters: { id: 'ol' },
+ tags: ['latina'],
+ parameters: { id: 'oyeloca' },
parent: 'teamskeet',
},
{
slug: 'tittyattack',
name: 'Titty Attack',
- description: '',
+ alias: ['ta'],
url: 'https://www.tittyattack.com',
- parameters: { id: 'ta' },
+ parameters: { id: 'titty-attack' },
parent: 'teamskeet',
},
{
slug: 'teenyblack',
name: 'Teeny Black',
- description: '',
+ alias: ['tb'],
url: 'https://www.teenyblack.com',
- parameters: { id: 'tb' },
+ parameters: { id: 'teenyblack' },
parent: 'teamskeet',
},
{
slug: 'lusthd',
name: 'Lust HD',
- description: '',
+ alias: ['lhd'],
url: 'https://www.lusthd.com',
- parameters: { id: 'lhd' },
+ parameters: { id: 'lusthd' },
parent: 'teamskeet',
},
{
slug: 'rubateen',
name: 'Rub A Teen',
- description: '',
+ alias: ['rat'],
url: 'https://www.rubateen.com',
- parameters: { id: 'rat' },
+ parameters: { id: 'rubateen' },
parent: 'teamskeet',
},
{
slug: 'herfreshmanyear',
name: 'Her Freshman Year',
- description: '',
- url: 'https://www.exxxtrasmall.com',
- parameters: { id: 'hfy' },
+ alias: ['hfy'],
+ url: 'https://www.herfreshmanyear.com',
+ parameters: { id: 'her-freshman-year' },
parent: 'teamskeet',
},
{
slug: 'selfdesire',
name: 'Self Desire',
- description: '',
+ alias: ['sd'],
url: 'https://www.selfdesire.com',
- parameters: { id: 'sd' },
+ parameters: { id: 'self-desire' },
parent: 'teamskeet',
},
{
slug: 'solointerviews',
name: 'Solo Interviews',
- description: '',
+ alias: ['si'],
url: 'https://www.solointerviews.com',
- parameters: { id: 'si' },
- parent: 'teamskeet',
- },
- {
- slug: 'teamskeetextras',
- name: 'Team Skeet Extras',
- description: '',
- url: 'https://www.teamskeetextras.com',
- parameters: { id: 'tse' },
+ parameters: { id: 'solo-interviews' },
parent: 'teamskeet',
},
{
slug: 'dyked',
name: 'Dyked',
- description: '',
+ alias: ['dyk'],
url: 'https://www.dyked.com',
- parameters: { id: 'dyk' },
+ parameters: { id: 'dyked' },
parent: 'teamskeet',
},
{
slug: 'badmilfs',
name: 'Bad MILFs',
- description: '',
+ alias: ['alias'],
url: 'https://www.badmilfs.com',
- parameters: { id: 'bad' },
+ parameters: { id: 'bad-milfs' },
parent: 'teamskeet',
},
{
slug: 'gingerpatch',
name: 'Ginger Patch',
- description: '',
+ alias: ['gp'],
url: 'https://www.gingerpatch.com',
- parameters: { id: 'gp' },
+ parameters: { id: 'gingerpatch' },
parent: 'teamskeet',
},
{
slug: 'bracefaced',
name: 'Brace Faced',
- description: '',
+ alias: ['bfd'],
+ tags: ['braces'],
url: 'https://www.bracefaced.com',
- parameters: { id: 'bfd' },
+ parameters: { id: 'bracefaced' },
parent: 'teamskeet',
},
{
slug: 'teenjoi',
name: 'Teen JOI',
- description: '',
+ alias: ['joi'],
url: 'https://www.teenjoi.com',
- parameters: { id: 'joi' },
+ parameters: { id: 'teen-joi' },
parent: 'teamskeet',
},
{
slug: 'stepsiblings',
name: 'Step Siblings',
- alias: ['steps'],
+ alias: ['sss', 'steps'],
url: 'https://www.stepsiblings.com',
- parameters: { id: 'sss' },
+ parameters: { id: 'stepsiblings' },
parent: 'teamskeet',
},
+ {
+ slug: 'stayhomepov',
+ name: 'StayHomePOV',
+ alias: ['shp', 'steps'],
+ tags: ['pov', 'quarantine'],
+ url: 'https://www.stayhomepov.com',
+ parameters: { id: 'stay-home-pov' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetextras',
+ name: 'Team Skeet Extras',
+ alias: ['tse'],
+ url: 'https://www.teamskeetextras.com',
+ parameters: { id: 'extras' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetallstars',
+ name: 'Team Skeet Allstars',
+ alias: ['tsa', 'steps'],
+ url: 'https://www.teamskeet.com/series/all-stars',
+ parameters: { id: 'all-stars' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetselects',
+ name: 'Team Skeet Selects',
+ alias: ['tsc'],
+ url: 'https://www.teamskeet.com/series/selects',
+ parameters: { id: 'selects' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'tshobybuchanon',
+ name: 'Hoby Buchanon',
+ alias: ['hob'],
+ parameters: { id: 'hoby-buchanon' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxog',
+ name: 'TS X Owen Gray',
+ alias: ['owg'],
+ url: 'https://www.teamskeet.com/series/owen-gray',
+ parameters: { id: 'owen-gray' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxbaeb',
+ name: 'TS X BAEB',
+ alias: ['bae'],
+ url: 'https://www.teamskeet.com/series/baeb',
+ parameters: { id: 'baeb' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxbananafever',
+ name: 'TS X Banana Fever',
+ alias: ['bna'],
+ url: 'https://www.teamskeet.com/series/bananafever',
+ parameters: { id: 'bananafever' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxevaelfie',
+ name: 'TS X Eva Elfie',
+ alias: ['eva'],
+ url: 'https://www.teamskeet.com/series/eva-elfie',
+ parameters: { id: 'eva-elfie' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxfuckingawesome',
+ name: 'TS X Fucking Awesome',
+ alias: ['tfa'],
+ url: 'https://www.teamskeet.com/series/fucking-awesome',
+ parameters: { id: 'fucking-awesome' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxjamesdeen',
+ name: 'TS X James Deen',
+ alias: ['jmd'],
+ url: 'https://www.teamskeet.com/series/james-deen',
+ parameters: { id: 'james-deen' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxjoybear',
+ name: 'TS X Joybear',
+ alias: ['jyb'],
+ url: 'https://www.teamskeet.com/series/joybear',
+ parameters: { id: 'joybear' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxcamsoda',
+ name: 'TS X CamSoda',
+ alias: ['lna'],
+ url: 'https://www.teamskeet.com/series/camsoda',
+ parameters: { id: 'camsoda' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxlaynalandry',
+ name: 'TS X Layna Landry',
+ alias: ['lna'],
+ url: 'https://www.teamskeet.com/series/layna-landry',
+ parameters: { id: 'layna-landry' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxlunaxjames',
+ name: 'TS X Luna X James',
+ alias: ['lxj'],
+ url: 'https://www.teamskeet.com/series/luna-x-james',
+ parameters: { id: 'luna-x-james' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxmickeymod',
+ name: 'TS X Mickey Mod',
+ alias: ['mod'],
+ url: 'https://www.teamskeet.com/series/mickey-mod',
+ parameters: { id: 'mickey-mod' },
+ parent: 'teamskeet',
+ },
+ {
+ slug: 'teamskeetxspankmonster',
+ name: 'TS X SpankMonster',
+ alias: ['spm'],
+ url: 'https://www.teamskeet.com/series/spankmonster',
+ parameters: { id: 'spankmonster' },
+ parent: 'teamskeet',
+ },
+ /* premium, unavailable
{
slug: 'submissived',
name: 'Submissived',
@@ -6709,6 +6852,7 @@ const sites = [
tags: ['family'],
parent: 'teamskeet',
},
+ */
// TEEN CORE CLUB
{
name: 'Analyzed Girls',
diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js
index 4ae97a34..ab5ab528 100644
--- a/src/scrapers/scrapers.js
+++ b/src/scrapers/scrapers.js
@@ -232,6 +232,7 @@ module.exports = {
silverstonedvd: famedigital,
silviasaint: famedigital,
swallowed: mikeadriano,
+ teamskeet,
teencoreclub,
thatsitcomshow: nubiles,
transangels,
diff --git a/src/scrapers/teamskeet.js b/src/scrapers/teamskeet.js
index 3aefc7da..daac7fae 100644
--- a/src/scrapers/teamskeet.js
+++ b/src/scrapers/teamskeet.js
@@ -1,180 +1,155 @@
'use strict';
-const bhttp = require('bhttp');
-const { JSDOM } = require('jsdom');
-const moment = require('moment');
-
-function extractTitle(pathname) {
- return pathname
- .split('/')
- .slice(-2)[0]
- .split('_')
- .map(seg => `${seg.charAt(0).toUpperCase()}${seg.slice(1)}`)
- .join(' ');
-}
-
-function extractActors(str) {
- return str
- .split(/,|\band\b/ig)
- .filter(actor => !/\.{3}/.test(actor))
- .map(actor => actor.trim())
- .filter(actor => actor.length > 0);
-}
-
-function scrapeLatest(html, site) {
- const { document } = new JSDOM(html).window;
-
- const scenes = Array.from(document.querySelectorAll('#updatesList li.grey, #updatesList li.white'));
+const qu = require('../utils/qu');
+const http = require('../utils/http');
+const slugify = require('../utils/slugify');
+const { lbsToKg, feetInchesToCm } = require('../utils/convert');
+function scrapeAll(scenes) {
return scenes.map((scene) => {
- const release = { site };
+ const release = {};
- const link = scene.querySelector('.info a');
- const poster = scene.querySelector('img');
- const { pathname } = new URL(link);
+ release.entryId = scene.id;
+ release.url = `https://teamskeet.com/movies/${release.entryId}`;
- [release.entryId] = poster.id.match(/\d+/);
+ release.title = scene.title;
+ release.date = qu.extractDate(scene.publishedDate);
- release.url = `https://www.teamskeet.com${pathname}`;
- release.title = extractTitle(pathname);
+ release.actors = scene.models?.map(model => model.modelName) || [];
- release.date = moment.utc(scene.querySelector('strong').textContent, 'MM/DD/YYYY').toDate();
+ release.poster = [
+ scene.img.replace('med.jpg', 'hi.jpg'),
+ scene.img,
+ ];
- const photos = Array.from({ length: 5 }, (_value, index) => poster.dataset.original.replace(/\d+.jpg/, `${String(index + 1).padStart(2, '0')}.jpg`));
- [release.poster] = photos;
- release.photos = photos.slice(1);
+ release.teaser = scene.videoTrailer;
- const actors = scene.querySelector('div span[rel="test"]').textContent;
- release.actors = extractActors(actors);
+ if (scene.video) {
+ release.trailer = { stream: `https://videodelivery.net/${scene.video}/manifest/video.mpd` };
+ }
+
+ release.likes = scene.stats.likeCount;
+ release.dislikes = scene.stats.dislikeCount;
+
+ release.channel = slugify(scene.site.name, '')
+ .replace('hobybuchanon', 'tshobybuchanon'); // slug collision with his own site
return release;
});
}
-function scrapeScene(html, site, url) {
- const { document } = new JSDOM(html).window;
- const release = { site };
+function scrapeScene(scene) {
+ const release = {};
- release.entryId = document.querySelector('#story-and-tags .scene_rater').attributes.rel.value;
- release.description = document.querySelector('#story-and-tags td:nth-child(2) div').textContent;
- const [actors, title, channel] = document.querySelector('title').textContent.split('|').map(item => item.trim());
+ release.entryId = scene.id;
- release.url = url;
- release.title = title;
- release.actors = extractActors(actors);
- release.channel = channel.toLowerCase();
- release.tags = Array.from(document.querySelectorAll('#story-and-tags tr:nth-child(2) a'), el => el.rel);
+ release.title = scene.title;
+ release.description = scene.description;
- const date = document.querySelector('h3 ~ div:nth-child(4), h3 ~ div div.gray:not(.scene_rater)').textContent.split(':')[1].trim();
- release.date = moment.utc(date, 'MMMM Do, YYYY').toDate();
+ release.date = qu.extractDate(scene.publishedDate);
+ release.actors = scene.models?.map(model => model.modelName) || [];
- const { poster } = document.querySelector('video');
- if (poster && !/gen/.test(poster)) release.poster = [poster.replace('low', 'hi'), poster];
+ release.poster = [
+ scene.img.replace('med.jpg', 'hi.jpg'),
+ scene.img,
+ ];
- const siteId = document.querySelector('#story-and-tags img').src.match(/\w+.jpg/)[0].replace('.jpg', '');
- const actorsSlug = document.querySelector('h3 a').href.split('/').slice(-2)[0];
+ release.channel = slugify(scene.site.name, '')
+ .replace('hobybuchanon', 'tshobybuchanon'); // slug collision with his own site
- release.photos = Array.from({ length: 5 }, (value, index) => `https://images.psmcdn.net/teamskeet/${siteId}/${actorsSlug}/shared/scenes/new/${String(index + 1).padStart(2, '0')}.jpg`);
-
- const trailer = document.querySelector('div.right.gray a').href;
- if (trailer) release.trailer = { src: trailer };
+ if (scene.video) {
+ release.trailer = { stream: `https://videodelivery.net/${scene.video}/manifest/video.mpd` };
+ }
return release;
}
-function scrapeSceneA(html, site, sceneX, url) {
- const scene = sceneX || new JSDOM(html).window.document;
- const release = { site };
+function scrapeProfile(actor) {
+ const profile = {};
- release.description = scene.querySelector('.scene-story').textContent.replace('...read more', '...').trim();
+ if (actor.bio.about) {
+ // birthdate seems never/rarely correct
+ const measurements = actor.bio.about.match(/Measurements: (\d+)(\w+)-(\d+)-(\d+)/i);
- release.date = moment.utc(scene.querySelector('.scene-date').textContent, 'MM/DD/YYYY').toDate();
- release.actors = Array.from(scene.querySelectorAll('.starring span'), el => extractActors(el.textContent)).flat();
+ if (measurements) {
+ [profile.bust, profile.cup, profile.waist, profile.hip] = measurements.slice(1);
+ } else {
+ const breastSize = actor.bio.breastSize?.match(/(\d+)(\w+)/)?.slice(1) || actor.bio.about.match(/Measurements: (\d+)(\w+)/)?.slice(1);
- const durationString = scene.querySelector('.time').textContent.trim();
- const duration = ['00'].concat(durationString.split(':')).slice(-3).join(':'); // ensure hh:mm:ss
- release.duration = moment.duration(duration).asSeconds();
+ if (breastSize) {
+ [profile.bust, profile.cup] = breastSize;
+ }
+ }
- if (sceneX) {
- const titleEl = scene.querySelector(':scope > a');
+ profile.nationality = actor.bio.about.match(/Nationality: (\w+)/i)?.[1];
+ profile.ethnicity = actor.bio.about.match(/Ethnicity: (\w+)/i)?.[1];
+ profile.hairColor = actor.bio.about.match(/Hair Color: (\w+)/i)?.[1];
- release.url = titleEl.href;
- release.entryId = titleEl.id;
- release.title = titleEl.title;
+ const piercings = actor.bio.about.match(/Piercings: (\w+)/i)?.[1];
+ const tattoos = actor.bio.about.match(/Tattoos: (\w+)/i)?.[1];
- const [poster, ...photos] = Array.from(scene.querySelectorAll('.scene img'), el => el.src);
- release.poster = [poster.replace('bio_big', 'video'), poster];
- release.photos = photos;
+ if (slugify(piercings) === 'yes') profile.hasPiercings = true;
+ if (slugify(piercings) === 'no') profile.hasPiercings = false;
+
+ if (slugify(tattoos) === 'yes') profile.hasTattoos = true;
+ if (slugify(tattoos) === 'no') profile.hasTattoos = false;
}
- if (!sceneX) {
- release.title = scene.querySelector('.title span').textContent;
- release.url = url;
-
- release.poster = scene.querySelector('video').poster;
- release.photos = [release.poster.replace('video', 'bio_small'), release.poster.replace('video', 'bio_small2')];
+ if (actor.bio.heightFeet && actor.bio.heightInches) {
+ profile.height = feetInchesToCm(actor.bio.heightFeet, actor.bio.heightInches);
}
- const [, entryIdA, entryIdB] = new URL(release.url).pathname.split('/');
- release.entryId = entryIdA === 'scenes' ? entryIdB : entryIdA;
+ if (actor.bio.weight) {
+ profile.weight = lbsToKg(actor.bio.weight);
+ }
- return release;
+ profile.avatar = actor.img;
+ profile.releases = scrapeAll(actor.movies);
+
+ return profile;
}
-function scrapeLatestA(html, site) {
- const { document } = new JSDOM(html).window;
+async function fetchLatest(channel, _page = 1) {
+ // freshman year, layna landry
+ if (!channel.parameters?.id) {
+ return null;
+ }
- const scenes = Array.from(document.querySelectorAll('.scenewrapper'));
+ const url = `https://store.psmcdn.net/ts-organic-iiiokv9kyo/seriesContent/${channel.parameters.id}/latestMovies.json`;
+ const res = await http.get(url);
- return scenes.map(scene => scrapeSceneA(null, site, scene));
+ if (res.ok) {
+ return scrapeAll(Object.values(res.body), channel);
+ }
+
+ return res.status;
}
-async function fetchLatestTeamSkeet(site, page = 1) {
- const url = `https://www.teamskeet.com/t1/updates/load?fltrs[site]=${site.parameters.id}&page=${page}&view=newest&fltrs[time]=ALL&order=DESC`;
- const res = await bhttp.get(url);
+async function fetchScene(url, channel) {
+ const entryId = new URL(url).pathname.match(/\/movies\/(.+)$/)[1];
+ const apiUrl = `https://store.psmcdn.net/ts-organic-iiiokv9kyo/videosContent/${entryId}.json`;
- if (res.statusCode === 200) {
- return scrapeLatest(res.body.toString(), site);
+ const res = await http.get(apiUrl);
+
+ if (res.ok) {
+ return scrapeScene(res.body, channel);
}
- return null;
+ return res.status;
}
-async function fetchLatestA(site) {
- const url = `${site.url}/scenes`;
- const res = await bhttp.get(url);
+async function fetchProfile(baseActor) {
+ const res = await http.get(`https://store.psmcdn.net/ts-organic-iiiokv9kyo/modelsContent/${slugify(baseActor.name)}.json`);
- if (res.statusCode === 200) {
- return scrapeLatestA(res.body.toString(), site);
+ if (res.ok && res.body) {
+ return scrapeProfile(res.body);
}
- return null;
-}
-
-async function fetchLatest(site, page = 1) {
- if (site.parameters.id) {
- return fetchLatestTeamSkeet(site, page);
- }
-
- if (site.parameters.scraper === 'A') {
- return fetchLatestA(site, page);
- }
-
- return null;
-}
-
-async function fetchScene(url, site) {
- const session = bhttp.session(); // resolve redirects
- const res = await session.get(url);
-
- if (site.parameters?.scraper === 'A') {
- return scrapeSceneA(res.body.toString(), site, null, url);
- }
-
- return scrapeScene(res.body.toString(), site, url);
+ return res.status;
}
module.exports = {
fetchLatest,
fetchScene,
+ fetchProfile,
};
diff --git a/src/scrapers/teamskeet_legacy.js b/src/scrapers/teamskeet_legacy.js
new file mode 100644
index 00000000..3aefc7da
--- /dev/null
+++ b/src/scrapers/teamskeet_legacy.js
@@ -0,0 +1,180 @@
+'use strict';
+
+const bhttp = require('bhttp');
+const { JSDOM } = require('jsdom');
+const moment = require('moment');
+
+function extractTitle(pathname) {
+ return pathname
+ .split('/')
+ .slice(-2)[0]
+ .split('_')
+ .map(seg => `${seg.charAt(0).toUpperCase()}${seg.slice(1)}`)
+ .join(' ');
+}
+
+function extractActors(str) {
+ return str
+ .split(/,|\band\b/ig)
+ .filter(actor => !/\.{3}/.test(actor))
+ .map(actor => actor.trim())
+ .filter(actor => actor.length > 0);
+}
+
+function scrapeLatest(html, site) {
+ const { document } = new JSDOM(html).window;
+
+ const scenes = Array.from(document.querySelectorAll('#updatesList li.grey, #updatesList li.white'));
+
+ return scenes.map((scene) => {
+ const release = { site };
+
+ const link = scene.querySelector('.info a');
+ const poster = scene.querySelector('img');
+ const { pathname } = new URL(link);
+
+ [release.entryId] = poster.id.match(/\d+/);
+
+ release.url = `https://www.teamskeet.com${pathname}`;
+ release.title = extractTitle(pathname);
+
+ release.date = moment.utc(scene.querySelector('strong').textContent, 'MM/DD/YYYY').toDate();
+
+ const photos = Array.from({ length: 5 }, (_value, index) => poster.dataset.original.replace(/\d+.jpg/, `${String(index + 1).padStart(2, '0')}.jpg`));
+ [release.poster] = photos;
+ release.photos = photos.slice(1);
+
+ const actors = scene.querySelector('div span[rel="test"]').textContent;
+ release.actors = extractActors(actors);
+
+ return release;
+ });
+}
+
+function scrapeScene(html, site, url) {
+ const { document } = new JSDOM(html).window;
+ const release = { site };
+
+ release.entryId = document.querySelector('#story-and-tags .scene_rater').attributes.rel.value;
+ release.description = document.querySelector('#story-and-tags td:nth-child(2) div').textContent;
+ const [actors, title, channel] = document.querySelector('title').textContent.split('|').map(item => item.trim());
+
+ release.url = url;
+ release.title = title;
+ release.actors = extractActors(actors);
+ release.channel = channel.toLowerCase();
+ release.tags = Array.from(document.querySelectorAll('#story-and-tags tr:nth-child(2) a'), el => el.rel);
+
+ const date = document.querySelector('h3 ~ div:nth-child(4), h3 ~ div div.gray:not(.scene_rater)').textContent.split(':')[1].trim();
+ release.date = moment.utc(date, 'MMMM Do, YYYY').toDate();
+
+ const { poster } = document.querySelector('video');
+ if (poster && !/gen/.test(poster)) release.poster = [poster.replace('low', 'hi'), poster];
+
+ const siteId = document.querySelector('#story-and-tags img').src.match(/\w+.jpg/)[0].replace('.jpg', '');
+ const actorsSlug = document.querySelector('h3 a').href.split('/').slice(-2)[0];
+
+ release.photos = Array.from({ length: 5 }, (value, index) => `https://images.psmcdn.net/teamskeet/${siteId}/${actorsSlug}/shared/scenes/new/${String(index + 1).padStart(2, '0')}.jpg`);
+
+ const trailer = document.querySelector('div.right.gray a').href;
+ if (trailer) release.trailer = { src: trailer };
+
+ return release;
+}
+
+function scrapeSceneA(html, site, sceneX, url) {
+ const scene = sceneX || new JSDOM(html).window.document;
+ const release = { site };
+
+ release.description = scene.querySelector('.scene-story').textContent.replace('...read more', '...').trim();
+
+ release.date = moment.utc(scene.querySelector('.scene-date').textContent, 'MM/DD/YYYY').toDate();
+ release.actors = Array.from(scene.querySelectorAll('.starring span'), el => extractActors(el.textContent)).flat();
+
+ const durationString = scene.querySelector('.time').textContent.trim();
+ const duration = ['00'].concat(durationString.split(':')).slice(-3).join(':'); // ensure hh:mm:ss
+ release.duration = moment.duration(duration).asSeconds();
+
+ if (sceneX) {
+ const titleEl = scene.querySelector(':scope > a');
+
+ release.url = titleEl.href;
+ release.entryId = titleEl.id;
+ release.title = titleEl.title;
+
+ const [poster, ...photos] = Array.from(scene.querySelectorAll('.scene img'), el => el.src);
+ release.poster = [poster.replace('bio_big', 'video'), poster];
+ release.photos = photos;
+ }
+
+ if (!sceneX) {
+ release.title = scene.querySelector('.title span').textContent;
+ release.url = url;
+
+ release.poster = scene.querySelector('video').poster;
+ release.photos = [release.poster.replace('video', 'bio_small'), release.poster.replace('video', 'bio_small2')];
+ }
+
+ const [, entryIdA, entryIdB] = new URL(release.url).pathname.split('/');
+ release.entryId = entryIdA === 'scenes' ? entryIdB : entryIdA;
+
+ return release;
+}
+
+function scrapeLatestA(html, site) {
+ const { document } = new JSDOM(html).window;
+
+ const scenes = Array.from(document.querySelectorAll('.scenewrapper'));
+
+ return scenes.map(scene => scrapeSceneA(null, site, scene));
+}
+
+async function fetchLatestTeamSkeet(site, page = 1) {
+ const url = `https://www.teamskeet.com/t1/updates/load?fltrs[site]=${site.parameters.id}&page=${page}&view=newest&fltrs[time]=ALL&order=DESC`;
+ const res = await bhttp.get(url);
+
+ if (res.statusCode === 200) {
+ return scrapeLatest(res.body.toString(), site);
+ }
+
+ return null;
+}
+
+async function fetchLatestA(site) {
+ const url = `${site.url}/scenes`;
+ const res = await bhttp.get(url);
+
+ if (res.statusCode === 200) {
+ return scrapeLatestA(res.body.toString(), site);
+ }
+
+ return null;
+}
+
+async function fetchLatest(site, page = 1) {
+ if (site.parameters.id) {
+ return fetchLatestTeamSkeet(site, page);
+ }
+
+ if (site.parameters.scraper === 'A') {
+ return fetchLatestA(site, page);
+ }
+
+ return null;
+}
+
+async function fetchScene(url, site) {
+ const session = bhttp.session(); // resolve redirects
+ const res = await session.get(url);
+
+ if (site.parameters?.scraper === 'A') {
+ return scrapeSceneA(res.body.toString(), site, null, url);
+ }
+
+ return scrapeScene(res.body.toString(), site, url);
+}
+
+module.exports = {
+ fetchLatest,
+ fetchScene,
+};