randydev commited on
Commit
d7ade7a
·
verified ·
1 Parent(s): 0375e7f

Update lib/facebook.js

Browse files
Files changed (1) hide show
  1. lib/facebook.js +41 -81
lib/facebook.js CHANGED
@@ -1,105 +1,65 @@
1
- import got from 'got';
2
- import * as cheerio from 'cheerio';
3
- import { FacebookDlArgsSchema, FacebookDlMediaSchema, FacebookDlSchema } from '../lib/types/facebook-v1.js';
4
- import { DEFAULT_HEADERS } from './constant.js';
5
 
6
- export async function facebookdl(url) {
7
  FacebookDlArgsSchema.parse(arguments);
8
- const html = await got('https://fdownloader.net/en', {
9
- headers: {
10
- ...DEFAULT_HEADERS
11
- }
12
- }).text();
13
- const k_url_search = /k_url_search="(.*?)"/.exec(html)[1];
14
- const k_exp = /k_exp="(.*?)"/.exec(html)[1];
15
- const k_token = /k_token="(.*?)"/.exec(html)[1];
16
- const k_prefix_name = /k_prefix_name="(.*?)"/.exec(html)[1];
 
17
 
18
  const form = {
19
  k_exp,
20
  k_token,
21
  q: url,
22
- lang: 'en',
23
- web: 'fdownloader.net',
24
- v: 'v2',
25
- w: ''
26
  };
 
27
  const data = await got.post(k_url_search, {
28
- headers: {
29
- ...DEFAULT_HEADERS,
30
- referer: 'https://fdownloader.net/'
31
- },
32
- form
33
  }).json();
34
 
35
  const $ = cheerio.load(data.data);
36
 
37
- const k_url_convert = /k_url_convert = "(.*?)"/.exec($.html())[1];
38
- const c_exp = /k_exp = "(.*?)"/.exec($.html())[1];
39
- const c_token = /c_token = "(.*?)"/.exec($.html())[1];
40
-
41
- const thumbnail = $('.thumbnail > .image-fb > img').attr('src');
42
- const duration = $('.content > .clearfix > p').text() || undefined;
43
- const video = $('table.table').eq(0).find('tbody > tr').map((_, el) => {
44
  const $el = $(el);
45
- const $td = $el.find('td');
46
- const quality = $td.eq(0).text();
47
- const url = $td.eq(2).find('a').attr('href');
48
- if (url) {
49
- return {
50
- quality,
51
- download: () => Promise.resolve(url)
52
- };
53
  }
54
- // TODO:
55
- return false;
56
  }).toArray().filter(Boolean);
57
 
58
  const audio = [];
59
- const audioUrl = $('#audioUrl').attr('value');
60
- audio.push({
61
- quality: '7kbps',
62
- download: () => Promise.resolve(audioUrl)
63
- });
 
64
 
65
- const result = {
66
- thumbnail,
67
- duration,
68
- video,
69
- audio
70
- };
71
  console.log(result);
72
  return FacebookDlSchema.parse(result);
73
  }
74
 
75
- export async function convert(
76
- url,
77
- v_id,
78
- ftype,
79
- videoUrl,
80
- videoType,
81
- videoCodec,
82
- audioUrl,
83
- audioType,
84
- fquality,
85
- fname,
86
- exp,
87
- token
88
- ) {
89
- const data = await got.post(url, {
90
- form: {
91
- ftype,
92
- v_id,
93
- videoUrl,
94
- videoType,
95
- videoCodec,
96
- audioUrl,
97
- audioType,
98
- fquality,
99
- fname,
100
- exp,
101
- token,
102
- cv: 'v2'
103
- }
104
  });
105
- }
 
1
+ import got from "got";
2
+ import * as cheerio from "cheerio";
3
+ import { FacebookDlArgsSchema, FacebookDlSchema } from "../lib/types/facebook-v1.js";
4
+ import { DEFAULT_HEADERS } from "./constant.js";
5
 
6
+ export default async function facebookdl(url) {
7
  FacebookDlArgsSchema.parse(arguments);
8
+
9
+ const html = await got("https://fdownloader.net/en", { headers: { ...DEFAULT_HEADERS } }).text();
10
+
11
+ const k_url_search = /k_url_search="(.*?)"/.exec(html)?.[1] || null;
12
+ const k_exp = /k_exp="(.*?)"/.exec(html)?.[1] || null;
13
+ const k_token = /k_token="(.*?)"/.exec(html)?.[1] || null;
14
+
15
+ if (!k_url_search || !k_exp || !k_token) {
16
+ throw new Error("Failed to extract necessary tokens.");
17
+ }
18
 
19
  const form = {
20
  k_exp,
21
  k_token,
22
  q: url,
23
+ lang: "en",
24
+ web: "fdownloader.net",
25
+ v: "v2",
26
+ w: "",
27
  };
28
+
29
  const data = await got.post(k_url_search, {
30
+ headers: { ...DEFAULT_HEADERS, referer: "https://fdownloader.net/" },
31
+ form,
 
 
 
32
  }).json();
33
 
34
  const $ = cheerio.load(data.data);
35
 
36
+ const thumbnail = $(".thumbnail > .image-fb > img").attr("src") || null;
37
+ const duration = $(".content > .clearfix > p").text() || null;
38
+
39
+ const video = $("table.table").eq(0).find("tbody > tr").map((_, el) => {
 
 
 
40
  const $el = $(el);
41
+ const quality = $el.find("td").eq(0).text().trim();
42
+ const downloadUrl = $el.find("td").eq(2).find("a").attr("href");
43
+
44
+ if (downloadUrl) {
45
+ return { quality, download: () => Promise.resolve(downloadUrl) };
 
 
 
46
  }
 
 
47
  }).toArray().filter(Boolean);
48
 
49
  const audio = [];
50
+ const audioUrl = $("#audioUrl").attr("value") || null;
51
+ if (audioUrl) {
52
+ audio.push({ quality: "128kbps", download: () => Promise.resolve(audioUrl) });
53
+ }
54
+
55
+ const result = { thumbnail, duration, video, audio };
56
 
 
 
 
 
 
 
57
  console.log(result);
58
  return FacebookDlSchema.parse(result);
59
  }
60
 
61
+ export async function convert(url, v_id, ftype, videoUrl, videoType, videoCodec, audioUrl, audioType, fquality, fname, exp, token) {
62
+ return got.post(url, {
63
+ form: { ftype, v_id, videoUrl, videoType, videoCodec, audioUrl, audioType, fquality, fname, exp, token, cv: "v2" },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  });
65
+ }