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 };