diff --git a/src/providers/all.ts b/src/providers/all.ts index 33af334..90903a6 100644 --- a/src/providers/all.ts +++ b/src/providers/all.ts @@ -12,6 +12,7 @@ import { upcloudScraper } from '@/providers/embeds/upcloud'; import { upstreamScraper } from '@/providers/embeds/upstream'; import { vidsrcembedScraper } from '@/providers/embeds/vidsrc'; import { vTubeScraper } from '@/providers/embeds/vtube'; +import { autoembedScraper } from '@/providers/sources/autoembed'; import { flixhqScraper } from '@/providers/sources/flixhq/index'; import { goMoviesScraper } from '@/providers/sources/gomovies/index'; import { insertunitScraper } from '@/providers/sources/insertunit'; @@ -24,6 +25,13 @@ import { tugaflixScraper } from '@/providers/sources/tugaflix'; import { vidsrcScraper } from '@/providers/sources/vidsrc/index'; import { zoechipScraper } from '@/providers/sources/zoechip'; +import { + autoembedBengaliScraper, + autoembedEnglishScraper, + autoembedHindiScraper, + autoembedTamilScraper, + autoembedTeluguScraper, +} from './embeds/autoembed'; import { bflixScraper } from './embeds/bflix'; import { closeLoadScraper } from './embeds/closeload'; import { fileMoonScraper } from './embeds/filemoon'; @@ -78,6 +86,7 @@ export function gatherAllSources(): Array { insertunitScraper, nitesScraper, soaperTvScraper, + autoembedScraper, tugaflixScraper, ]; } @@ -117,5 +126,10 @@ export function gatherAllEmbeds(): Array { bflixScraper, playm4uNMScraper, hydraxScraper, + autoembedEnglishScraper, + autoembedHindiScraper, + autoembedBengaliScraper, + autoembedTamilScraper, + autoembedTeluguScraper, ]; } diff --git a/src/providers/embeds/autoembed.ts b/src/providers/embeds/autoembed.ts new file mode 100644 index 0000000..50d153a --- /dev/null +++ b/src/providers/embeds/autoembed.ts @@ -0,0 +1,54 @@ +import { flags } from '@/entrypoint/utils/targets'; +import { makeEmbed } from '@/providers/base'; + +const providers = [ + { + id: 'autoembed-english', + rank: 10, + }, + { + id: 'autoembed-hindi', + rank: 9, + }, + { + id: 'autoembed-tamil', + rank: 8, + }, + { + id: 'autoembed-telugu', + rank: 7, + }, + { + id: 'autoembed-bengali', + rank: 6, + }, +]; + +function embed(provider: { id: string; rank: number }) { + return makeEmbed({ + id: provider.id, + name: provider.id.charAt(0).toUpperCase() + provider.id.slice(1), + rank: provider.rank, + async scrape(ctx) { + return { + stream: [ + { + id: 'primary', + type: 'hls', + playlist: ctx.url, + flags: [flags.CORS_ALLOWED], + captions: [], + }, + ], + }; + }, + }); +} + +export const [ + autoembedEnglishScraper, + autoembedHindiScraper, + autoembedBengaliScraper, + autoembedTamilScraper, + autoembedTeluguScraper, +] = providers.map(embed); diff --git a/src/providers/sources/autoembed.ts b/src/providers/sources/autoembed.ts new file mode 100644 index 0000000..1aa4796 --- /dev/null +++ b/src/providers/sources/autoembed.ts @@ -0,0 +1,45 @@ +import { flags } from '@/entrypoint/utils/targets'; +import { SourcererEmbed, SourcererOutput, makeSourcerer } from '@/providers/base'; +import { MovieScrapeContext, ShowScrapeContext } from '@/utils/context'; +import { NotFoundError } from '@/utils/errors'; + +const baseUrl = 'https://autoembed.cc/'; + +async function comboScraper(ctx: ShowScrapeContext | MovieScrapeContext): Promise { + const playerPage = await ctx.proxiedFetcher(`/embed/player.php`, { + baseUrl, + query: { + id: ctx.media.tmdbId, + ...(ctx.media.type === 'show' && { + s: ctx.media.season.number.toString(), + e: ctx.media.episode.number.toString(), + }), + }, + }); + + const fileDataMatch = playerPage.match(/"file": (\[.*?\])/s); + if (!fileDataMatch[1]) throw new NotFoundError('No data found'); + + const fileData: { title: string; file: string }[] = JSON.parse(fileDataMatch[1].replace(/,\s*\]$/, ']')); + + const embeds: SourcererEmbed[] = []; + + for (const stream of fileData) { + const url = stream.file; + if (!url) continue; + embeds.push({ embedId: `autoembed-${stream.title.toLowerCase().trim()}`, url }); + } + + return { + embeds, + }; +} + +export const autoembedScraper = makeSourcerer({ + id: 'autoembed', + name: 'Autoembed', + rank: 10, + flags: [flags.CORS_ALLOWED], + scrapeMovie: comboScraper, + scrapeShow: comboScraper, +});