File size: 4,581 Bytes
2e178e3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | const axios = require('axios');
const cheerio = require('cheerio');
const { sanitizeTitle, sanitizeString, sanitize } = require('../utils/sanitize');
async function getStreamsFromPeliplus(movieData, options = {}) {
const { original_title, id, type } = movieData;
const { season = 1, episode = 1 } = options;
const sanitizedTitle = sanitizeTitle(original_title);
console.log('Sanitized Title:', sanitizedTitle);
const axiosInstance = axios.create({
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/91.0.4472.124 Safari/537.36'
}
});
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const searchUrl = `https://ww3.pelisplus.to/api/search/${sanitizedTitle}`;
let searchHtml;
try {
const response = await axiosInstance.get(searchUrl);
searchHtml = response.data;
} catch (error) {
console.error('Error fetching search results:', error);
throw new Error('No se pudieron obtener los resultados de búsqueda');
}
const $search = cheerio.load(searchHtml);console.log(searchHtml);
let selected = null;
const results = [];
const servers = $search('article.item.liste.relative').map((index, element) => {
const linkElement = $search(element).find('a.itemA');
const imageElement = $search(element).find('img');
const nameElement = $search(element).find('h2');
const link = linkElement.attr('href');
const image = imageElement.attr('data-src');
const name = nameElement.text().trim();
if (!link || !image || !name) {
console.warn('Elemento incompleto encontrado:', element);
return null;
}
const slug = link.split("/")[4];
if (!slug) {
console.warn('Slug no encontrado en el enlace:', link);
return null;
}
const detectedType = link.includes('pelicula') ? "movie" : "tv";
if (!detectedType) {
console.warn('Tipo de contenido no detectado:', link);
return null;
}
const item = { name, image, link, type: detectedType, slug };
if (!item.name || !item.image || !item.link || !item.type || !item.slug) {
console.warn('Item incompleto:', item);
return null;
}
const sanitizedName = sanitize(item.name);
console.log('Sanitized Name:', sanitizedName);
if (sanitizedName.includes(sanitize(original_title))) {
console.log('Coincidencia encontrada:', item);
selected = item;
}
return item;
}).get().filter(item => item !== null); // Filtrar elementos nulos
// Validar servers
if (servers.length === 0) {
console.warn('No se encontraron servidores válidos');
} else {
servers.forEach(server => {
console.log('Servidor encontrado:', server);
});
}
results.push(...servers);
if (!selected) {
console.log(selected, "\n", movieData, sanitize(original_title), sanitizedTitle);
throw new Error(`No se encontró una coincidencia exacta para el título: ${original_title}`);
}
return selected;
}
/*
// Extraer todos los elementos con data-server
const servers = $('[data-server]').map((index, el) => {
const servidorTexto = $(el).text().trim().split('\n')[0].split(" -")[0];
const dataServerRaw = $(el).attr('data-server');
for (const server of dataServerRaw) {
var resp = await axios.get("https://ww3.pelisplus.to/player/" + Buffer.from(server).toString('base64'));
var match = resp.data.match(regex1);
return {
opcion: index + 1,
servidor: servidorTexto,
data_server: "https://ww3.pelisplus.to/player/" + Buffer.from(dataServerRaw).toString('base64')
};
}).get(); */
// Extraer el data-tr del reproductor --ya no es necesario
/* const videoElement = $('[data-tr]').first();
const dataTrRaw = videoElement.attr('data-tr');
const dataTr = dataTrRaw ? "https://ww3.pelisplus.to/player/" + Buffer.from(dataTrRaw).toString('base64') : null;
// Resultado final
const resultado = {
data_tr: dataTr,
opciones: servers
}; */
//console.log(JSON.stringify(resultado, null, 2));
module.exports = { getStreamsFromPeliplus };
|