From b505336882f60bc935fe94470417bc80f14bc512 Mon Sep 17 00:00:00 2001 From: Isra Date: Wed, 27 Mar 2024 14:40:17 -0500 Subject: [PATCH] Add streamvid + voe --- src/providers/all.ts | 4 ++++ src/providers/embeds/streamvid.ts | 36 +++++++++++++++++++++++++++++++ src/providers/embeds/voe.ts | 30 ++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/providers/embeds/streamvid.ts create mode 100644 src/providers/embeds/voe.ts diff --git a/src/providers/all.ts b/src/providers/all.ts index dd372df..b98ab6f 100644 --- a/src/providers/all.ts +++ b/src/providers/all.ts @@ -23,8 +23,10 @@ import { fileMoonScraper } from './embeds/filemoon'; import { ridooScraper } from './embeds/ridoo'; import { smashyStreamDScraper } from './embeds/smashystream/dued'; import { smashyStreamFScraper } from './embeds/smashystream/video1'; +import { streamvidScraper } from './embeds/streamvid'; import { vidCloudScraper } from './embeds/vidcloud'; import { vidplayScraper } from './embeds/vidplay'; +import { voeScraper } from './embeds/voe'; import { wootlyScraper } from './embeds/wootly'; import { goojaraScraper } from './sources/goojara'; import { hdRezkaScraper } from './sources/hdrezka'; @@ -76,5 +78,7 @@ export function gatherAllEmbeds(): Array { vidplayScraper, wootlyScraper, doodScraper, + streamvidScraper, + voeScraper, ]; } diff --git a/src/providers/embeds/streamvid.ts b/src/providers/embeds/streamvid.ts new file mode 100644 index 0000000..ceb8810 --- /dev/null +++ b/src/providers/embeds/streamvid.ts @@ -0,0 +1,36 @@ +import * as unpacker from 'unpacker'; + +import { flags } from '@/entrypoint/utils/targets'; +import { makeEmbed } from '@/providers/base'; + +const packedRegex = /(eval\(function\(p,a,c,k,e,d\).*\)\)\))/; +const linkRegex = /src:"(https:\/\/[^"]+)"/; + +export const streamvidScraper = makeEmbed({ + id: 'streamvid', + name: 'Streamvid', + rank: 215, + async scrape(ctx) { + // Example url: https://streamvid.net/fu1jaf96vofx + const streamRes = await ctx.proxiedFetcher(ctx.url); + const packed = streamRes.match(packedRegex); + + if (!packed) throw new Error('streamvid packed not found'); + + const unpacked = unpacker.unpack(packed[1]); + const link = unpacked.match(linkRegex); + + if (!link) throw new Error('streamvid link not found'); + return { + stream: [ + { + type: 'hls', + id: 'primary', + playlist: link[1], + flags: [flags.CORS_ALLOWED], + captions: [], + }, + ], + }; + }, +}); diff --git a/src/providers/embeds/voe.ts b/src/providers/embeds/voe.ts new file mode 100644 index 0000000..dbb308a --- /dev/null +++ b/src/providers/embeds/voe.ts @@ -0,0 +1,30 @@ +import { flags } from '@/entrypoint/utils/targets'; +import { makeEmbed } from '@/providers/base'; + +const linkRegex = /'hls': ?'(http.*?)',/; + +export const voeScraper = makeEmbed({ + id: 'voe', + name: 'voe.sx', + rank: 180, + async scrape(ctx) { + const embed = await ctx.proxiedFetcher(ctx.url); + + const playerSrc = embed.match(linkRegex) ?? []; + + const streamUrl = playerSrc[1]; + if (!streamUrl) throw new Error('Stream url not found in embed code'); + + return { + stream: [ + { + type: 'hls', + id: 'primary', + playlist: streamUrl, + flags: [flags.CORS_ALLOWED], + captions: [], + }, + ], + }; + }, +});