From 193d769442f5cbc2d4671f20f3f77a1f52bfe0ed Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Thu, 7 Aug 2025 10:56:11 -0600 Subject: [PATCH] add RGShows thanks Lew! --- src/providers/all.ts | 2 ++ src/providers/sources/rgshows.ts | 53 ++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/providers/sources/rgshows.ts diff --git a/src/providers/all.ts b/src/providers/all.ts index 0dbd123..9ae41ef 100644 --- a/src/providers/all.ts +++ b/src/providers/all.ts @@ -69,6 +69,7 @@ import { iosmirrorScraper } from './sources/iosmirror'; import { iosmirrorPVScraper } from './sources/iosmirrorpv'; import { madplayScraper } from './sources/madplay'; import { nunflixScraper } from './sources/nunflix'; +import { rgshowsScraper } from './sources/rgshows'; import { ridooMoviesScraper } from './sources/ridomovies'; import { slidemoviesScraper } from './sources/slidemovies'; import { soaperTvScraper } from './sources/soapertv'; @@ -111,6 +112,7 @@ export function gatherAllSources(): Array { pirxcyScraper, vidsrcvipScraper, madplayScraper, + rgshowsScraper, ]; } diff --git a/src/providers/sources/rgshows.ts b/src/providers/sources/rgshows.ts new file mode 100644 index 0000000..9fba366 --- /dev/null +++ b/src/providers/sources/rgshows.ts @@ -0,0 +1,53 @@ +import { flags } from '@/entrypoint/utils/targets'; +import { MovieScrapeContext, ShowScrapeContext } from '@/utils/context'; +import { NotFoundError } from '@/utils/errors'; +import { createM3U8ProxyUrl } from '@/utils/proxy'; + +import { SourcererOutput, makeSourcerer } from '../base'; + +const baseUrl = 'api.rgshows.me'; +const headers = { + referer: 'https://rgshows.me/', + origin: 'https://rgshows.me', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', +}; + +async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promise { + let url = `https://${baseUrl}/main`; + + if (ctx.media.type === 'movie') { + url += `/movie/${ctx.media.tmdbId}`; + } else if (ctx.media.type === 'show') { + url += `/tv/${ctx.media.tmdbId}/${ctx.media.season.number}/${ctx.media.episode.number}`; + } + + const res = await ctx.proxiedFetcher(url, { headers }); + if (!res.stream.url) { + throw new NotFoundError('No streams found'); + } + + ctx.progress(100); + + return { + embeds: [], + stream: [ + { + id: 'primary', + type: 'hls', + playlist: createM3U8ProxyUrl(res.stream.url, headers), + flags: [flags.CORS_ALLOWED], + captions: [], + }, + ], + }; +} + +export const rgshowsScraper = makeSourcerer({ + id: 'rgshows', + name: 'RGShows', + rank: 173, + flags: [flags.CORS_ALLOWED], + scrapeMovie: comboScraper, + scrapeShow: comboScraper, +});