ryu-js / lib /facebook /facebook.js
randydev's picture
Update lib/facebook/facebook.js
70ea3ad verified
raw
history blame
2.23 kB
import got from "got";
import * as cheerio from "cheerio";
import { FacebookDlArgsSchema, FacebookDlSchema } from "../types/facebook-v1.js";
import { DEFAULT_HEADERS } from "../constant.js";
async function facebookdl(url) {
FacebookDlArgsSchema.parse(arguments);
const html = await got("https://fdownloader.net/en", { headers: { ...DEFAULT_HEADERS } }).text();
const k_url_search = /k_url_search="(.*?)"/.exec(html)?.[1] || null;
const k_exp = /k_exp="(.*?)"/.exec(html)?.[1] || null;
const k_token = /k_token="(.*?)"/.exec(html)?.[1] || null;
if (!k_url_search || !k_exp || !k_token) {
throw new Error("Failed to extract necessary tokens.");
}
const form = {
k_exp,
k_token,
q: url,
lang: "en",
web: "fdownloader.net",
v: "v2",
w: "",
};
const data = await got.post(k_url_search, {
headers: { ...DEFAULT_HEADERS, referer: "https://fdownloader.net/" },
form,
}).json();
const $ = cheerio.load(data.data);
const thumbnail = $(".thumbnail > .image-fb > img").attr("src") || null;
const duration = $(".content > .clearfix > p").text() || null;
const video = $("table.table").eq(0).find("tbody > tr").map((_, el) => {
const $el = $(el);
const quality = $el.find("td").eq(0).text().trim();
const downloadUrl = $el.find("td").eq(2).find("a").attr("href");
if (downloadUrl) {
return { quality, download: () => Promise.resolve(downloadUrl) };
}
}).toArray().filter(Boolean);
const audio = [];
const audioUrl = $("#audioUrl").attr("value") || null;
if (audioUrl) {
audio.push({ quality: "128kbps", download: () => Promise.resolve(audioUrl) });
}
const result = { thumbnail, duration, video, audio };
console.log(result);
return FacebookDlSchema.parse(result);
}
async function convert(url, v_id, ftype, videoUrl, videoType, videoCodec, audioUrl, audioType, fquality, fname, exp, token) {
return got.post(url, {
form: { ftype, v_id, videoUrl, videoType, videoCodec, audioUrl, audioType, fquality, fname, exp, token, cv: "v2" },
});
}
export { facebookdl, convert };