Add Autoembed source and split its languages into embeds

This commit is contained in:
TPN 2024-06-06 20:51:13 +05:30
parent b5a212ab19
commit a0d4cb8243
No known key found for this signature in database
GPG key ID: 40AE091637892B91
7 changed files with 138 additions and 0 deletions

View file

@ -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,11 @@ import { tugaflixScraper } from '@/providers/sources/tugaflix';
import { vidsrcScraper } from '@/providers/sources/vidsrc/index';
import { zoechipScraper } from '@/providers/sources/zoechip';
import { autoembedBenagaliScraper } from './embeds/autoembed/bengali';
import { autoembedEnglishScraper } from './embeds/autoembed/english';
import { autoembedHindiScraper } from './embeds/autoembed/hindi';
import { autoembedTamilScraper } from './embeds/autoembed/tamil';
import { autoembedTeluguScraper } from './embeds/autoembed/telugu';
import { bflixScraper } from './embeds/bflix';
import { closeLoadScraper } from './embeds/closeload';
import { fileMoonScraper } from './embeds/filemoon';
@ -78,6 +84,7 @@ export function gatherAllSources(): Array<Sourcerer> {
insertunitScraper,
nitesScraper,
soaperTvScraper,
autoembedScraper,
tugaflixScraper,
];
}
@ -117,5 +124,10 @@ export function gatherAllEmbeds(): Array<Embed> {
bflixScraper,
playm4uNMScraper,
hydraxScraper,
autoembedEnglishScraper,
autoembedHindiScraper,
autoembedBenagaliScraper,
autoembedTamilScraper,
autoembedTeluguScraper,
];
}

View file

@ -0,0 +1,15 @@
import { makeEmbed } from '@/providers/base';
import { autoembedEnglishScraper } from './english';
export const autoembedBenagaliScraper = makeEmbed({
id: 'autoembed-bengali',
name: 'Bengali',
rank: 7,
async scrape(ctx) {
const result = await autoembedEnglishScraper.scrape(ctx);
return {
stream: result.stream,
};
},
});

View file

@ -0,0 +1,21 @@
import { flags } from '@/entrypoint/utils/targets';
import { makeEmbed } from '@/providers/base';
export const autoembedEnglishScraper = makeEmbed({
id: 'autoembed-english',
name: 'English',
rank: 10,
scrape: async (ctx) => {
return {
stream: [
{
id: 'primary',
type: 'hls',
playlist: ctx.url,
flags: [flags.CORS_ALLOWED],
captions: [],
},
],
};
},
});

View file

@ -0,0 +1,15 @@
import { makeEmbed } from '@/providers/base';
import { autoembedEnglishScraper } from './english';
export const autoembedHindiScraper = makeEmbed({
id: 'autoembed-hindi',
name: 'Hindi',
rank: 9,
async scrape(ctx) {
const result = await autoembedEnglishScraper.scrape(ctx);
return {
stream: result.stream,
};
},
});

View file

@ -0,0 +1,15 @@
import { makeEmbed } from '@/providers/base';
import { autoembedEnglishScraper } from './english';
export const autoembedTamilScraper = makeEmbed({
id: 'autoembed-tamil',
name: 'Tamil',
rank: 8,
async scrape(ctx) {
const result = await autoembedEnglishScraper.scrape(ctx);
return {
stream: result.stream,
};
},
});

View file

@ -0,0 +1,15 @@
import { makeEmbed } from '@/providers/base';
import { autoembedEnglishScraper } from './english';
export const autoembedTeluguScraper = makeEmbed({
id: 'autoembed-telugu',
name: 'Telugu',
rank: 6,
async scrape(ctx) {
const result = await autoembedEnglishScraper.scrape(ctx);
return {
stream: result.stream,
};
},
});

View file

@ -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<SourcererOutput> {
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,
});