dockjss / web-content /services /..peliplusService.test.js
franyer24's picture
Upload 1895 files
2e178e3 verified
Raw
History Blame Contribute Delete
4.58 kB
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 };