selfdebrid/extractors/streamtape.js

87 lines
3.1 KiB
JavaScript

const axios = require("axios");
const cheerio = require("cheerio");
const lib = require("../lib");
module.exports = {
get: get,
hostnames: ["streamtape.com"],
tests: []
}
async function get(url, options) {
url = url.replace("/v/", "/e/");
lib.log(`streamtape`, `Fetching page...`, [], true, options);
let headers = lib.defaultHeaders;
headers["Referer"] = "https://google.com/";
headers["Sec-Fetch-Dest"] = "iframe";
headers["Sec-Fetch-Mode"] = "navigate";
headers["Sec-Fetch-Site"] = "cross-site";
delete headers["Sec-Fetch-User"];
lib.log(`streamtape`, `Headers:`, [headers], false, options);
let resp = await axios({
url: url,
headers: lib.defaultHeaders
});
lib.log(`streamtape`, `Parsing page...`);
let $ = cheerio.load(resp.data);
let stream;
lib.log(`streamtape`, `Decoding stream link...`, [], true, options);
for (let i in $("script")) {
if ($("script")?.[i]?.children?.[0]?.data) {
if (typeof stream == "string" && stream !== "" && stream !== " ") continue;
stream = $("script")?.[i]?.children?.[0]?.data.split(`robotlink`).slice(1).join(`robotlink`).slice(1).split(`.innerHTML = `).slice(1).join(`.innerHTML = `); // getting just the correct html
if (stream == `` || stream == ` ` || stream == undefined) continue;
stream = stream.split(` `).join(``).split(`'`).join(``).split(`+`).join(``).split(`\n`).join(``).split(`\t`).join(``); // removing formatting from script
stream = stream.split(`(xcd`).join(``); // removing attempts at preventing scraping
stream = stream.split(`)`).slice(0, 1).join(``); // removing attempts at preventing scraping
stream = `https:${stream}&stream=1`
lib.log(`streamtape`, `Decoded stream link:`, [stream]);
} else continue;
}
lib.log(`streamtape`, `Fetching real stream link (via redirect)...`);
try {
resp = await axios({
url: stream,
headers: {
"Accept": "video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5",
"Referer": url,
"Sec-Fetch-Dest": "video",
"Sec-Fetch-Mode": "no-cors",
"Sec-Fetch-Site": "cross-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0"
},
maxRedirects: 0
});
throw new Error("Redirect was not found.");
} catch(err) {
if (err?.response?.headers?.location) {
let dlLink = err?.response?.headers?.location;
let dlName = decodeURIComponent(dlLink.split(`/`)[dlLink.split(`/`).length - 1].split(`+`).join(` `).split(`-`).join(` `).split(`?`)[0]);
return {
axiosData: {
headers: {
"Accept": "video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5",
"Referer": url,
"Sec-Fetch-Dest": "video",
"Sec-Fetch-Mode": "no-cors",
"Sec-Fetch-Site": "cross-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0"
},
url: dlLink
},
metadata: {
fileName: dlName
}
}
} else throw err;
}
}