Added profile scraping and Hoby Buchanon to Team Skeet.
|
@ -156,7 +156,7 @@ export default {
|
|||
return {
|
||||
entity: null,
|
||||
totalCount: null,
|
||||
limit: 20,
|
||||
limit: Number(this.$route.query.limit) || 20,
|
||||
expanded: false,
|
||||
};
|
||||
},
|
||||
|
|
|
@ -86,7 +86,6 @@ function initEntitiesActions(store, _router) {
|
|||
or: [
|
||||
{
|
||||
slug: { equalTo: $entitySlug }
|
||||
type: { equalTo: "channel" }
|
||||
},
|
||||
{
|
||||
parent: {
|
||||
|
|
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1020 B After Width: | Height: | Size: 1020 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 873 B After Width: | Height: | Size: 873 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
@ -0,0 +1,195 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300 65" style="enable-background:new 0 0 300 65;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#514FFF;}
|
||||
.st1{fill:url(#Path_51_1_);}
|
||||
.st2{fill:url(#Path_52_1_);}
|
||||
.st3{fill:url(#Path_53_1_);}
|
||||
.st4{fill:none;stroke:#FE027C;stroke-width:0.3249;stroke-miterlimit:10;}
|
||||
.st5{fill:#FE027C;}
|
||||
.st6{fill:#FFFFFF;}
|
||||
.st7{fill:#09B83E;}
|
||||
</style>
|
||||
<g id="Group_32" transform="translate(2271 286)">
|
||||
<g id="Group_29" transform="translate(-2467 -304)">
|
||||
<g id="stayhomepov_inline" transform="translate(146.651 -23.449)">
|
||||
<g id="Group_18" transform="translate(130.708 59.311)">
|
||||
<g id="Group_15" transform="translate(0)">
|
||||
<path id="Path_40" class="st0" d="M-2.6,24.8c0,4-2.5,7.6-6.3,8.9c-0.7,0.3-1.4,0.4-2.2,0.4c-1,0-1.9-0.1-2.9-0.4
|
||||
c-2.1-0.6-4-1.9-5.3-3.7c-0.4-0.5-0.3-1.3,0.3-1.7l2.2-1.6c0.4-0.3,0.9-0.2,1.2,0.2c1.2,1.2,2.8,1.9,4.5,1.8
|
||||
c2.1-0.2,3.8-1.9,3.9-4c0-2.9-1.3-3.7-4.8-5.1c-3.2-1.3-7.7-3.1-7.7-9.7c-0.1-3.8,2.3-7.3,5.9-8.6C-13,1.2-12.3,1-11.5,1
|
||||
c0.8,0,1.7,0.1,2.4,0.4c2,0.6,3.8,1.9,5,3.7c0.4,0.5,0.3,1.3-0.2,1.7l-2.2,1.7c-0.4,0.3-0.9,0.2-1.2-0.2c0,0,0,0,0,0
|
||||
c-0.9-1.2-2.3-1.9-3.8-1.9c-1.2,0-3.6,1.2-3.6,3.6c0,2.6,1.2,3.3,4.6,4.7C-7.3,15.9-2.6,17.8-2.6,24.8z"/>
|
||||
<path id="Path_41" class="st0" d="M16.2,2.6v3.1c0,0.6-0.4,1.1-1,1.1h-3.6c-0.6,0.1-1,0.6-1,1.1v24.7c0,0.6-0.4,1.1-1,1.1H7.1
|
||||
c-0.6-0.1-1-0.6-1-1.1V7.9c0-0.6-0.4-1.1-1-1.1H1.5c-0.6-0.1-1-0.6-1-1.1V2.6c0-0.6,0.4-1.1,1-1.1h13.7
|
||||
C15.8,1.5,16.3,1.9,16.2,2.6C16.2,2.5,16.2,2.6,16.2,2.6z"/>
|
||||
<path id="Path_42" class="st0" d="M36,33.7h-2.8c-0.6-0.1-1.1-0.5-1.2-1.1l-1-4.1c-0.1-0.6-0.6-1-1.2-1.1H24
|
||||
c-0.6,0.1-1.1,0.5-1.2,1.1l-1,4.1c-0.1,0.6-0.6,1-1.2,1.1h-2.8c-0.4,0-0.8-0.4-0.8-0.8c0-0.1,0-0.2,0.1-0.3l7-30.1
|
||||
c0.1-0.6,0.6-1,1.2-1.1h3.1C29,1.5,29.5,2,29.6,2.5l7,30.1c0.2,0.4,0,0.9-0.5,1C36.1,33.7,36.1,33.7,36,33.7z M29.2,21
|
||||
l-2.1-8.9c-0.2-0.6-0.4-0.6-0.5,0L24.6,21c-0.2,0.4,0,0.9,0.5,1c0.1,0,0.2,0.1,0.3,0.1h3.2C29,22.1,29.3,21.6,29.2,21L29.2,21z
|
||||
"/>
|
||||
<path id="Path_43" class="st0" d="M55.7,2.5l-6.8,20.2c-0.2,0.7-0.3,1.4-0.3,2.2v7.6c0,0.6-0.4,1.1-1,1.1H45
|
||||
c-0.6-0.1-1-0.6-1-1.1v-7.6c0-0.7-0.1-1.5-0.3-2.2L36.9,2.5C36.7,2,37,1.5,37.5,1.5h2.9c0.6,0.1,1.1,0.5,1.3,1.1l4.1,12.4
|
||||
c0.2,0.6,0.5,0.6,0.7,0l4.1-12.4c0.2-0.6,0.7-1,1.3-1.1H55C55.6,1.4,55.9,1.9,55.7,2.5z"/>
|
||||
</g>
|
||||
<g id="Group_16" transform="translate(113.256 0.052)">
|
||||
<path id="Path_44" class="st0" d="M-32.3,2.5v30c0,0.6-0.4,1.1-1,1.1h-2.6c-0.6-0.1-1-0.6-1-1.1V21.3c0-0.6-0.4-1.1-1-1.1h-6.8
|
||||
c-0.6,0.1-1,0.6-1,1.1v11.2c0,0.6-0.4,1.1-1,1.1h-2.6c-0.6-0.1-1-0.6-1-1.1v-30c0-0.6,0.4-1.1,1-1.1h2.6c0.6,0.1,1,0.6,1,1.1
|
||||
v11.2c0,0.6,0.4,1.1,1,1.1h6.8c0.6-0.1,1-0.6,1-1.1V2.5c0-0.6,0.4-1.1,1-1.1h2.6C-32.7,1.4-32.3,1.9-32.3,2.5z"/>
|
||||
<path id="Path_45" class="st0" d="M-10.4,11v13.1c0,4.1-2.2,7.7-5.3,9.2c-1,0.5-2.1,0.8-3.3,0.8h-0.8c-1.1,0-2.3-0.3-3.3-0.8
|
||||
c-3.1-1.5-5.3-5-5.3-9.2V11c0-5.5,3.8-9.9,8.6-9.9h0.8C-14.3,1-10.4,5.5-10.4,11z M-15,11c0-2.6-1.8-4.6-4-4.6h-0.8
|
||||
c-2.2,0-4,2.1-4,4.6v13.1c0,2.6,1.8,4.6,4,4.6h0.8c2.2,0,4-2.1,4-4.6V11z"/>
|
||||
<path id="Path_46" class="st0" d="M14.3,2.5v30c0,0.6-0.4,1.1-1,1.1h-2.6c-0.6-0.1-1-0.6-1-1.1V18.3c0-0.6-0.1-0.6-0.3,0
|
||||
l-3.2,14c-0.1,0.6-0.6,1-1.2,1.1H2.7c-0.6-0.1-1.1-0.5-1.2-1.1l-3.2-14c-0.2-0.6-0.3-0.6-0.3,0v14.2c0,0.6-0.4,1.1-1,1.1h-2.6
|
||||
c-0.6-0.1-1-0.6-1-1.1v-30c0-0.6,0.4-1.1,1-1.1h3.7c0.6,0.1,1.1,0.5,1.2,1.1l4.2,18.4c0.2,0.6,0.4,0.6,0.5,0L8.2,2.5
|
||||
c0.1-0.6,0.6-1,1.2-1.1h3.7C13.8,1.4,14.3,1.9,14.3,2.5C14.3,2.5,14.3,2.5,14.3,2.5z"/>
|
||||
<path id="Path_47" class="st0" d="M23,7.8v5.9c0,0.6,0.4,1.1,1,1.1h5.2c0.6,0.1,1,0.6,1,1.1V19c0,0.6-0.4,1.1-1,1.1H24
|
||||
c-0.6,0.1-1,0.6-1,1.1v5.9c0,0.6,0.4,1.1,1,1.1h9.1c0.6,0.1,1,0.6,1,1.1v3.1c0,0.6-0.4,1.1-1,1.1H19.4c-0.6-0.1-1-0.6-1-1.1
|
||||
v-30c0-0.6,0.4-1.1,1-1.1h13.6c0.6,0.1,1,0.6,1,1.1v3.1c0,0.6-0.4,1.1-1,1.1H24C23.4,6.8,23,7.3,23,7.8z"/>
|
||||
</g>
|
||||
<g id="Group_17" transform="translate(239.154 0.052)">
|
||||
<path id="Path_48" class="st0" d="M-67,11.8v3.7c0,5.5-3.8,9.9-8.5,9.9h-3.1c-0.6,0-1,0.6-1,1.2c0,0,0,0,0,0v6
|
||||
c0,0.6-0.4,1.1-1,1.2h-2.6c-0.6,0-1-0.6-1-1.2c0,0,0,0,0,0V2.6c0-0.6,0.4-1.1,1-1.2h7.2C-71,1.4-67,6.1-67,11.8z M-71.6,11.8
|
||||
c0-2.8-2-5.1-4.4-5.1h-2.7c-0.6,0-1,0.6-1,1.2c0,0,0,0,0,0v11c0,0.6,0.4,1.1,1,1.2h3.1c2.2,0,4-2.1,4-4.6L-71.6,11.8z"/>
|
||||
<path id="Path_49" class="st0" d="M-45.3,11v13.1c0,4.1-2.2,7.7-5.3,9.2c-1,0.5-2.1,0.8-3.3,0.8h-0.8c-1.1,0-2.3-0.3-3.3-0.8
|
||||
c-3.1-1.5-5.3-5-5.3-9.2V11c0-5.5,3.8-9.9,8.6-9.9h0.8C-49.2,1-45.3,5.5-45.3,11z M-49.9,11c0-2.6-1.8-4.6-4-4.6h-0.8
|
||||
c-2.2,0-4,2.1-4,4.6v13.1c0,2.6,1.8,4.6,4,4.6h0.8c2.2,0,4-2.1,4-4.6L-49.9,11z"/>
|
||||
<path id="Path_50" class="st0" d="M-22.8,2.5l-7,30.1c-0.1,0.6-0.6,1-1.2,1.1h-3.1c-0.6-0.1-1.1-0.5-1.2-1.1l-7-30.1
|
||||
c-0.2-0.4,0-0.9,0.5-1c0.1,0,0.2-0.1,0.3-0.1h2.8c0.6,0.1,1.1,0.5,1.2,1.1l4.8,20.5c0.2,0.6,0.4,0.6,0.5,0l4.8-20.5
|
||||
c0.1-0.6,0.6-1,1.2-1.1h2.8c0.4,0,0.8,0.4,0.8,0.8C-22.7,2.3-22.7,2.4-22.8,2.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_23" transform="translate(49.349 49.449)">
|
||||
|
||||
<linearGradient id="Path_51_1_" gradientUnits="userSpaceOnUse" x1="-294.3531" y1="456.9432" x2="-294.3531" y2="458.3927" gradientTransform="matrix(35.546 0 0 -19.817 10492.2236 9095.2549)">
|
||||
<stop offset="0" style="stop-color:#FD017D"/>
|
||||
<stop offset="0.119" style="stop-color:#F60483"/>
|
||||
<stop offset="0.297" style="stop-color:#E10E92"/>
|
||||
<stop offset="0.513" style="stop-color:#BF1DAC"/>
|
||||
<stop offset="0.755" style="stop-color:#9132CF"/>
|
||||
<stop offset="0.979" style="stop-color:#6048F4"/>
|
||||
</linearGradient>
|
||||
<path id="Path_51" class="st1" d="M42.1,38.8l-2.3-2.1L38.6,38l-2.3,2.2L29,47l-7.4-6.8l-1.5-1.4l-0.3-0.3l-1.2-1.3l-2.4,2.1
|
||||
l1.2,1.1l0.5,0.5l1.6,1.5l9.5,8.7l9.5-8.7l3.2-3.1h0L42.1,38.8z"/>
|
||||
|
||||
<linearGradient id="Path_52_1_" gradientUnits="userSpaceOnUse" x1="-296.4972" y1="465.378" x2="-296.4972" y2="466.133" gradientTransform="matrix(73.6095 0 0 -41.6311 21854.0762 19411.6094)">
|
||||
<stop offset="0" style="stop-color:#FD017D"/>
|
||||
<stop offset="0.119" style="stop-color:#F60483"/>
|
||||
<stop offset="0.297" style="stop-color:#E10E92"/>
|
||||
<stop offset="0.513" style="stop-color:#BF1DAC"/>
|
||||
<stop offset="0.755" style="stop-color:#9132CF"/>
|
||||
<stop offset="0.979" style="stop-color:#6048F4"/>
|
||||
</linearGradient>
|
||||
<path id="Path_52" class="st2" d="M51.6,8.2C45.7,2.2,36,2.2,30,8.1l-0.8,0.8l-0.8-0.8c-5.9-6-15.6-6-21.6-0.1s-6,15.6-0.1,21.6
|
||||
c0.1,0.1,0.1,0.1,0.2,0.2L9,32l0,0l0.8,0.8l0,0L11,34l2.2-2l-1.3-1.4l0,0l-0.4-0.4l0,0L9,27.7c-4.8-4.7-4.8-12.5-0.1-17.3
|
||||
s12.5-4.8,17.3-0.1l3,2.9l3-2.9c4.8-4.7,12.5-4.7,17.3,0.1s4.7,12.5-0.1,17.3L46.8,30l0,0L45,31.8l2.4,2l0.5-0.5l0,0l3.5-3.5
|
||||
C57.4,24,57.5,14.3,51.6,8.2C51.6,8.3,51.6,8.2,51.6,8.2z"/>
|
||||
|
||||
<linearGradient id="Path_53_1_" gradientUnits="userSpaceOnUse" x1="-295.8171" y1="459.1617" x2="-295.8171" y2="459.9846" gradientTransform="matrix(54.9407 0 0 -23.736 16281.5762 10937.6582)">
|
||||
<stop offset="0" style="stop-color:#FD017D"/>
|
||||
<stop offset="0.119" style="stop-color:#F60483"/>
|
||||
<stop offset="0.297" style="stop-color:#E10E92"/>
|
||||
<stop offset="0.513" style="stop-color:#BF1DAC"/>
|
||||
<stop offset="0.755" style="stop-color:#9132CF"/>
|
||||
<stop offset="0.979" style="stop-color:#6048F4"/>
|
||||
</linearGradient>
|
||||
<path id="Path_53" class="st3" d="M48.6,37.3l-10.1-7.8v-6.8h-3.6v4l-4.8-3.7c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0-0.1,0s0,0-0.1,0
|
||||
s0,0-0.1,0s0,0-0.1,0s0,0-0.1,0c0,0,0,0-0.1,0h0c0,0-0.1,0-0.1,0h-0.7c0,0,0,0-0.1,0c0,0,0,0-0.1,0c0,0,0,0-0.1,0c0,0,0,0-0.1,0
|
||||
s0,0-0.1,0s0,0-0.1,0l0,0c0,0,0,0-0.1,0c0,0,0,0,0,0c0,0,0,0,0,0L9.7,37.3c-0.7,0.5-0.8,1.5-0.3,2.1c0,0,0,0,0,0
|
||||
c0.3,0.4,0.8,0.6,1.2,0.6c0.4,0,0.7-0.1,1-0.3l17.5-13.5l17.6,13.5c0.3,0.2,0.6,0.3,1,0.3c0.5,0,0.9-0.2,1.2-0.6
|
||||
C49.4,38.8,49.3,37.8,48.6,37.3z"/>
|
||||
<g id="Group_22" transform="translate(30.778 39.882)">
|
||||
<g id="Group_19" transform="translate(0.413 0.464)">
|
||||
<line id="Line_27" class="st4" x1="-2.5" y1="-7.2" x2="-1.8" y2="-5.9"/>
|
||||
<line id="Line_28" class="st4" x1="-4.4" y1="-6.5" x2="-3.2" y2="-5.7"/>
|
||||
<line id="Line_29" class="st4" x1="-5.7" y1="-4.9" x2="-4.3" y2="-4.9"/>
|
||||
<line id="Line_30" class="st4" x1="-6.1" y1="-2.9" x2="-4.7" y2="-3.6"/>
|
||||
<line id="Line_31" class="st4" x1="-5.4" y1="-1" x2="-4.6" y2="-2.3"/>
|
||||
<line id="Line_32" class="st4" x1="-3.8" y1="0.3" x2="-3.7" y2="-1.2"/>
|
||||
<line id="Line_33" class="st4" x1="-1.8" y1="0.7" x2="-2.5" y2="-0.6"/>
|
||||
<line id="Line_34" class="st4" x1="0.1" y1="0" x2="-1.1" y2="-0.8"/>
|
||||
<line id="Line_35" class="st4" x1="1.4" y1="-1.6" x2="0" y2="-1.7"/>
|
||||
<line id="Line_36" class="st4" x1="1.8" y1="-3.6" x2="0.5" y2="-2.9"/>
|
||||
<line id="Line_37" class="st4" x1="1.1" y1="-5.5" x2="0.3" y2="-4.3"/>
|
||||
<line id="Line_38" class="st4" x1="-0.5" y1="-6.9" x2="-0.6" y2="-5.4"/>
|
||||
</g>
|
||||
<g id="Group_20">
|
||||
<path id="Path_54" class="st5" d="M-1.7-7.1C-4.1-7.1-6-5.2-6-2.8c0,2.4,1.9,4.3,4.3,4.3c2.4,0,4.3-1.9,4.3-4.3l0,0
|
||||
C2.5-5.2,0.6-7.1-1.7-7.1C-1.7-7.1-1.7-7.1-1.7-7.1z M-1.7,0.9c-2,0-3.7-1.7-3.7-3.7c0-2,1.7-3.7,3.7-3.7c2,0,3.7,1.7,3.7,3.7
|
||||
C2-0.8,0.3,0.9-1.7,0.9z"/>
|
||||
</g>
|
||||
<g id="Group_21" transform="translate(1.806 1.806)">
|
||||
<path id="Path_55" class="st5" d="M-3.5-7.6c-1.6,0-2.9,1.3-2.9,2.9c0,1.6,1.3,2.9,2.9,2.9S-0.6-3-0.6-4.6l0,0
|
||||
C-0.6-6.2-1.9-7.6-3.5-7.6z M-3-6c-0.2,0-0.4-0.2-0.4-0.4c0-0.2,0.2-0.4,0.4-0.4c0.2,0,0.4,0.2,0.4,0.4l0,0
|
||||
C-2.6-6.2-2.8-6-3-6L-3-6z M-1.8-4.3c-0.4,0-0.7-0.3-0.7-0.7c0-0.4,0.3-0.7,0.7-0.7c0.4,0,0.7,0.3,0.7,0.7l0,0
|
||||
C-1.1-4.7-1.4-4.4-1.8-4.3L-1.8-4.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ts_original" transform="translate(299.6 17.6)">
|
||||
<g id="Group_25" transform="translate(1.4 0.626)">
|
||||
<path id="Path_56" class="st6" d="M-24.2,5.8h2.1l1.8,9.3H-22l-0.4-2.1h-1.5l-0.3,2.1H-26L-24.2,5.8z M-22.5,11.8l-0.6-3.7
|
||||
l-0.5,3.7H-22.5z"/>
|
||||
<path id="Path_57" class="st6" d="M-15.5,7.1H-17V5.8h4.8v1.4h-1.4v7.9h-1.9V7.1z"/>
|
||||
<path id="Path_58" class="st6" d="M-11.3,5.8h4v1.3h-2.1v2.5h1.6v1.3h-1.6v3h2.2v1.3h-4.1V5.8z"/>
|
||||
<path id="Path_59" class="st6" d="M-4.9,5.8h2.1l1.8,9.3h-1.7L-3,13h-1.5l-0.3,2.1h-1.8L-4.9,5.8z M-3.4,11.8L-3.9,8l-0.5,3.8
|
||||
H-3.4z"/>
|
||||
<path id="Path_60" class="st6" d="M0,5.8h2.1l1.2,5.9l1.2-5.9h2L6.6,15H5.2L5,8.7L3.7,15H2.6L1.3,8.7L1.2,15h-1.4L0,5.8z"/>
|
||||
</g>
|
||||
<g id="Group_26" transform="translate(47.545 0.4)">
|
||||
<path id="Path_61" class="st7" d="M-38.5,12.5l1.6-0.2c0,1.2,0.3,1.7,0.9,1.7c0.5,0,0.7-0.3,0.7-0.7c0-0.7-0.4-1.4-1-1.8l-1-0.8
|
||||
c-0.7-0.6-1.2-1.5-1.2-2.4c0-1.6,1-2.4,2.6-2.4c1.9,0,2.2,1.4,2.3,2.6l-1.6,0.2c0-0.8-0.1-1.5-0.7-1.5c-0.4,0-0.7,0.4-0.7,0.8
|
||||
c0,0.7,0.3,1,0.8,1.5l0.9,0.8c0.9,0.6,1.4,1.7,1.4,2.8c0,1.3-1,2.3-2.2,2.3c-0.1,0-0.1,0-0.2,0C-37.6,15.5-38.4,14.6-38.5,12.5z
|
||||
"/>
|
||||
<path id="Path_62" class="st7" d="M-32.4,6h1.9v4l1.7-4h1.8l-1.7,4.2l1.9,5.1h-1.9l-1.5-4.2l-0.3,0.5v3.7h-1.9V6z"/>
|
||||
<path id="Path_63" class="st7" d="M-26,6h4v1.3h-2.1v2.5h1.6v1.3h-1.6v3h2.2v1.3H-26V6z"/>
|
||||
<path id="Path_64" class="st7" d="M-21,6h4v1.3h-2.1v2.5h1.6v1.3h-1.6v3h2.2v1.3H-21V6z"/>
|
||||
<path id="Path_65" class="st7" d="M-15.1,7.4h-1.4V6h4.8v1.4h-1.4v7.9H-15L-15.1,7.4L-15.1,7.4z"/>
|
||||
</g>
|
||||
<g id="Group_27" transform="translate(153.373 0.4)">
|
||||
<path id="Path_66" class="st6" d="M-67,12.5l1.6-0.2c0,1.2,0.3,1.7,0.9,1.7c0.5,0,0.7-0.3,0.7-0.7c0-0.7-0.4-1.4-1-1.8l-1-0.8
|
||||
c-0.7-0.6-1.2-1.5-1.2-2.4c0-1.6,1-2.4,2.6-2.4c1.9,0,2.2,1.4,2.3,2.6l-1.6,0.2c0-0.8-0.1-1.5-0.7-1.5c-0.4,0-0.7,0.4-0.7,0.8
|
||||
c0,0.7,0.3,1,0.8,1.5l0.9,0.8c0.9,0.6,1.4,1.7,1.4,2.8c0,1.3-1,2.3-2.2,2.3c-0.1,0-0.1,0-0.2,0C-66.1,15.5-66.9,14.6-67,12.5z"
|
||||
/>
|
||||
<path id="Path_67" class="st6" d="M-60.9,6h4v1.3H-59v2.5h1.6v1.3H-59v3h2.2v1.3h-4.1V6z"/>
|
||||
<path id="Path_68" class="st6" d="M-55.9,6h2.4c1.9,0,3,0.6,3,2.5c0,1.2-0.2,1.9-1.2,2.3l1.3,4.5h-2l-1.1-4.2H-54v4.2h-1.9V6z
|
||||
M-53.4,10c0.9,0,1.2-0.4,1.2-1.4c0-0.9-0.2-1.3-1.2-1.3H-54V10H-53.4z"/>
|
||||
<path id="Path_69" class="st6" d="M-49.1,6h1.9v9.3h-1.9V6z"/>
|
||||
<path id="Path_70" class="st6" d="M-45.8,6h4v1.3h-2.1v2.5h1.6v1.3h-1.6v3h2.2v1.3h-4.1V6z"/>
|
||||
<path id="Path_71" class="st6" d="M-41,12.5l1.6-0.2c0,1.2,0.3,1.7,0.9,1.7c0.5,0,0.7-0.3,0.7-0.7c0-0.7-0.4-1.4-1-1.8l-1-0.8
|
||||
c-0.7-0.6-1.2-1.5-1.2-2.4c0-1.6,1-2.4,2.6-2.4c1.9,0,2.2,1.4,2.3,2.6l-1.6,0.2c0-0.8-0.1-1.5-0.7-1.5c-0.4,0-0.7,0.4-0.7,0.8
|
||||
c0,0.7,0.3,1,0.8,1.5l0.9,0.8c0.9,0.6,1.4,1.7,1.4,2.8c0,1.3-1,2.3-2.2,2.3c-0.1,0-0.1,0-0.2,0C-40.1,15.5-40.9,14.6-41,12.5z"
|
||||
/>
|
||||
</g>
|
||||
<g id="Group_28" transform="translate(88.951 0.4)">
|
||||
<path id="Path_72" class="st6" d="M-46.8,15.5c-0.5,0-0.9-0.1-1.3-0.2c-0.3-0.1-0.6-0.3-0.8-0.6c-0.2-0.3-0.4-0.6-0.5-1
|
||||
c-0.1-0.4-0.2-0.9-0.2-1.3V8.9c0-0.4,0.1-0.9,0.2-1.3c0.1-0.4,0.3-0.7,0.5-1c0.2-0.3,0.5-0.5,0.8-0.6c0.4-0.1,0.9-0.2,1.3-0.2
|
||||
c0.8-0.1,1.6,0.2,2.1,0.7c0.5,0.7,0.7,1.5,0.7,2.3v3.5c0,0.8-0.2,1.6-0.7,2.3C-45.2,15.2-46,15.5-46.8,15.5z M-47.2,14
|
||||
c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.3,0,0.4-0.1c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.2-0.2c0-0.1,0.1-0.2,0.1-0.3V8.1
|
||||
c0-0.1,0-0.2-0.1-0.3c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.2-0.2-0.2c-0.1,0-0.3-0.1-0.4-0.1c-0.2,0-0.2,0-0.3,0.1
|
||||
s-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.2,0.2c0,0.1-0.1,0.2-0.1,0.3v5.2c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.2,0.2
|
||||
C-47.3,13.9-47.2,14-47.2,14L-47.2,14z"/>
|
||||
<path id="Path_73" class="st6" d="M-42.9,15.3V6h2.4c0.4,0,0.9,0,1.3,0.1c0.3,0.1,0.7,0.2,1,0.4c0.3,0.2,0.5,0.4,0.7,0.7
|
||||
c0.2,0.4,0.3,0.8,0.2,1.2c0,0.5-0.1,1-0.2,1.5c-0.2,0.4-0.5,0.7-0.9,0.8l1.3,4.6h-2l-1.1-4.2h-0.7v4.2L-42.9,15.3L-42.9,15.3z
|
||||
M-41,10h0.5c0.5,0,0.8-0.1,1-0.3c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.7-0.2-1c-0.2-0.2-0.6-0.3-0.9-0.3h-0.6L-41,10L-41,10z"/>
|
||||
<path id="Path_74" class="st6" d="M-36.1,15.3V6h1.9v9.4L-36.1,15.3L-36.1,15.3z"/>
|
||||
<path id="Path_75" class="st6" d="M-30.5,15.5c-0.4,0-0.8-0.1-1.2-0.2c-0.3-0.2-0.6-0.4-0.8-0.7c-0.2-0.3-0.3-0.6-0.4-1
|
||||
c-0.1-0.4-0.2-0.9-0.2-1.3V9.1c0-0.4,0-0.8,0.1-1.2c0.1-0.3,0.2-0.7,0.2-0.9c0.1-0.3,0.3-0.5,0.5-0.7c0.2-0.2,0.5-0.3,0.8-0.4
|
||||
c0.3-0.1,0.7-0.2,1.1-0.2c0.4,0,0.8,0.1,1.2,0.2c0.3,0.1,0.6,0.3,0.8,0.6c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.4,0.2,0.8,0.2,1.2v0.5
|
||||
h-1.8v-1c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.2-0.2-0.2c-0.1,0-0.3-0.1-0.4-0.1c-0.1,0-0.3,0-0.4,0.1
|
||||
c-0.1,0.1-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.1,0.3-0.1,0.4v4.4c0,0.4,0.1,0.7,0.2,1.1
|
||||
c0.1,0.2,0.4,0.4,0.7,0.3c0.3,0,0.6-0.2,0.7-0.4c0.1-0.3,0.2-0.7,0.2-1.1v-0.9h-0.9v-1.2h2.6v4.9h-1.2l-0.2-0.8
|
||||
C-29.3,15.2-29.8,15.5-30.5,15.5z"/>
|
||||
<path id="Path_76" class="st6" d="M-26.5,15.3V6h1.9v9.4L-26.5,15.3L-26.5,15.3z"/>
|
||||
<path id="Path_77" class="st6" d="M-23.4,15.3V6h1.3l2.1,4.9V6h1.6v9.4h-1.2l-2.1-5.2v5.2L-23.4,15.3L-23.4,15.3z"/>
|
||||
<path id="Path_78" class="st6" d="M-17.3,15.3l1.8-9.4h2.1l1.8,9.4h-1.8l-0.3-2.1h-1.5l-0.3,2.1H-17.3z M-14.9,12.1h1.2
|
||||
l-0.6-3.7L-14.9,12.1z"/>
|
||||
<path id="Path_79" class="st6" d="M-10.3,15.3V6h1.9v8.1h2.2v1.3L-10.3,15.3L-10.3,15.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 23.0.6, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 240 45" style="enable-background:new 0 0 240 45;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#09B83E;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<polygon class="st0" points="194.8,0 214.1,0 214.1,6.3 203.8,6.3 203.8,18.3 211.8,18.3 211.8,24.6 203.8,24.6 203.8,38.7
|
||||
214.2,38.7 214.2,44.9 194.8,44.9 "/>
|
||||
<g>
|
||||
<polygon class="st1" points="6.8,6.8 0,6.8 0,0 22.6,0 22.6,6.8 15.9,6.8 15.9,44.9 6.8,44.9 "/>
|
||||
<polygon class="st1" points="25.8,0 45.1,0 45.1,6.3 34.7,6.3 34.7,18.3 42.7,18.3 42.7,24.6 34.7,24.6 34.7,38.7 45.2,38.7
|
||||
45.2,44.9 25.8,44.9 "/>
|
||||
<path class="st1" d="M64.4,29.4l-2.7-18.1l-2.6,18.1H64.4z M56.7,0h10l8.5,44.9h-8.3L65.3,35h-7l-1.7,9.9h-8.5L56.7,0z"/>
|
||||
<polygon class="st1" points="79.1,0 88.7,0 94.2,28.3 100,0 109.2,0 110,44.9 103.5,44.9 102.8,14.4 97.1,44.9 91.5,44.9
|
||||
85.7,14.3 85,44.9 78.4,44.9 "/>
|
||||
<path class="st0" d="M116.3,31.3l7.6-1.3c0.2,5.5,1.4,8.1,4.3,8.1c2.2,0,2.9-1.7,2.9-3.6c0-3.7-1.9-5.8-4.7-8.4l-4.5-3.9
|
||||
c-3.2-2.8-5.5-5.9-5.5-11.1c0-7.2,4.5-11.1,11.7-11.1c8.7,0,10.5,6.5,10.8,12.2l-7.6,1.1c-0.1-4-0.5-6.8-3.4-6.8c-2,0-3,1.8-3,3.7
|
||||
c0,3.1,1.5,4.8,3.9,6.9l4.4,3.9c3.6,3.2,6.6,7,6.6,13c0,6.3-4.4,10.9-11.1,10.9C120.5,44.9,116.7,40.6,116.3,31.3"/>
|
||||
<polygon class="st0" points="142.8,0 151.7,0 151.7,19 159.8,0 168.5,0 160.2,20.2 169.2,44.9 160,44.9 153.2,24.8 151.7,27.3
|
||||
151.7,44.9 142.8,44.9 "/>
|
||||
<polygon class="st0" points="172.3,0 191.6,0 191.6,6.3 181.3,6.3 181.3,18.3 189.2,18.3 189.2,24.6 181.3,24.6 181.3,38.7
|
||||
191.7,38.7 191.7,44.9 172.3,44.9 "/>
|
||||
<polygon class="st0" points="224.2,6.8 217.4,6.8 217.4,0 240,0 240,6.8 233.3,6.8 233.3,44.9 224.2,44.9 "/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -232,6 +232,7 @@ module.exports = {
|
|||
silverstonedvd: famedigital,
|
||||
silviasaint: famedigital,
|
||||
swallowed: mikeadriano,
|
||||
teamskeet,
|
||||
teencoreclub,
|
||||
thatsitcomshow: nubiles,
|
||||
transangels,
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
|
|
@ -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,
|
||||
};
|