Spaces:
Paused
Paused
Update server.js
Browse files
server.js
CHANGED
|
@@ -38,12 +38,12 @@ app.get("/search", async (req, res) => {
|
|
| 38 |
|
| 39 |
try {
|
| 40 |
console.log(`Searching for: ${movieName}`);
|
| 41 |
-
await page.goto("https://www.fzmovies.net/csearch.php", { waitUntil: "domcontentloaded" });
|
| 42 |
|
| 43 |
await page.fill("#searchname", movieName);
|
| 44 |
await Promise.all([
|
| 45 |
page.click('input[type="submit"][name="Search"]'),
|
| 46 |
-
page.waitForNavigation({ waitUntil: "domcontentloaded" })
|
| 47 |
]);
|
| 48 |
|
| 49 |
// Step 1: Get first movie result (title & page link)
|
|
@@ -59,7 +59,7 @@ app.get("/search", async (req, res) => {
|
|
| 59 |
}
|
| 60 |
|
| 61 |
console.log(`Movie Found: ${movieData.title}`);
|
| 62 |
-
await page.goto(movieData.link, { waitUntil: "domcontentloaded" });
|
| 63 |
|
| 64 |
// Step 2: Extract the LAST download1.php link
|
| 65 |
const downloadPageLink = await page.evaluate(() => {
|
|
@@ -73,7 +73,7 @@ app.get("/search", async (req, res) => {
|
|
| 73 |
return res.status(404).json({ error: "Download link not found" });
|
| 74 |
}
|
| 75 |
|
| 76 |
-
await page.goto(downloadPageLink, { waitUntil: "domcontentloaded" });
|
| 77 |
|
| 78 |
// Step 3: Extract "download.php" page link (LAST one)
|
| 79 |
const finalDownloadPage = await page.evaluate(() => {
|
|
@@ -87,7 +87,7 @@ app.get("/search", async (req, res) => {
|
|
| 87 |
return res.status(404).json({ error: "Final download page not found" });
|
| 88 |
}
|
| 89 |
|
| 90 |
-
await page.goto(finalDownloadPage, { waitUntil: "domcontentloaded" });
|
| 91 |
|
| 92 |
// Step 4: Extract LAST redirection link (dlink.php)
|
| 93 |
const redirectedDownloadLink = await page.evaluate(() => {
|
|
@@ -100,13 +100,26 @@ app.get("/search", async (req, res) => {
|
|
| 100 |
return res.status(404).json({ error: "Redirected download link not found" });
|
| 101 |
}
|
| 102 |
|
| 103 |
-
// Step 5: Follow the redirection
|
| 104 |
-
|
| 105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
|
|
|
| 110 |
|
| 111 |
// **Remove everything after .mp4, .mkv, etc.**
|
| 112 |
const cleanedDownloadURL = finalDownloadURL.match(/(.*\.(mp4|mkv|avi))/i);
|
|
|
|
| 38 |
|
| 39 |
try {
|
| 40 |
console.log(`Searching for: ${movieName}`);
|
| 41 |
+
await page.goto("https://www.fzmovies.net/csearch.php", { waitUntil: "domcontentloaded", timeout: 60000 });
|
| 42 |
|
| 43 |
await page.fill("#searchname", movieName);
|
| 44 |
await Promise.all([
|
| 45 |
page.click('input[type="submit"][name="Search"]'),
|
| 46 |
+
page.waitForNavigation({ waitUntil: "domcontentloaded", timeout: 60000 })
|
| 47 |
]);
|
| 48 |
|
| 49 |
// Step 1: Get first movie result (title & page link)
|
|
|
|
| 59 |
}
|
| 60 |
|
| 61 |
console.log(`Movie Found: ${movieData.title}`);
|
| 62 |
+
await page.goto(movieData.link, { waitUntil: "domcontentloaded", timeout: 60000 });
|
| 63 |
|
| 64 |
// Step 2: Extract the LAST download1.php link
|
| 65 |
const downloadPageLink = await page.evaluate(() => {
|
|
|
|
| 73 |
return res.status(404).json({ error: "Download link not found" });
|
| 74 |
}
|
| 75 |
|
| 76 |
+
await page.goto(downloadPageLink, { waitUntil: "domcontentloaded", timeout: 60000 });
|
| 77 |
|
| 78 |
// Step 3: Extract "download.php" page link (LAST one)
|
| 79 |
const finalDownloadPage = await page.evaluate(() => {
|
|
|
|
| 87 |
return res.status(404).json({ error: "Final download page not found" });
|
| 88 |
}
|
| 89 |
|
| 90 |
+
await page.goto(finalDownloadPage, { waitUntil: "domcontentloaded", timeout: 60000 });
|
| 91 |
|
| 92 |
// Step 4: Extract LAST redirection link (dlink.php)
|
| 93 |
const redirectedDownloadLink = await page.evaluate(() => {
|
|
|
|
| 100 |
return res.status(404).json({ error: "Redirected download link not found" });
|
| 101 |
}
|
| 102 |
|
| 103 |
+
// Step 5: Follow the redirection with retries
|
| 104 |
+
let finalDownloadURL = null;
|
| 105 |
+
let retryAttempts = 2;
|
| 106 |
+
|
| 107 |
+
while (!finalDownloadURL && retryAttempts > 0) {
|
| 108 |
+
try {
|
| 109 |
+
const downloadPage = await context.newPage();
|
| 110 |
+
await downloadPage.goto(redirectedDownloadLink, { waitUntil: "networkidle", timeout: 60000 });
|
| 111 |
+
finalDownloadURL = downloadPage.url();
|
| 112 |
+
await downloadPage.close();
|
| 113 |
+
} catch (err) {
|
| 114 |
+
console.warn(`Retrying... ${retryAttempts} attempts left`);
|
| 115 |
+
retryAttempts--;
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
|
| 119 |
+
if (!finalDownloadURL) {
|
| 120 |
+
await browser.close();
|
| 121 |
+
return res.status(500).json({ error: "Failed to retrieve final download link" });
|
| 122 |
+
}
|
| 123 |
|
| 124 |
// **Remove everything after .mp4, .mkv, etc.**
|
| 125 |
const cleanedDownloadURL = finalDownloadURL.match(/(.*\.(mp4|mkv|avi))/i);
|