Dashme / plugins /fbdl.js
maylinejix's picture
Update plugins/fbdl.js
af31e83 verified
const puppeteer = require('puppeteer');
const axios = require('axios');
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function fbdl(url) {
if (!url) {
return {
author: "Herza",
success: false,
error: "URL is required"
};
}
try {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.7444.171 Mobile Safari/537.36');
let downloadUrl = null;
let apiResponse = null;
page.on('response', async (response) => {
const resUrl = response.url();
if (resUrl.includes('api.hitube.io/st-tik-video/fb/dl')) {
try {
const data = await response.json();
apiResponse = data;
} catch (e) {}
}
if (resUrl.includes('api.hitube.io/st-tik-video/token/')) {
downloadUrl = resUrl;
}
});
await page.goto('https://www.hitube.io/id/facebook-video-download', {
waitUntil: 'networkidle2',
timeout: 60000
});
await wait(2000);
await page.waitForSelector('textarea[aria-label="Tempelkan tautan di sini"]', {
visible: true,
timeout: 10000
});
await page.type('textarea[aria-label="Tempelkan tautan di sini"]', url);
await wait(1500);
await page.waitForSelector('button.search-btn', {
visible: true,
timeout: 10000
});
await page.click('button.search-btn');
await wait(12000);
try {
await page.waitForSelector('div.flex:has-text("Download Foto")', {
visible: true,
timeout: 30000
});
} catch (e) {
console.log('Download button not found, but may have captured URL');
}
await wait(2000);
await browser.close();
if (downloadUrl) {
return {
author: "Herza",
success: true,
data: {
url: downloadUrl,
}
};
}
return {
author: "Herza",
success: false,
error: "Failed to capture download URL"
};
} catch (error) {
console.log('Puppeteer failed, trying API fallback...', error.message);
return await fbdlAPI(url);
}
}
async function fbdlAPI(url) {
try {
const sessionid = `hitube.io_${Math.random().toString(36).substring(7)}_${Date.now()}`;
const secureMessages = [
'XEKpZjB+0IPdSL33zsCyrSczOHvRfGabOwmJfklhnba8ej54WUKef4h1bAQaFcT396jxFrqu0t6VMMk2wToCSs3nvF/Gcv4RHNjX5PCyv8YNg4xncXWyVBrJGOUnanGkdopMxDhqaJkIJusLrAsrHYD3kfI40T59BNJBHd3SlJ8=',
'KZ/0an3pAJwU3XZk/KY08rFh6GjVfXrHKuvOdJBMRWPMO/le4Hrb/E4WzUxZYraEHKYYbrc3EasFGZPoNc3KSqsdwQqKM05epVe+y0ZcZik7e2rVRuiBifPETn2FYT58M61m442O6ncc6aJGJcsTjKp0B+3Mz9kKslRFkcIsei0=',
'YFLqajC+1JQeTM44xtDzsSchPIwSgHbcPxnKgkmincd9fk65XVLfg5i2cBRbGdU497kyGsrv1u7WNNl3xUpDTt4owRrLN16fqOkY6QDzw9ZOh5yodYWzWCsJHPVobhHldqpNyEiqbKlJKvtMsAtsIZE4lgJ51U6+COKCIe4Tmq9='
];
const secureMessage = secureMessages[Math.floor(Math.random() * secureMessages.length)];
const apiUrl = `https://api.hitube.io/st-tik-video/fb/dl?url=${encodeURIComponent(url)}&sessionid=${sessionid}`;
const response = await axios.get(apiUrl, {
headers: {
'Accept': 'application/json, text/plain, */*',
'X-Secure-Message': secureMessage,
'User-Agent': 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36',
'Referer': 'https://www.hitube.io/id/facebook-video-download',
'Origin': 'https://www.hitube.io'
}
});
if (response.data.code === 200 && response.data.result.fbBos.length > 0) {
const token = response.data.result.fbBos[0].url;
const downloadUrl = `https://api.hitube.io/st-tik-video/token/${token}?sessionid=${sessionid}&wh=www.hitube.io&status=download`;
return {
author: "Herza",
success: true,
data: {
url: downloadUrl
}
};
}
return {
author: "Herza",
success: false,
error: "Video not found"
};
} catch (error) {
return {
author: "Herza",
success: false,
error: error.message
};
}
}
const handler = async (req, res) => {
try {
const { url } = req.query;
if (!url) {
return res.status(400).json({
author: "Herza",
success: false,
error: 'Missing required parameter: url'
});
}
const result = await fbdl(url);
res.json(result);
} catch (error) {
res.status(500).json({
author: "Herza",
success: false,
error: error.message
});
}
};
module.exports = {
name: 'Facebook Downloader',
description: 'Download Facebook Video using Our API service',
type: 'GET',
routes: ['api/download/fbdl'],
tags: ['downloader', 'tools', 'misc'],
parameters: ['url', 'key'],
enabled: true,
main: ['Downloader'],
handler
};