From 9da5f0fc69e332224840fe0b1a09d5b97f883e21 Mon Sep 17 00:00:00 2001 From: kodjomoustapha <107993382+kodjodevf@users.noreply.github.com> Date: Sun, 13 Oct 2024 18:32:23 +0100 Subject: [PATCH] New source: NetflixMirror (ALL) --- .../anime/all/netflixmirror/netflixmirror.js | 193 ++++++++++++++++++ javascript/icon/all.netflixmirror.png | Bin 0 -> 13305 bytes 2 files changed, 193 insertions(+) create mode 100644 javascript/anime/all/netflixmirror/netflixmirror.js create mode 100644 javascript/icon/all.netflixmirror.png diff --git a/javascript/anime/all/netflixmirror/netflixmirror.js b/javascript/anime/all/netflixmirror/netflixmirror.js new file mode 100644 index 00000000..f034bade --- /dev/null +++ b/javascript/anime/all/netflixmirror/netflixmirror.js @@ -0,0 +1,193 @@ +const mangayomiSources = [{ + "name": "NetflixMirror", + "lang": "all", + "baseUrl": "https://iosmirror.cc", + "apiUrl": "", + "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/all.netflixmirror.png", + "typeSource": "single", + "isManga": false, + "version": "0.0.1", + "dateFormat": "", + "dateFormatLocale": "", + "pkgPath": "anime/src/all/netflixmirror.js" +}]; + +class DefaultExtension extends MProvider { + async request(url) { + const baseUrl = this.source.baseUrl; + const body = (await new Client().get(baseUrl + url, { "hd": "on" })).body + if (body.includes("Just verify you're a human, Just click to below box, Without verification you can't access this app.")) { + throw new Error("reCAPTCHA ERROR:\nOpen webview and just verify you're a human, Without verification you can't access to contents."); + } + return body; + } + async getPopular(page) { + return await this.getPages(await this.request("/home"), ".tray-container, #top10") + } + async getLatestUpdates(page) { + return await this.getPages(await this.request("/home"), ".inner-mob-tray-container") + } + async getPages(body, selector) { + const elements = new Document(body).select(selector); + const list = []; + for (const element of elements) { + const linkElement = element.selectFirst("article, .top10-post"); + const id = linkElement.selectFirst("a").attr("data-post"); + if (id.length > 0) { + const imageUrl = linkElement.selectFirst(".card-img-container img, .top10-img img").attr("data-src"); + list.push({ name: JSON.parse(await this.request(`/post.php?id=${id}`)).title, imageUrl, link: id }); + } + } + return { + list: list, + hasNextPage: false + } + } + async search(query, page, filters) { + const data = JSON.parse(await this.request(`/search.php?s=${query}`)); + const list = []; + data.searchResult.map(async (res) => { + const id = res.id; + list.push({ name: res.t, imageUrl: `https://img.nfmirrorcdn.top/poster/v/${id}.jpg`, link: id }); + }) + + return { + list: list, + hasNextPage: false + } + } + async getDetail(url) { + const data = JSON.parse(await this.request(`/post.php?id=${url}`)); + const name = data.title; + const genre = [data.ua, ...(data.genre || '').split(',').map(g => g.trim())]; + const description = data.desc; + let episodes = []; + if (data.episodes[0] === null) { + episodes.push({ name, url }); + } else { + episodes = data.episodes.map(ep => ({ + name: `${ep.s.replace('S', 'Season ')} ${ep.ep.replace('E', 'Episode ')} : ${ep.t}`, + url: JSON.stringify({ id: ep.id, name }) + })); + } + if (data.nextPageShow === 1) { + const eps = await this.getEpisodes(name, url, data.nextPageSeason, 2); + episodes.push(...eps); + } + episodes.reverse(); + if (data.season && data.season.length > 1) { + let newEpisodes = []; + const seasonsToProcess = data.season.slice(0, -1); + await Promise.all(seasonsToProcess.map(async (season) => { + const eps = await this.getEpisodes(name, url, season.id, 1); + newEpisodes.push(...eps); + })); + newEpisodes.reverse(); + episodes.push(...newEpisodes); + + } + + return { + description, status: 1, genre, episodes + }; + } + async getEpisodes(name, eid, sid, page) { + const episodes = []; + let pg = page; + while (true) { + try { + const data = JSON.parse(await this.request(`/episodes.php?s=${sid}&series=${eid}&page=${pg}`)); + + data.episodes?.forEach(ep => { + episodes.push({ + name: `${ep.s.replace('S', 'Season ')} ${ep.ep.replace('E', 'Episode ')} : ${ep.t}`, + url: JSON.stringify({ id: ep.id, name }) + }); + }); + + if (data.nextPageShow === 0) break; + pg++; + } catch (_) { + break; + } + } + + return episodes; + } + + + async getVideoList(url) { + const baseUrl = this.source.baseUrl; + const urlData = JSON.parse(url); + const data = JSON.parse(await this.request(`/playlist.php?id=${urlData.id}&t=${urlData.name}`)); + const videoList = []; + for (const playlist of data) { + for (const source of playlist.sources) { + try { + const subtitles = []; + playlist.tracks.filter(track => track.kind === 'captions').forEach(track => { + subtitles.push({ + label: track.label, + url: track.file + }); + }); + const link = baseUrl + source.file; + const headers = + { + 'Host': link.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/)[1], + 'Origin': baseUrl, + 'Referer': `${baseUrl}/` + }; + const resp = await new Client().get(link, headers); + + if (resp.statusCode === 200) { + const masterPlaylist = resp.body; + const audios = []; + masterPlaylist.substringAfter('#EXT-X-MEDIA:').split('#EXT-X-MEDIA:').forEach(it => { + if (it.includes('TYPE=AUDIO')) { + const audioInfo = it.substringAfter('TYPE=AUDIO').substringBefore('\n'); + const language = audioInfo.substringAfter('NAME="').substringBefore('"'); + const url = audioInfo.substringAfter('URI="').substringBefore('"'); + audios.push({ file: url, label: language }); + } + }); + + if (!masterPlaylist.includes('#EXT-X-STREAM-INF:')) { + if (audios.length === 0) { + videoList.push({ url: link, quality: source.label, originalUrl: link, subtitles, headers }); + } else { + videoList.push({ url: link, quality: source.label, originalUrl: link, subtitles, audios, headers }); + } + } else { + masterPlaylist.substringAfter('#EXT-X-STREAM-INF:').split('#EXT-X-STREAM-INF:').forEach(it => { + + const quality = `${it.substringAfter('RESOLUTION=').substringAfter('x').substringBefore(',')}p (${source.label})`; + let videoUrl = it.substringAfter('\n').substringBefore('\n'); + + if (!videoUrl.startsWith('http')) { + videoUrl = resp.request.url.substringBeforeLast('/') + `/${videoUrl}`; + } + const headers = + { + 'Host': videoUrl.match(/^(?:https?:\/\/)?(?:www\.)?([^\/]+)/)[1], + 'Origin': baseUrl, + 'Referer': `${baseUrl}/` + }; + if (audios.length === 0) { + videoList.push({ url: videoUrl, quality, originalUrl: videoUrl, subtitles, headers }); + } else { + videoList.push({ url: videoUrl, quality, originalUrl: videoUrl, subtitles, audios, headers }); + } + + }); + } + } + } catch (_) { + + } + } + } + return videoList; + } + +} \ No newline at end of file diff --git a/javascript/icon/all.netflixmirror.png b/javascript/icon/all.netflixmirror.png new file mode 100644 index 0000000000000000000000000000000000000000..8731c37da0f58dafa70f2da194b6176b9911a467 GIT binary patch literal 13305 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 DfJv_& literal 0 HcmV?d00001