File size: 2,676 Bytes
f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 f44bab2 1ab3fc9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
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'
}
});
} |