HerzaJ commited on
Commit
c1b12e3
·
verified ·
1 Parent(s): 20ce9ba

Delete plugins/flixer.js

Browse files
Files changed (1) hide show
  1. plugins/flixer.js +0 -158
plugins/flixer.js DELETED
@@ -1,158 +0,0 @@
1
- const puppeteer = require('puppeteer');
2
-
3
- const scrapeFlixer = async (searchQuery) => {
4
- const browser = await puppeteer.launch({
5
- headless: true,
6
- args: [
7
- '--no-sandbox',
8
- '--disable-setuid-sandbox',
9
- '--disable-dev-shm-usage',
10
- '--disable-gpu'
11
- ]
12
- });
13
-
14
- const page = await browser.newPage();
15
-
16
- await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
17
-
18
- const searchUrl = `https://flixer.sh/search?q=${encodeURIComponent(searchQuery)}`;
19
- await page.goto(searchUrl, { waitUntil: 'networkidle0', timeout: 30000 });
20
-
21
- await new Promise(resolve => setTimeout(resolve, 2000));
22
-
23
- const searchResults = await page.evaluate(() => {
24
- const results = [];
25
- const images = document.querySelectorAll('img[alt]');
26
-
27
- images.forEach(img => {
28
- const link = img.closest('a');
29
- if (link && img.alt) {
30
- results.push({
31
- title: img.alt,
32
- image: img.src,
33
- url: link.href
34
- });
35
- }
36
- });
37
-
38
- return results;
39
- });
40
-
41
- if (searchResults.length === 0) {
42
- await browser.close();
43
- throw new Error('No results found');
44
- }
45
-
46
- const movieUrl = searchResults[0].url;
47
- await page.goto(movieUrl, { waitUntil: 'networkidle0', timeout: 30000 });
48
-
49
- await new Promise(resolve => setTimeout(resolve, 3000));
50
-
51
- const servers = await page.evaluate(() => {
52
- const serverList = [];
53
- const buttons = document.querySelectorAll('button');
54
-
55
- buttons.forEach(btn => {
56
- const nameEl = btn.querySelector('.font-medium');
57
- const statusEl = btn.querySelector('.text-green-400');
58
-
59
- if (nameEl && statusEl && statusEl.textContent.includes('AVAILABLE')) {
60
- serverList.push({
61
- name: nameEl.textContent.trim(),
62
- available: true
63
- });
64
- }
65
- });
66
-
67
- return serverList;
68
- });
69
-
70
- let videoUrl = null;
71
-
72
- page.on('response', async response => {
73
- const url = response.url();
74
- if (url.includes('.m3u8') || url.includes('.mp4') || url.includes('stream')) {
75
- videoUrl = url;
76
- }
77
- });
78
-
79
- for (const server of servers) {
80
- try {
81
- await page.evaluate((serverName) => {
82
- const buttons = Array.from(document.querySelectorAll('button'));
83
- const btn = buttons.find(b => {
84
- const nameEl = b.querySelector('.font-medium');
85
- return nameEl && nameEl.textContent.trim() === serverName;
86
- });
87
- if (btn) btn.click();
88
- }, server.name);
89
-
90
- await new Promise(resolve => setTimeout(resolve, 5000));
91
-
92
- const currentVideoUrl = await page.evaluate(() => {
93
- const video = document.querySelector('video');
94
- return video ? video.src : null;
95
- });
96
-
97
- if (currentVideoUrl && !currentVideoUrl.startsWith('blob:')) {
98
- videoUrl = currentVideoUrl;
99
- break;
100
- }
101
-
102
- if (videoUrl && !videoUrl.startsWith('blob:')) {
103
- break;
104
- }
105
- } catch (e) {
106
- continue;
107
- }
108
- }
109
-
110
- await browser.close();
111
-
112
- return {
113
- title: searchResults[0].title,
114
- image: searchResults[0].image,
115
- movieUrl: movieUrl,
116
- servers: servers,
117
- videoUrl: videoUrl,
118
- allResults: searchResults
119
- };
120
- };
121
-
122
- const handler = async (req, res) => {
123
- try {
124
- const { q } = req.query;
125
-
126
- if (!q) {
127
- return res.status(400).json({
128
- success: false,
129
- error: 'Missing required parameter: q'
130
- });
131
- }
132
-
133
- const result = await scrapeFlixer(q);
134
- res.json({
135
- author: "Herza",
136
- success: true,
137
- msg: result
138
- });
139
-
140
- } catch (error) {
141
- res.status(500).json({
142
- success: false,
143
- error: error.message
144
- });
145
- }
146
- };
147
-
148
- module.exports = {
149
- name: 'Flixer Search',
150
- description: 'Search and get video from Flixer',
151
- type: 'GET',
152
- routes: ['api/search/flixer'],
153
- tags: ['search', 'movie', 'tools'],
154
- parameters: ['q', 'key'],
155
- enabled: true,
156
- main: ['Downloader', 'Search'],
157
- handler
158
- };