diff --git a/dist/extractors/filemoon.js b/dist/extractors/filemoon.js index 1bbb1632c..13ad0ffa8 100644 --- a/dist/extractors/filemoon.js +++ b/dist/extractors/filemoon.js @@ -1,5 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +const cheerio_1 = require("cheerio"); const models_1 = require("../models"); const utils_1 = require("../utils"); /** @@ -12,20 +13,41 @@ class Filemoon extends models_1.VideoExtractor { this.sources = []; this.host = 'https://filemoon.sx'; this.extract = async (videoUrl) => { + var _a; const options = { headers: { - Referer: videoUrl.href, - 'Content-Type': 'application/x-www-form-urlencoded', + Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'en-US,en;q=0.9', + Cookie: 'file_id=40342338; aff=23788; ref_url=https%3A%2F%2Fbf0skv.org%2Fe%2Fm0507zf4xqor; lang=1', + Priority: 'u=0, i', + Referer: videoUrl.origin, + Origin: videoUrl.href, + 'Sec-Ch-Ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"', + 'Sec-Ch-Ua-Mobile': '?0', + 'Sec-Ch-Ua-Platform': '"Windows"', + 'Sec-Fetch-Dest': 'iframe', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'cross-site', 'User-Agent': utils_1.USER_AGENT, - 'X-Requested-With': 'XMLHttpRequest', + 'Access-Control-Allow-Origin': '*', }, }; - const { data } = await this.client.get(videoUrl.href); - const s = data.substring(data.indexOf('eval(function') + 5, data.lastIndexOf(')))')); + const { data } = await this.client.get(videoUrl.href, options); + const $ = (0, cheerio_1.load)(data); try { - const newScript = 'function run(' + s.split('function(')[1] + '))'; + const { data } = await this.client.get($('iframe').attr('src'), options); + const unpackedData = eval(/(eval)(\(f.*?)(\n<\/script>)/s.exec(data)[2].replace('eval', '')); + const links = (_a = unpackedData.match(new RegExp('sources:\\[\\{file:"(.*?)"'))) !== null && _a !== void 0 ? _a : []; + const m3u8Link = links[1]; + this.sources.unshift({ + url: m3u8Link, + quality: 'auto', + isM3U8: true, + }); + } + catch (err) { + console.log(err); } - catch (err) { } return this.sources; }; } diff --git a/dist/extractors/filemoon.js.map b/dist/extractors/filemoon.js.map index ca03a7f66..04a89fdcf 100644 --- a/dist/extractors/filemoon.js.map +++ b/dist/extractors/filemoon.js.map @@ -1 +1 @@ -{"version":3,"file":"filemoon.js","sourceRoot":"","sources":["../../src/extractors/filemoon.ts"],"names":[],"mappings":";;AAEA,sCAAqE;AACrE,oCAAsC;AAGtC;;GAEG;AACH,MAAM,QAAS,SAAQ,uBAAc;IAArC;;QACqB,eAAU,GAAG,UAAU,CAAC;QACxB,YAAO,GAAa,EAAE,CAAC;QAEzB,SAAI,GAAG,qBAAqB,CAAC;QAErC,YAAO,GAAG,KAAK,EAAE,QAAa,EAAqB,EAAE;YAC5D,MAAM,OAAO,GAAG;gBACd,OAAO,EAAE;oBACP,OAAO,EAAE,QAAQ,CAAC,IAAI;oBACtB,cAAc,EAAE,mCAAmC;oBACnD,YAAY,EAAE,kBAAU;oBACxB,kBAAkB,EAAE,gBAAgB;iBACrC;aACF,CAAC;YAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEtD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACrE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC,CAAA,CAAC;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;CAAA;AAED,kBAAe,QAAQ,CAAC"} \ No newline at end of file +{"version":3,"file":"filemoon.js","sourceRoot":"","sources":["../../src/extractors/filemoon.ts"],"names":[],"mappings":";;AAAA,qCAA+B;AAE/B,sCAA8E;AAC9E,oCAAsC;AAGtC;;GAEG;AACH,MAAM,QAAS,SAAQ,uBAAc;IAArC;;QACqB,eAAU,GAAG,UAAU,CAAC;QACxB,YAAO,GAAa,EAAE,CAAC;QAEzB,SAAI,GAAG,qBAAqB,CAAC;QAErC,YAAO,GAAG,KAAK,EAAE,QAAa,EAAqB,EAAE;;YAC5D,MAAM,OAAO,GAAG;gBACd,OAAO,EAAE;oBACP,MAAM,EACJ,yIAAyI;oBAC3I,iBAAiB,EAAE,gBAAgB;oBACnC,MAAM,EAAE,0FAA0F;oBAClG,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,QAAQ,CAAC,MAAM;oBACxB,MAAM,EAAE,QAAQ,CAAC,IAAI;oBACrB,WAAW,EAAE,mEAAmE;oBAChF,kBAAkB,EAAE,IAAI;oBACxB,oBAAoB,EAAE,WAAW;oBACjC,gBAAgB,EAAE,QAAQ;oBAC1B,gBAAgB,EAAE,UAAU;oBAC5B,gBAAgB,EAAE,YAAY;oBAC9B,YAAY,EAAE,kBAAU;oBACxB,6BAA6B,EAAE,GAAG;iBACnC;aACF,CAAC;YAEF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,IAAA,cAAI,EAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAE,EAAE,OAAO,CAAE,CAAC;gBAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9F,MAAM,KAAK,GAAG,MAAA,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,4BAA4B,CAAC,CAAC,mCAAI,EAAE,CAAC;gBACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;oBACnB,GAAG,EAAE,QAAQ;oBACb,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;CAAA;AAED,kBAAe,QAAQ,CAAC"} \ No newline at end of file diff --git a/src/extractors/filemoon.ts b/src/extractors/filemoon.ts index 7ef5bb775..9b7127622 100644 --- a/src/extractors/filemoon.ts +++ b/src/extractors/filemoon.ts @@ -1,6 +1,6 @@ import { load } from 'cheerio'; -import { VideoExtractor, IVideo, ISubtitle, Intro } from '../models'; +import { VideoExtractor, IVideo, ISubtitle, Intro, ISource } from '../models'; import { USER_AGENT } from '../utils'; import { Console } from 'console'; @@ -16,19 +16,39 @@ class Filemoon extends VideoExtractor { override extract = async (videoUrl: URL): Promise => { const options = { headers: { - Referer: videoUrl.href, - 'Content-Type': 'application/x-www-form-urlencoded', + Accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'en-US,en;q=0.9', + Cookie: 'file_id=40342338; aff=23788; ref_url=https%3A%2F%2Fbf0skv.org%2Fe%2Fm0507zf4xqor; lang=1', + Priority: 'u=0, i', + Referer: videoUrl.origin, + Origin: videoUrl.href, + 'Sec-Ch-Ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"', + 'Sec-Ch-Ua-Mobile': '?0', + 'Sec-Ch-Ua-Platform': '"Windows"', + 'Sec-Fetch-Dest': 'iframe', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'cross-site', 'User-Agent': USER_AGENT, - 'X-Requested-With': 'XMLHttpRequest', + 'Access-Control-Allow-Origin': '*', }, }; - const { data } = await this.client.get(videoUrl.href); - - const s = data.substring(data.indexOf('eval(function') + 5, data.lastIndexOf(')))')); + const { data } = await this.client.get(videoUrl.href, options); + const $ = load(data); try { - const newScript = 'function run(' + s.split('function(')[1] + '))'; - } catch (err) {} + const { data } = await this.client.get($('iframe').attr('src')!, options)!; + const unpackedData = eval(/(eval)(\(f.*?)(\n<\/script>)/s.exec(data)![2].replace('eval', '')); + const links = unpackedData.match(new RegExp('sources:\\[\\{file:"(.*?)"')) ?? []; + const m3u8Link = links[1]; + this.sources.unshift({ + url: m3u8Link, + quality: 'auto', + isM3U8: true, + }); + } catch (err) { + console.log(err); + } return this.sources; }; }