diff --git a/src/providers/all.ts b/src/providers/all.ts index 2e43917..7f7a528 100644 --- a/src/providers/all.ts +++ b/src/providers/all.ts @@ -62,6 +62,7 @@ import { vidplayScraper } from './embeds/vidplay'; import { VidsrcsuServer10Scraper, VidsrcsuServer11Scraper, + VidsrcsuServer12Scraper, VidsrcsuServer1Scraper, VidsrcsuServer2Scraper, VidsrcsuServer3Scraper, @@ -189,6 +190,7 @@ export function gatherAllEmbeds(): Array { VidsrcsuServer9Scraper, VidsrcsuServer10Scraper, VidsrcsuServer11Scraper, + VidsrcsuServer12Scraper, webtor4kScraper, webtor1080Scraper, webtor720Scraper, diff --git a/src/providers/embeds/vidsrcsu.ts b/src/providers/embeds/vidsrcsu.ts index 97e8eab..b11933c 100644 --- a/src/providers/embeds/vidsrcsu.ts +++ b/src/providers/embeds/vidsrcsu.ts @@ -2,6 +2,10 @@ import { flags } from '@/entrypoint/utils/targets'; import { makeEmbed } from '@/providers/base'; const providers = [ + { + id: 'server-12', + rank: 112, + }, { id: 'server-7', rank: 102, @@ -85,4 +89,5 @@ export const [ VidsrcsuServer9Scraper, VidsrcsuServer10Scraper, VidsrcsuServer11Scraper, + VidsrcsuServer12Scraper, ] = providers.map(embed); diff --git a/src/providers/sources/vidsrcsu.ts b/src/providers/sources/vidsrcsu.ts index 21bcbfb..2e6b2d7 100644 --- a/src/providers/sources/vidsrcsu.ts +++ b/src/providers/sources/vidsrcsu.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import { flags } from '@/entrypoint/utils/targets'; import { SourcererEmbed, SourcererOutput, makeSourcerer } from '@/providers/base'; import { MovieScrapeContext, ShowScrapeContext } from '@/utils/context'; @@ -7,12 +8,26 @@ async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promis const embedPage = await ctx.proxiedFetcher( `https://vidsrc.su/embed/${ctx.media.type === 'movie' ? `movie/${ctx.media.tmdbId}` : `tv/${ctx.media.tmdbId}/${ctx.media.season.number}/${ctx.media.episode.number}`}`, ); + + const decodedPeterMatch = embedPage.match(/decodeURIComponent\('([^']+)'\)/); + const decodedPeterUrl = decodedPeterMatch ? decodeURIComponent(decodedPeterMatch[1]) : null; + const serverMatches = [...embedPage.matchAll(/label: 'Server (\d+)', url: '(https.*)'/g)]; const servers = serverMatches.map((match) => ({ serverNumber: parseInt(match[1], 10), url: match[2], })); + + if (decodedPeterUrl) { + servers.push({ + serverNumber: 12, + url: decodedPeterUrl, + }); + } + + console.log(servers); + ctx.progress(60); if (!servers.length) throw new NotFoundError('No server playlist found'); @@ -29,7 +44,7 @@ async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promis } export const vidsrcsuScraper = makeSourcerer({ id: 'vidsrcsu', - name: 'vidsrc.su (FlixHQ)', + name: 'vidsrc.su', rank: 140, flags: [flags.CORS_ALLOWED], scrapeMovie: comboScraper,