| 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);
|
|
|
|
|
| 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;
|
| }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
|
|
| module.exports = { getStreamsFromPeliplus };
|
|
|