You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.7 KiB
84 lines
2.7 KiB
// THIS SCRAPER DOES NOT CURRENTLY WORK AND IS NOT IN USE |
|
|
|
import { unpack } from '../util/unpacker'; |
|
|
|
const BASE_URL = `https://www.vmovee.watch`; |
|
const CORS_URL = `${process.env.REACT_APP_CORS_PROXY_URL}${BASE_URL}`; |
|
const SHOW_URL = `${CORS_URL}/series` |
|
const MOVIE_URL = `${CORS_URL}/movies` |
|
const MOVIE_URL_NO_CORS = `${BASE_URL}/movies` |
|
|
|
async function findContent(searchTerm, type) { |
|
try { |
|
if (type !== 'movie') return; |
|
|
|
const searchUrl = `${CORS_URL}/?s=${encodeURIComponent(searchTerm)}`; |
|
const searchRes = await fetch(searchUrl).then((d) => d.text()); |
|
|
|
const parser = new DOMParser(); |
|
const doc = parser.parseFromString(searchRes, "text/html"); |
|
const nodes = Array.from(doc.querySelectorAll('div.search-page > div.result-item > article')); |
|
const results = nodes.map(node => { |
|
const imgHolder = node.querySelector('div.image > div.thumbnail > a'); |
|
const titleHolder = node.querySelector('div.title > a'); |
|
|
|
return { |
|
type: imgHolder.querySelector('span').textContent === 'TV' ? 'show' : 'movie', |
|
title: titleHolder.textContent, |
|
year: node.querySelector('div.details > div.meta > span.year').textContent, |
|
slug: titleHolder.href.split('/')[4], |
|
source: 'vmovee' |
|
} |
|
}); |
|
|
|
if (results.length > 1) { |
|
return { options: results }; |
|
} else { |
|
return { options: [ results[0] ] } |
|
} |
|
} catch (err) { |
|
throw new Error(err) |
|
} |
|
} |
|
|
|
async function getStreamUrl(slug, type, season, episode) { |
|
let url = ''; |
|
|
|
if (type === 'movie') { |
|
url = `${MOVIE_URL}/${slug}`; |
|
} else if (type === 'show') { |
|
url = `${SHOW_URL}/${slug}`; |
|
} |
|
|
|
const res1 = await fetch(url, { headers: new Headers().append('referer', `${BASE_URL}/dashboard/admin-ajax.php`) }); |
|
const id = res1.headers.get('link').split('>')[0].split('?p=')[1]; |
|
|
|
const res2Headers = new Headers().append('referer', `${BASE_URL}/dashboard/admin-ajax.php`); |
|
const form = new FormData(); |
|
form.append('action', 'doo_player_ajax') |
|
form.append('post', id) |
|
form.append('nume', '2') |
|
form.append('type', type) |
|
|
|
const res2 = await fetch(`${CORS_URL}/dashboard/admin-ajax.php`, { |
|
method: 'POST', |
|
headers: res2Headers, |
|
body: form |
|
}).then((res) => res.json()); |
|
let realUrl = res2.embed_url; |
|
|
|
console.log(res2) |
|
|
|
if (realUrl.startsWith('//')) { |
|
realUrl = `https:${realUrl}`; |
|
} |
|
|
|
const res3 = await fetch(`${process.env.REACT_APP_CORS_PROXY_URL}${realUrl}`); |
|
res3.headers.forEach(console.log) |
|
|
|
return { url: '' } |
|
|
|
} |
|
|
|
const vmovee = { findContent, getStreamUrl } |
|
export default vmovee; |