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