From 56c50fbb2f80242ec80b080d37a972f3e3792a92 Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Wed, 2 Nov 2022 11:25:21 +0000 Subject: [PATCH] Add flixhq provider Fully working movies provider, high quality m3u8 --- src/providers/list/flixhq/index.ts | 67 ++++++++++++++++++++++++++++++ src/providers/methods/providers.ts | 2 + 2 files changed, 69 insertions(+) create mode 100644 src/providers/list/flixhq/index.ts diff --git a/src/providers/list/flixhq/index.ts b/src/providers/list/flixhq/index.ts new file mode 100644 index 00000000..4c163322 --- /dev/null +++ b/src/providers/list/flixhq/index.ts @@ -0,0 +1,67 @@ +import { + MWMediaProvider, + MWMediaType, + MWPortableMedia, + MWMediaStream, + MWQuery, + MWProviderMediaResult +} from "providers/types"; + +import { CORS_PROXY_URL } from "mw_constants"; + +export const flixhqProvider: MWMediaProvider = { + id: "flixhq", + enabled: true, + type: [MWMediaType.MOVIE], + displayName: "flixhq", + + async getMediaFromPortable(media: MWPortableMedia): Promise { + const searchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/info?id=${media.mediaId}` + ).then((d) => d.json()); + + return { + ...media, + title: searchRes.title, + year: searchRes.releaseDate, + } as MWProviderMediaResult; + }, + + async searchForMedia(query: MWQuery): Promise { + const searchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/${query.searchQuery}` + ).then((d) => d.json()); + + const results: MWProviderMediaResult[] = (searchRes || []).results.map((item: any) => ({ + title: item.title, + year: item.releaseDate, + mediaId: item.id, + type: MWMediaType.MOVIE, + })); + + return results; + }, + + async getStream(media: MWPortableMedia): Promise { + const searchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/info?id=${media.mediaId}` + ).then((d) => d.json()); + + const params = new URLSearchParams({ + episodeId: searchRes.episodes[0].id, + mediaId: media.mediaId + }) + + const watchRes = await fetch( + `${CORS_PROXY_URL}https://api.consumet.org/movies/flixhq/watch?${encodeURIComponent(params.toString())}` + ).then((d) => d.json()); + + const source = watchRes.sources.reduce((p: any, c: any) => (c.quality > p.quality) ? c : p); + + return { + url: source.url, + type: source.isM3U8 ? "m3u8" : "mp4", + captions: [] + } as MWMediaStream; + }, +}; diff --git a/src/providers/methods/providers.ts b/src/providers/methods/providers.ts index 142f068b..1cabfbcc 100644 --- a/src/providers/methods/providers.ts +++ b/src/providers/methods/providers.ts @@ -3,12 +3,14 @@ import { gDrivePlayerScraper } from "providers/list/gdriveplayer"; import { MWWrappedMediaProvider, WrapProvider } from "providers/wrapper"; import { gomostreamScraper } from "providers/list/gomostream"; import { xemovieScraper } from "providers/list/xemovie"; +import { flixhqProvider } from "providers/list/flixhq"; export const mediaProvidersUnchecked: MWWrappedMediaProvider[] = [ WrapProvider(theFlixScraper), WrapProvider(gDrivePlayerScraper), WrapProvider(gomostreamScraper), WrapProvider(xemovieScraper), + WrapProvider(flixhqProvider), ]; export const mediaProviders: MWWrappedMediaProvider[] =