Spaces:
Paused
Paused
import got from 'got'; | |
import * as cheerio from 'cheerio'; | |
import { FacebookDlArgsSchema, FacebookDlMediaSchema, FacebookDlSchema } from '../lib/types/facebook-v1.js'; | |
import { DEFAULT_HEADERS } from './constant.js'; | |
export 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]; | |
const k_exp = /k_exp="(.*?)"/.exec(html)[1]; | |
const k_token = /k_token="(.*?)"/.exec(html)[1]; | |
const k_prefix_name = /k_prefix_name="(.*?)"/.exec(html)[1]; | |
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 k_url_convert = /k_url_convert = "(.*?)"/.exec($.html())[1]; | |
const c_exp = /k_exp = "(.*?)"/.exec($.html())[1]; | |
const c_token = /c_token = "(.*?)"/.exec($.html())[1]; | |
const thumbnail = $('.thumbnail > .image-fb > img').attr('src'); | |
const duration = $('.content > .clearfix > p').text() || undefined; | |
const video = $('table.table').eq(0).find('tbody > tr').map((_, el) => { | |
const $el = $(el); | |
const $td = $el.find('td'); | |
const quality = $td.eq(0).text(); | |
const url = $td.eq(2).find('a').attr('href'); | |
if (url) { | |
return { | |
quality, | |
download: () => Promise.resolve(url) | |
}; | |
} | |
// TODO: | |
return false; | |
}).toArray().filter(Boolean); | |
const audio = []; | |
const audioUrl = $('#audioUrl').attr('value'); | |
audio.push({ | |
quality: '7kbps', | |
download: () => Promise.resolve(audioUrl) | |
}); | |
const result = { | |
thumbnail, | |
duration, | |
video, | |
audio | |
}; | |
console.log(result); | |
return FacebookDlSchema.parse(result); | |
} | |
export async function convert( | |
url, | |
v_id, | |
ftype, | |
videoUrl, | |
videoType, | |
videoCodec, | |
audioUrl, | |
audioType, | |
fquality, | |
fname, | |
exp, | |
token | |
) { | |
const data = await got.post(url, { | |
form: { | |
ftype, | |
v_id, | |
videoUrl, | |
videoType, | |
videoCodec, | |
audioUrl, | |
audioType, | |
fquality, | |
fname, | |
exp, | |
token, | |
cv: 'v2' | |
} | |
}); | |
} |