movie-web/src/lib/scraper/gomostream.js.disabled
2021-12-30 19:23:15 +00:00

91 lines
2.8 KiB
Plaintext

// THIS SCRAPER DOES NOT CURRENTLY WORK AND IS NOT IN USE
import { unpack } from '../util/unpacker';
const BASE_URL = `${process.env.REACT_APP_CORS_PROXY_URL}https://gomo.to`;
const MOVIE_URL = `${BASE_URL}/movie`
const DECODING_URL = `${BASE_URL}/decoding_v3.php`
async function findContent(searchTerm, type) {
try {
if (type !== 'movie') return;
const term = searchTerm.toLowerCase()
const imdbRes = await fetch(`${process.env.REACT_APP_CORS_PROXY_URL}https://v2.sg.media-imdb.com/suggestion/${term.slice(0, 1)}/${term}.json`).then(d => d.json())
const results = [];
imdbRes.d.forEach((e) => {
if (!e.id.startsWith('tt')) return;
// Block tv shows
if (e.q === "TV series") return;
if (e.q === "TV mini-series") return;
if (e.q === "video game") return;
if (e.q === "TV movie") return;
if (e.q === "TV special") return;
results.push({
title: e.l,
slug: e.id,
type: 'movie',
year: e.y,
source: 'gomostream'
})
});
if (results.length > 1) {
return { options: results };
} else {
return { options: [ results[0] ] }
}
} catch (err) {
console.error(err);
throw new Error(err)
}
}
async function getStreamUrl(slug, type, season, episode) {
if (type !== 'movie') return;
// Get stream to go with IMDB ID
const site1 = await fetch(`${MOVIE_URL}/${slug}`).then((d) => d.text());
if (site1 === "Movie not available.")
return { url: '' };
const tc = site1.match(/var tc = '(.+)';/)?.[1]
const _token = site1.match(/"_token": "(.+)",/)?.[1]
const fd = new FormData()
fd.append('tokenCode', tc)
fd.append('_token', _token)
const src = await fetch(DECODING_URL, {
method: "POST",
body: fd,
headers: {
'x-token': tc.slice(5, 13).split("").reverse().join("") + "13574199"
}
}).then((d) => d.json());
const embedUrl = src.find(url => url.includes('gomo.to'));
const site2 = await fetch(`${process.env.REACT_APP_CORS_PROXY_URL}${embedUrl}`).then((d) => d.text());
const parser = new DOMParser();
const site2Dom = parser.parseFromString(site2, "text/html");
if (site2Dom.body.innerText === "File was deleted")
return { url: '' }
const script = site2Dom.querySelectorAll("script")[8].innerHTML;
let unpacked = unpack(script).split('');
unpacked.splice(0, 43);
let index = unpacked.findIndex((e) => e === '"');
const url = unpacked.slice(0, index).join('');
return { url }
}
const gomostream = { findContent, getStreamUrl }
export default gomostream;