diff --git a/index.js b/index.js index e435d99..11e22a4 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,5 @@ import express from "express"; -import { getvmovie, getvserie } from "./src/vidsrcto.js"; - +import { getvmovie } from "./src/vidsrcpro.js"; const port = 3000; @@ -8,7 +7,7 @@ const app = express() app.get('/', (req, res) => { res.status(200).json({ - intro: "Welcome to the unofficial vidsrc provider: check the provider website @ https://vidsrc.cc/ ", + intro: "Welcome to the unofficial vidsrcPro provider", routes: { movie: "/vidsrc/:movieTMDBid", show: "/vidsrc/:showTMDBid?s=seasonNumber&e=episodeNumber" @@ -24,7 +23,7 @@ app.get('/vidsrc/:tmdbId', async (req, res) => { try { if (season && episode) { - const vidsrcresponse = await getvserie(id, season, episode); + const vidsrcresponse = await getvmovie(id, season, episode); res.status(200).json(vidsrcresponse); } else { const vidsrcresponse = await getvmovie(id); diff --git a/src/vidsrcpro.js b/src/vidsrcpro.js new file mode 100644 index 0000000..9ad7b0d --- /dev/null +++ b/src/vidsrcpro.js @@ -0,0 +1,264 @@ +export async function getvmovie(tmdb_id, s, e) { + const PROVIDER = 'ZVidsrcPro'; + const DOMAIN = "https://embed.su"; + const headers = { + 'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + 'Referer': "https://embed.su/", + 'Origin': "https://embed.su", + }; + + try { + let urlSearch = ''; + + if(s && e){ + urlSearch = `${DOMAIN}/embed/tv/${tmdb_id}/${s}/${e}`; + } else { + urlSearch = `${DOMAIN}/embed/movie/${tmdb_id}`; + } + + log({ urlSearch: urlSearch }, PROVIDER, 'URLSEARCH'); + + const htmlSearch = await fetch(urlSearch, { + method: 'GET', + headers: headers, + }); + const textSearch = await htmlSearch.text(); + + const hashEncodeMatch = textSearch.match(/JSON\.parse\(atob\(\`([^\`]+)/i); + const hashEncode = hashEncodeMatch ? hashEncodeMatch[1] : ""; + + if (!hashEncode) { + return; + } + + const hashDecode = JSON.parse(await string_atob(hashEncode)); + + const mEncrypt = hashDecode.hash; + if (!mEncrypt) { + return; + } + + const firstDecode = (await string_atob(mEncrypt)).split(".").map(item => item.split("").reverse().join("")); + const secondDecode = JSON.parse(await string_atob(firstDecode.join("").split("").reverse().join(""))); + + if (!secondDecode || secondDecode.length == 0) { + return; + } + + for (let i = 0; i < secondDecode.length; i++) { + const item = secondDecode[i]; + if (item.name.toLowerCase() != "viper") { + continue; + } + + const urlDirect = `${DOMAIN}/api/e/${item.hash}`; + const dataDirect = await request_get(urlDirect, { + 'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + }, false); + + if (!dataDirect.source) { + continue; + } + + const tracks = []; + try { + for (let j = 0; j < dataDirect.subtitles.length; j++) { + const itemTrack = dataDirect.subtitles[j]; + const labelMatch = itemTrack.label.match(/^([A-z]+)/i); + const label = labelMatch ? labelMatch[1] : ""; + if (!label) { + continue; + } + tracks.push({ + url: itemTrack.file, + lang: label + }); + } + } catch (etrack) { } + + const requestDirectSize = await fetch(dataDirect.source, { + headers: { + "Referer": "https://embed.su/", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + "Accept": "*/*" + }, + method: "GET", + }); + const parseRequest = await requestDirectSize.text(); + + const patternSize = []; + const parseDirectSize = parseRequest.split('\n'); + + for (let k = 0; k < parseDirectSize.length; k++) { + const item = parseDirectSize[k]; + if (item.indexOf('/proxy/') == -1) { + continue; + } + patternSize.push(item); + } + + const directQuality = []; + for (let l = 0; l < patternSize.length; l++) { + const patternItem = patternSize[l]; + const sizeQualityMatch = patternItem.match(/\/([0-9]+)\//i); + const sizeQuality = sizeQualityMatch ? Number(sizeQualityMatch[1]) : 1080; + let dURL = `${DOMAIN}${patternItem}`; + dURL = dURL.replace("embed.su/api/proxy/viper/", ""); + dURL = dURL.replace(".png", ".m3u8"); + directQuality.push({ + url: dURL, + quality: sizeQuality.toString(), + isM3U8: true + }); + } + + if (!directQuality.length) { + continue; + } + + directQuality.sort((a, b) => b.quality - a.quality); + + const results = { + headers: { + "Referer": "https://embed.su/", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", + "Accept": "*/*" + }, + sources: directQuality, + subtitles: tracks + }; + + return results; + } + } catch (e) { + log({ e: e }, PROVIDER, "ERROR"); + } +} + +function log(data, prefix, subfix) { + console.log(data, "----- ".concat(prefix, " ").concat(subfix, " ----")); +}; + +async function string_atob(input) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var str = input.replace(/=+$/, ''); + var output = ''; + if (str.length % 4 == 1) { + throw new Error("'atob' failed: The string to be decoded is not correctly encoded."); + } + for (var bc = 0, bs = 0, buffer = void 0, i = 0; buffer = str.charAt(i++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, + bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) { + buffer = chars.indexOf(buffer); + } + return output; +} + +async function request_get(url, headers = {}) { + try { + headers = headers || {}; + if (!headers['user-agent']) { + headers['user-agent'] = getRandomUserAgent(); + } + + const response = await fetch(url, { + method: 'GET', + headers: headers, + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + + return data; + } catch (error) { + return ""; + } +} + +function getRandomUserAgent() { + var userAgent = [ + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36" + ]; + var random = _.random(0, userAgent.length - 1); + return userAgent[random]; +} \ No newline at end of file diff --git a/src/vidsrcto.js b/src/vidsrcto.js deleted file mode 100644 index 88960da..0000000 --- a/src/vidsrcto.js +++ /dev/null @@ -1,90 +0,0 @@ -const HOST = 'vidsrc.cc'; - -async function episode(data_id_1, data_id_2, type, s, e) { - if (type == 'movie') { - const url = `https://${HOST}/api/episodes/${data_id_2}/servers?id=${data_id_1}&type=${type}`; - let resp = await (await fetch(url)).json(); - let id1 = resp['data'][0]['hash']; - let id2 = resp['data'][1]['hash']; - const url1 = `https://${HOST}/api/source/${id1}`; - console.log(url1); - const resp1 = await (await fetch(url1)).json(); - const url2 = `https://${HOST}/api/source/${id2}`; - console.log(url2); - const resp2 = await (await fetch(url2)).json(); - const result_1 = { - source1: resp1 - }; - const result_2 = { - source2: resp2 - }; - const combinedResponse = { ...result_1, ...result_2 }; - console.log(`combinedResponse : ${JSON.stringify(combinedResponse, null, 2)}`); - return combinedResponse; - }; - - if (type == 'tv') { - const url = `https://${HOST}/api/episodes/${data_id_2}/servers?id=${data_id_1}&type=tv&season=${s}&episode=${e}`; - console.log(url); - let resp = await (await fetch(url)).json(); - let id1 = resp['data'][0]['hash']; - let id2 = resp['data'][1]['hash']; - const url1 = `https://${HOST}/api/source/${id1}`; - console.log(url1); - const resp1 = await (await fetch(url1)).json(); - const url2 = `https://${HOST}/api/source/${id2}`; - console.log(url2); - const resp2 = await (await fetch(url2)).json(); - const result_1 = { - source1: resp1 - }; - const result_2 = { - source2: resp2 - }; - const combinedResponse = { ...result_1, ...result_2 }; - console.log(`combinedResponse : ${JSON.stringify(combinedResponse, null, 2)}`); - return combinedResponse; - } - -} - -export async function getvmovie(id) { - console.log(`https://${HOST}/v2/embed/movie/${id}`); - let resp = await (await fetch(`https://${HOST}/v2/embed/movie/${id}`)).text(); - - let regex = /data-id="(.*?)"/g; - let matches = []; - let match; - - while ((match = regex.exec(resp)) !== null) { - matches.push(match[1]); - } - - if (matches.length >= 2) { - let data_id_1 = matches[0]; - let data_id_2 = matches[1]; - return await episode(data_id_1, data_id_2, 'movie'); - } else { - throw new Error("Failed to find two data-id values in response."); - } -} - -export async function getvserie(id, s, e) { - console.log(`https://${HOST}/v2/embed/tv/${id}/${s}/${e}`); - let resp = await (await fetch(`https://${HOST}/v2/embed/tv/${id}/${s}/${e}`)).text(); - let regex = /data-id="(.*?)"/g; - let matches = []; - let match; - - while ((match = regex.exec(resp)) !== null) { - matches.push(match[1]); - } - - if (matches.length >= 2) { - let data_id_1 = matches[0]; - let data_id_2 = matches[1]; - return await episode(data_id_1, data_id_2, 'tv', s, e); - } else { - throw new Error("Failed to find two data-id values in response."); - } -} \ No newline at end of file