w-dwload-reel 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +55 -0
- package/.jsdoc +25 -0
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/SECURITY.md +5 -0
- package/babel.config.js +16 -0
- package/dist/w-dwload-reel.umd.js +7 -0
- package/dist/w-dwload-reel.umd.js.map +1 -0
- package/docs/WDwloadReel.mjs.html +317 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/global.html +520 -0
- package/docs/index.html +84 -0
- package/docs/scripts/collapse.js +39 -0
- package/docs/scripts/commonNav.js +28 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/nav.js +12 -0
- package/docs/scripts/polyfill.js +4 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/scripts/search.js +99 -0
- package/docs/styles/jsdoc.css +776 -0
- package/docs/styles/prettify.css +80 -0
- package/g.mjs +42 -0
- package/package.json +29 -0
- package/script.txt +17 -0
- package/src/WDwloadReel.mjs +245 -0
- package/test/WDwloadReel.test.mjs +47 -0
- package/toolg/addVersion.mjs +4 -0
- package/toolg/cleanFolder.mjs +4 -0
- package/toolg/gDistRollup.mjs +26 -0
- package/toolg/modifyReadme.mjs +4 -0
package/.editorconfig
ADDED
package/.eslintignore
ADDED
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
'env': {
|
|
3
|
+
'browser': true,
|
|
4
|
+
'es6': true,
|
|
5
|
+
'mocha': true
|
|
6
|
+
},
|
|
7
|
+
'extends': ['plugin:vue/base', 'plugin:vue/essential', 'standard'],
|
|
8
|
+
'plugins': [
|
|
9
|
+
'vue'
|
|
10
|
+
],
|
|
11
|
+
'globals': {
|
|
12
|
+
'Atomics': 'readonly',
|
|
13
|
+
'SharedArrayBuffer': 'readonly'
|
|
14
|
+
},
|
|
15
|
+
'parser': 'vue-eslint-parser',
|
|
16
|
+
'parserOptions': {
|
|
17
|
+
'parser': '@babel/eslint-parser',
|
|
18
|
+
'ecmaVersion': 2019,
|
|
19
|
+
'sourceType': 'module',
|
|
20
|
+
},
|
|
21
|
+
'rules': {
|
|
22
|
+
'generator-star-spacing': 'off',
|
|
23
|
+
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
|
24
|
+
'indent': ['error', 4],
|
|
25
|
+
'no-console': 'off',
|
|
26
|
+
'comma-dangle': ['error', {
|
|
27
|
+
'arrays': 'ignore',
|
|
28
|
+
'objects': 'ignore',
|
|
29
|
+
'imports': 'never',
|
|
30
|
+
'exports': 'never',
|
|
31
|
+
'functions': 'ignore'
|
|
32
|
+
}],
|
|
33
|
+
'no-multiple-empty-lines': ['error', { 'max': 2, 'maxEOF': 2 }],
|
|
34
|
+
//'space-before-function-paren': ['error', { 'anonymous': 'always', 'named': 'never' }],
|
|
35
|
+
'space-before-function-paren': 'off',
|
|
36
|
+
'spaced-comment': 'off',
|
|
37
|
+
'brace-style': ['error', 'stroustrup'],
|
|
38
|
+
'padded-blocks': 'off',
|
|
39
|
+
'no-constant-condition': 'off',
|
|
40
|
+
'camelcase': 'off',
|
|
41
|
+
'no-new': 'off',
|
|
42
|
+
'prefer-const': 'off',
|
|
43
|
+
'quote-props': ['error', 'consistent'],
|
|
44
|
+
'dot-notation': 'off',
|
|
45
|
+
'standard/no-callback-literal': 'off',
|
|
46
|
+
'quotes': ['error', 'single', { 'allowTemplateLiterals': true }],
|
|
47
|
+
'prefer-promise-reject-errors': 'off',
|
|
48
|
+
'no-unused-vars': ['error', { 'args': 'none', 'ignoreRestSiblings': true, 'argsIgnorePattern': '^_' }],
|
|
49
|
+
'node/no-callback-literal': 'off',
|
|
50
|
+
'prefer-regex-literals': 'off',
|
|
51
|
+
'array-callback-return': 'off',
|
|
52
|
+
'no-unreachable-loop': 'off',
|
|
53
|
+
'vue/multi-word-component-names': 'off',
|
|
54
|
+
}
|
|
55
|
+
}
|
package/.jsdoc
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tags": {
|
|
3
|
+
"allowUnknownTags": false
|
|
4
|
+
},
|
|
5
|
+
"source": {
|
|
6
|
+
"include": ["src/", "server/"],
|
|
7
|
+
"includePattern": ".+\\.(js(doc|x)?|mjs|vue)$",
|
|
8
|
+
"excludePattern": "(node_modules/|docs)"
|
|
9
|
+
},
|
|
10
|
+
"plugins": [
|
|
11
|
+
"plugins/markdown",
|
|
12
|
+
"node_modules/jsdoc-vuejs"
|
|
13
|
+
],
|
|
14
|
+
"opts": {
|
|
15
|
+
"template": "node_modules/docdash",
|
|
16
|
+
"encoding": "utf8",
|
|
17
|
+
"destination": "docs/",
|
|
18
|
+
"recurse": true,
|
|
19
|
+
"verbose": true
|
|
20
|
+
},
|
|
21
|
+
"templates": {
|
|
22
|
+
"cleverLinks": false,
|
|
23
|
+
"monospaceLinks": false
|
|
24
|
+
}
|
|
25
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 semisphere(yu-da, lyu 呂昱達)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# w-dwload-reel
|
|
2
|
+
A download tool for fb reel.
|
|
3
|
+
|
|
4
|
+

|
|
5
|
+
[](https://npmjs.org/package/w-dwload-reel)
|
|
6
|
+
[](https://npmjs.org/package/w-dwload-reel)
|
|
7
|
+
[](https://npmjs.org/package/w-dwload-reel)
|
|
8
|
+
[](https://npmjs.org/package/w-dwload-reel)
|
|
9
|
+
[](https://www.jsdelivr.com/package/npm/w-dwload-reel)
|
|
10
|
+
|
|
11
|
+
## Documentation
|
|
12
|
+
To view documentation or get support, visit [docs](https://yuda-lyu.github.io/w-dwload-reel/global.html).
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### Using npm(ES6 module):
|
|
17
|
+
```alias
|
|
18
|
+
npm i w-dwload-reel
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
#### Example:
|
|
22
|
+
> **Link:** [[dev source code](https://github.com/yuda-lyu/w-dwload-reel/blob/master/g.mjs)]
|
|
23
|
+
```alias
|
|
24
|
+
import fs from 'fs'
|
|
25
|
+
import WDwloadReel from './src/WDwloadReel.mjs'
|
|
26
|
+
|
|
27
|
+
async function test() {
|
|
28
|
+
|
|
29
|
+
//url
|
|
30
|
+
let url = `https://www.facebook.com/reel/3403300299820247`
|
|
31
|
+
|
|
32
|
+
//fp
|
|
33
|
+
let fp = './abc.mp4'
|
|
34
|
+
|
|
35
|
+
//funProg
|
|
36
|
+
let funProg = (prog, nn, na) => {
|
|
37
|
+
console.log('prog', `${prog.toFixed(2)}%`, nn, na)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//WDwloadReel
|
|
41
|
+
await WDwloadReel(url, fp, {
|
|
42
|
+
clean: true, //單一程序執行時, 事先清除之前暫存檔, 減少浪費硬碟空間
|
|
43
|
+
funProg,
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
//len
|
|
47
|
+
let len = fs.statSync(fp).size
|
|
48
|
+
console.log('len', len)
|
|
49
|
+
|
|
50
|
+
console.log('done:', fp)
|
|
51
|
+
}
|
|
52
|
+
test()
|
|
53
|
+
.catch((err) => {
|
|
54
|
+
console.log('catch', err)
|
|
55
|
+
})
|
|
56
|
+
// prog 0.49% 1 99
|
|
57
|
+
// prog 5.05% 4 99
|
|
58
|
+
// ...
|
|
59
|
+
// prog 99.00% 98 99
|
|
60
|
+
// prog 100.00% 99 99
|
|
61
|
+
// len 8468825
|
|
62
|
+
// done: ./abc.mp4
|
|
63
|
+
```
|
package/SECURITY.md
ADDED
package/babel.config.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
'presets': [
|
|
3
|
+
['@babel/preset-env', {
|
|
4
|
+
'useBuiltIns': 'entry',
|
|
5
|
+
'corejs': 3
|
|
6
|
+
}]
|
|
7
|
+
],
|
|
8
|
+
'plugins': [
|
|
9
|
+
'@babel/plugin-transform-runtime',
|
|
10
|
+
'@babel/plugin-proposal-export-default-from',
|
|
11
|
+
// '@babel/plugin-syntax-import-assertions', //已被棄用
|
|
12
|
+
// '@babel/plugin-proposal-nullish-coalescing-operator', //browser與nodejs已支援
|
|
13
|
+
// '@babel/plugin-proposal-object-rest-spread', //browser與nodejs已支援
|
|
14
|
+
// '@babel/plugin-proposal-optional-chaining', //browser與nodejs已支援
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* w-dwload-reel v1.0.0
|
|
3
|
+
* (c) 2018-2021 yuda-lyu(semisphere)
|
|
4
|
+
* Released under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("fs")):"function"==typeof define&&define.amd?define(["fs"],e):(t="undefined"!=typeof globalThis?globalThis:t||self)["w-dwload-reel"]=e(t.fs)}(this,function(t){"use strict";var e=Array.isArray,r="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,i=r||n||Function("return this")(),o=i.Symbol,a=Object.prototype,u=a.hasOwnProperty,c=a.toString,s=o?o.toStringTag:void 0;var l=Object.prototype.toString;var f=o?o.toStringTag:void 0;function h(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":f&&f in Object(t)?function(t){var e=u.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var i=c.call(t);return n&&(e?t[s]=r:delete t[s]),i}(t):function(t){return l.call(t)}(t)}function p(t){return"symbol"==typeof t||function(t){return null!=t&&"object"==typeof t}(t)&&"[object Symbol]"==h(t)}var d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,v=/^\w*$/;function y(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var _,g=i["__core-js_shared__"],b=(_=/[^.]+$/.exec(g&&g.keys&&g.keys.IE_PROTO||""))?"Symbol(src)_1."+_:"";var m=Function.prototype.toString;var j=/^\[object .+?Constructor\]$/,w=Function.prototype,O=Object.prototype,S=w.toString,x=O.hasOwnProperty,A=RegExp("^"+S.call(x).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function P(t){if(!y(t)||(e=t,b&&b in e))return!1;var e,r=function(t){if(!y(t))return!1;var e=h(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}(t)?A:j;return r.test(function(t){if(null!=t){try{return m.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function $(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return P(r)?r:void 0}var R=$(Object,"create");var T=Object.prototype.hasOwnProperty;var z=Object.prototype.hasOwnProperty;function k(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function F(t,e){return t===e||t!=t&&e!=e}function N(t,e){for(var r=t.length;r--;)if(F(t[r][0],e))return r;return-1}k.prototype.clear=function(){this.__data__=R?R(null):{},this.size=0},k.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},k.prototype.get=function(t){var e=this.__data__;if(R){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return T.call(e,t)?e[t]:void 0},k.prototype.has=function(t){var e=this.__data__;return R?void 0!==e[t]:z.call(e,t)},k.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=R&&void 0===e?"__lodash_hash_undefined__":e,this};var q=Array.prototype.splice;function C(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}C.prototype.clear=function(){this.__data__=[],this.size=0},C.prototype.delete=function(t){var e=this.__data__,r=N(e,t);return!(r<0)&&(r==e.length-1?e.pop():q.call(e,r,1),--this.size,!0)},C.prototype.get=function(t){var e=this.__data__,r=N(e,t);return r<0?void 0:e[r][1]},C.prototype.has=function(t){return N(this.__data__,t)>-1},C.prototype.set=function(t,e){var r=this.__data__,n=N(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var E=$(i,"Map");function B(t,e){var r,n,i=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?i["string"==typeof e?"string":"hash"]:i.map}function M(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}M.prototype.clear=function(){this.size=0,this.__data__={hash:new k,map:new(E||C),string:new k}},M.prototype.delete=function(t){var e=B(this,t).delete(t);return this.size-=e?1:0,e},M.prototype.get=function(t){return B(this,t).get(t)},M.prototype.has=function(t){return B(this,t).has(t)},M.prototype.set=function(t,e){var r=B(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function Q(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(Q.Cache||M),r}Q.Cache=M;var W,H,I,Z=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/\\(\\)?/g,V=(W=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Z,function(t,r,n,i){e.push(n?i.replace(G,"$1"):r||t)}),e},H=Q(W,function(t){return 500===I.size&&I.clear(),t}),I=H.cache,H),L=V;var U=o?o.prototype:void 0,X=U?U.toString:void 0;function K(t){if("string"==typeof t)return t;if(e(t))return function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}(t,K)+"";if(p(t))return X?X.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r}function Y(t){return null==t?"":K(t)}function D(t,r){return e(t)?t:function(t,r){if(e(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!p(t))||v.test(t)||!d.test(t)||null!=r&&t in Object(r)}(t,r)?[t]:L(Y(t))}function J(t){if("string"==typeof t||p(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function tt(t,e,r){var n=null==t?void 0:function(t,e){for(var r=0,n=(e=D(e,t)).length;null!=t&&r<n;)t=t[J(e[r++])];return r&&r==n?t:void 0}(t,e);return void 0===n?r:n}function et(t){return!(!function(t){return"[object String]"===Object.prototype.toString.call(t)}(t)||""===t)}var rt=/\s/;var nt=/^\s+/;function it(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}(t)+1).replace(nt,""):t}var ot=/^[-+]0x[0-9a-f]+$/i,at=/^0b[01]+$/i,ut=/^0o[0-7]+$/i,ct=parseInt;function st(t){if("number"==typeof t)return t;if(p(t))return NaN;if(y(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=y(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=it(t);var r=at.test(t);return r||ut.test(t)?ct(t.slice(2),r?2:8):ot.test(t)?NaN:+t}var lt=1/0;function ft(t){return t?(t=st(t))===lt||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ht(t){var e=ft(t),r=e%1;return e==e?r?e-r:e:0}var pt=i.isFinite,dt=Math.min;var vt=function(t){var e=Math[t];return function(t,r){if(t=st(t),(r=null==r?0:dt(ht(r),292))&&pt(t)){var n=(Y(t)+"e").split("e");return+((n=(Y(e(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return e(t)}}("round"),yt=vt;function _t(t){let e=!1;if(et(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(function(t){return t!=t}(t))return!1;e=!0}return e}function gt(t){if(!_t(t))return 0;return ft(t)}function bt(t){if(!_t(t))return 0;t=gt(t);let e=yt(t);return"0"===String(e)?0:e}function mt(t){return!!_t(t)&&(t=gt(t),"number"==typeof(e=t)&&e==ht(e));var e}function jt(t){if(!mt(t))return!1;return bt(t)>=0}function wt(t,e){if(!et(t))return"";if(!jt(e))return"";if(0===(e=bt(e)))return"";let r=t.length-e;return r<0&&(r=0),t.substring(r,r+e)}function Ot(t,e){return et(t)&&jt(e)?0===(e=bt(e))?t:function(t,e){return et(t)&&jt(e)?0===(e=bt(e))?"":t.substring(0,e):""}(t,t.length-e):""}function St(t){if(!et(t))return{path:"",isRoot:!1};for(;t.indexOf("\\\\")>=0;)t=t.replace("\\\\","\\");for(;t.indexOf("//")>=0;)t=t.replace("//","/");if(":"===wt(t,1))return{path:`${t}\\`,isRoot:!0};if("\\"===wt(t,1)){let e=Ot(t,1);return":"===wt(e,1)?{path:t,isRoot:!0}:{path:e,isRoot:!1}}if("/"===wt(t,1)){let e=Ot(t,1);return 0===e.length?{path:t,isRoot:!0}:{path:e,isRoot:!1}}return{path:t,isRoot:!1}}function xt(t){if(!et(t))return"";let e=St(t);if(e.isRoot)return e.path;let r=function(t){if(!et(t))return"";let e=St(t);if(e.isRoot)return e.path;let r=e.path;try{r=r.split("\\").pop().split("/").pop()}catch(t){}return r}(t=e.path);if(!et(r))return t;let n=St(t=Ot(t,r.length));return n.isRoot,n.path}function At(t,e={}){let r=tt(e,"fs"),n=!1;try{r.statSync(t),n=!0}catch{n=!1}return n}function Pt(t,e={}){let r=tt(e,"fs");if(!At(t,{fs:r}))return!1;let n=r.lstatSync(t);return!n.isFile()&&!n.isSymbolicLink()}function $t(e){return function(t,e={}){let r=tt(e,"fs");if(Pt(t,{fs:r}))return{success:"input folder is already exists: "+t};if(At(t,{fs:r}))return{error:"input path already exists: "+t};try{r.mkdirSync(t,{recursive:!0})}catch(t){return{error:t}}return{success:"done: "+t}}(e,{fs:t})}return async function(e,r,n={}){let i=tt(n,"funProg"),o=function(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}(i);if(!et(e))return Promise.reject("invalid url");if(!et(r))return Promise.reject("fp is not a string");let a,u=async t=>{let e=function(){let t,e,r=new Promise(function(){t=arguments[0],e=arguments[1]});return r.resolve=t,r.reject=e,r}();if(!et(t))return e.reject("invalid url"),e;let r=t=>JSON.parse(`{"text": "${t}"}`).text;return fetch(t,{headers:{"sec-fetch-user":"?1","sec-ch-ua-mobile":"?0","sec-fetch-site":"none","sec-fetch-dest":"document","sec-fetch-mode":"navigate","cache-control":"max-age=0",authority:"www.facebook.com","upgrade-insecure-requests":"1","accept-language":"en-GB,en;q=0.9,tr-TR;q=0.8,tr;q=0.7,en-US;q=0.6","sec-ch-ua":'"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",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.9",cookie:"sb=Rn8BYQvCEb2fpMQZjsd6L382; datr=Rn8BYbyhXgw9RlOvmsosmVNT; c_user=100003164630629; _fbp=fb.1.1629876126997.444699739; wd=1920x939; spin=r.1004812505_b.trunk_t.1638730393_s.1_v.2_; xs=28%3A8ROnP0aeVF8XcQ%3A2%3A1627488145%3A-1%3A4916%3A%3AAcWIuSjPy2mlTPuZAeA2wWzHzEDuumXI89jH8a_QIV8; fr=0jQw7hcrFdas2ZeyT.AWVpRNl_4noCEs_hb8kaZahs-jA.BhrQqa.3E.AAA.0.0.BhrQqa.AWUu879ZtCw"}}).then(t=>{if(!t.ok)throw new Error(`HTTP ${t.status} ${t.statusText}`);return t.text()}).then(n=>{let i=(n=n.replace(/"/g,'"').replace(/&/g,"&")).match(/"browser_native_sd_url":"(.*?)"/)||n.match(/"playable_url":"(.*?)"/)||n.match(/sd_src\s*:\s*"([^"]*)"/)||n.match(/(?<="src":")[^"]*(https:\/\/[^"]*)/),o=n.match(/"browser_native_hd_url":"(.*?)"/)||n.match(/"playable_url_quality_hd":"(.*?)"/)||n.match(/hd_src\s*:\s*"([^"]*)"/),a=n.match(/<meta\sname="description"\scontent="(.*?)"/),u=n.match(/"preferred_thumbnail":{"image":{"uri":"(.*?)"/),c=n.match(/"playable_duration_in_ms":[0-9]+/gm);if(i&&i[1]){let s={url:t,duration_ms:bt(c[0].split(":")[1]),sd:r(i[1]),hd:o&&o[1]?r(o[1]):"",title:a&&a[1]?r(a[1]):n.match(/<title>(.*?)<\/title>/)?.[1]??"",thumbnail:u&&u[1]?r(u[1]):""};e.resolve(s)}else e.reject("no video url found in page")}).catch(t=>{e.reject(t)}),e};try{a=await u(e)}catch(t){return Promise.reject(t)}if(!a.hd&&!a.sd)return Promise.reject("can not get hd/sd mp4 url (reel may be private/deleted/FB changed)");let c,s=a.hd||a.sd;try{c=await fetch(s)}catch(t){return Promise.reject(`fetch mp4 fail: ${t.message}`)}if(!c.ok)return Promise.reject(`HTTP ${c.status} ${c.statusText}`);let l=bt(c.headers.get("content-length")),f=c.body.getReader(),h=[],p=0,d=-1;for(;;){let{done:t,value:e}=await f.read();if(t)break;if(h.push(e),p+=e.length,o&&l>0){let t=p/l*100,e=Math.floor(t);e>d&&(d=e,i(t,p,l))}}let v=Buffer.concat(h);if(!(t=>{if(t.length<12)return!1;if("ftyp"!==t.slice(4,8).toString("ascii"))return!1;let e=t.slice(8,12).toString("ascii");return["isom","mp41","mp42","avc1","iso2","iso5","iso6","mp4v"].includes(e)})(v))return Promise.reject(`downloaded but not valid mp4 (first 16 bytes: ${v.slice(0,16).toString("hex")})`);let y=xt(r);if(et(y)&&!Pt(y,{fs:t})&&$t(y),t.writeFileSync(r,v),o){let t=l||v.length;i(100,t,t)}return"ok"}});
|
|
7
|
+
//# sourceMappingURL=w-dwload-reel.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"w-dwload-reel.umd.js","sources":["../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/_isKey.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_castPath.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/get.js","../node_modules/lodash-es/_baseGet.js","../node_modules/wsemi/src/isestr.mjs","../node_modules/wsemi/src/isstr.mjs","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_createRound.js","../node_modules/lodash-es/round.js","../node_modules/wsemi/src/isnum.mjs","../node_modules/wsemi/src/isnbr.mjs","../node_modules/wsemi/src/isnan.mjs","../node_modules/wsemi/src/cdbl.mjs","../node_modules/wsemi/src/cint.mjs","../node_modules/wsemi/src/isint.mjs","../node_modules/lodash-es/isInteger.js","../node_modules/wsemi/src/isp0int.mjs","../node_modules/wsemi/src/strright.mjs","../node_modules/wsemi/src/strdelright.mjs","../node_modules/wsemi/src/strleft.mjs","../node_modules/wsemi/src/getClearPathName.mjs","../node_modules/wsemi/src/getPathParent.mjs","../node_modules/wsemi/src/getFileName.mjs","../node_modules/wsemi/src/fsExistsCore.mjs","../node_modules/wsemi/src/fsIsFolderCore.mjs","../node_modules/wsemi/src/fsCreateFolder.mjs","../node_modules/wsemi/src/fsCreateFolderCore.mjs","../src/WDwloadReel.mjs","../node_modules/wsemi/src/isfun.mjs","../node_modules/wsemi/src/genPm.mjs","../node_modules/wsemi/src/fsIsFolder.mjs"],"sourcesContent":null,"names":["isArray$1","Array","isArray","freeGlobal$1","global","Object","freeSelf","self","root$1","freeGlobal","Function","Symbol$1","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","baseGetTag","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isSymbol","isObjectLike","reIsDeepProp","reIsPlainProp","isObject","type","uid","coreJsData$1","maskSrcKey","exec","coreJsData","keys","IE_PROTO","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","baseIsNative","func","pattern","isFunction","test","toSource","getNative","object","key","getValue","nativeCreate$1","Hash","entries","index","length","this","clear","entry","set","eq","other","assocIndexOf","array","__data__","nativeCreate","size","has","get","data","splice","ListCache","pop","push","Map$1","getMapData","map","MapCache","hash","Map","string","memoize","resolver","TypeError","memoized","args","arguments","apply","cache","Cache","rePropName","reEscapeChar","stringToPath","charCodeAt","match","number","quote","subString","stringToPath$1","symbolProto","symbolToString","baseToString","iteratee","arrayMap","castPath","isKey","toKey","path","defaultValue","baseGet","isestr","v","isstr","reWhitespace","reTrimStart","baseTrim","slice","charAt","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","valueOf","isBinary","INFINITY","toFinite","toInteger","remainder","nativeIsFinite","isFinite","nativeMin","Math","min","round","methodName","precision","pair","split","createRound","round$1","isnum","b","isNaN","Number","isnbr","isnan","cdbl","cint","r","String","isint","isp0int","strright","c","n","i","substring","strdelright","strleft","getClearPathName","str","isRoot","indexOf","getPathParent","o","name","err","getFileName","p","fsExistsCore","pah","opt","fs","statSync","fsIsFolderCore","s","lstatSync","isFile","isSymbolicLink","fsCreateFolder","success","error","mkdirSync","recursive","fsCreateFolderCore","async","url","fp","funProg","bFunProg","isfun","Promise","reject","info","getRealData","pm","resolve","genPm","parseString","JSON","parse","text","fetch","headers","authority","accept","cookie","then","res","ok","Error","status","statusText","sdMatch","hdMatch","titleMatch","thumbMatch","duration","duration_ms","sd","hd","title","thumbnail","catch","target","message","total","reader","body","getReader","chunks","received","progPre","done","read","prog","progInt","floor","buf","Buffer","concat","brand","includes","isMp4","dir","writeFileSync","na"],"mappings":"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","x_google_ignoreList":[0,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,80,81,82]}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<title>WDwloadReel.mjs - Documentation</title>
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
<script src="scripts/prettify/prettify.js"></script>
|
|
10
|
+
<script src="scripts/prettify/lang-css.js"></script>
|
|
11
|
+
<!--[if lt IE 9]>
|
|
12
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
13
|
+
<![endif]-->
|
|
14
|
+
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
|
|
15
|
+
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
|
|
16
|
+
<script src="scripts/nav.js" defer></script>
|
|
17
|
+
|
|
18
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
|
|
22
|
+
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
|
23
|
+
<label for="nav-trigger" class="navicon-button x">
|
|
24
|
+
<div class="navicon"></div>
|
|
25
|
+
</label>
|
|
26
|
+
|
|
27
|
+
<label for="nav-trigger" class="overlay"></label>
|
|
28
|
+
|
|
29
|
+
<nav >
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#WDwloadReel">WDwloadReel</a></li></ul>
|
|
33
|
+
|
|
34
|
+
</nav>
|
|
35
|
+
|
|
36
|
+
<div id="main">
|
|
37
|
+
|
|
38
|
+
<h1 class="page-title">WDwloadReel.mjs</h1>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<section>
|
|
47
|
+
<article>
|
|
48
|
+
<pre class="prettyprint source linenums"><code>import fs from 'fs'
|
|
49
|
+
import get from 'lodash-es/get.js'
|
|
50
|
+
import genPm from 'wsemi/src/genPm.mjs'
|
|
51
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
52
|
+
import isfun from 'wsemi/src/isfun.mjs'
|
|
53
|
+
import cint from 'wsemi/src/cint.mjs'
|
|
54
|
+
import getPathParent from 'wsemi/src/getPathParent.mjs'
|
|
55
|
+
import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
|
|
56
|
+
import fsCreateFolder from 'wsemi/src/fsCreateFolder.mjs'
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 下載Facebook Reel為mp4檔案至本機指定位置
|
|
61
|
+
*
|
|
62
|
+
* @param {String} url 輸入Facebook Reel網址字串(facebook.com / fb.watch)
|
|
63
|
+
* @param {String} fp 輸入儲存video(*.mp4)檔案路徑字串
|
|
64
|
+
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
65
|
+
* @param {Function} [opt.funProg=null] 輸入回傳進度函數,傳入參數為prog代表進度百分比(0~100)、nn代表當前已下載bytes、na代表全部須下載bytes,預設null
|
|
66
|
+
* @returns {Promise} 回傳Promise,resolve回傳'ok',reject回傳錯誤訊息
|
|
67
|
+
* @example
|
|
68
|
+
* import fs from 'fs'
|
|
69
|
+
* import WDwloadReel from './src/WDwloadReel.mjs'
|
|
70
|
+
*
|
|
71
|
+
* async function test() {
|
|
72
|
+
*
|
|
73
|
+
* //url
|
|
74
|
+
* let url = 'https://www.facebook.com/reel/XXXXXXXXXX'
|
|
75
|
+
*
|
|
76
|
+
* //fp
|
|
77
|
+
* let fp = './abc.mp4'
|
|
78
|
+
*
|
|
79
|
+
* //funProg
|
|
80
|
+
* let funProg = (prog, nn, na) => {
|
|
81
|
+
* console.log('prog', `${prog.toFixed(2)}%`, nn, na)
|
|
82
|
+
* }
|
|
83
|
+
*
|
|
84
|
+
* //WDwloadReel
|
|
85
|
+
* await WDwloadReel(url, fp, {
|
|
86
|
+
* funProg,
|
|
87
|
+
* })
|
|
88
|
+
*
|
|
89
|
+
* //len
|
|
90
|
+
* let len = fs.statSync(fp).size
|
|
91
|
+
* console.log('len', len)
|
|
92
|
+
*
|
|
93
|
+
* console.log('done:', fp)
|
|
94
|
+
* }
|
|
95
|
+
* test()
|
|
96
|
+
* .catch((err) => {
|
|
97
|
+
* console.log('catch', err)
|
|
98
|
+
* })
|
|
99
|
+
* // prog 1.00% 23456 2345678
|
|
100
|
+
* // prog 2.00% 46912 2345678
|
|
101
|
+
* // ...
|
|
102
|
+
* // prog 99.00% 2322221 2345678
|
|
103
|
+
* // prog 100.00% 2345678 2345678
|
|
104
|
+
* // len 2345678
|
|
105
|
+
* // done: ./abc.mp4
|
|
106
|
+
*
|
|
107
|
+
*/
|
|
108
|
+
async function WDwloadReel(url, fp, opt = {}) {
|
|
109
|
+
|
|
110
|
+
//funProg
|
|
111
|
+
let funProg = get(opt, 'funProg')
|
|
112
|
+
let bFunProg = isfun(funProg)
|
|
113
|
+
|
|
114
|
+
//check
|
|
115
|
+
if (!isestr(url)) {
|
|
116
|
+
return Promise.reject('invalid url')
|
|
117
|
+
}
|
|
118
|
+
if (!isestr(fp)) {
|
|
119
|
+
return Promise.reject('fp is not a string')
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
let isMp4 = (buf) => {
|
|
123
|
+
//mp4 magic: bytes 4..7 = 'ftyp' (ISO base media file type box), 再驗 bytes 8..11 為常見 mp4 brand, 排除 JPEG2000 等其他 ftyp 容器格式
|
|
124
|
+
if (buf.length < 12) {
|
|
125
|
+
return false
|
|
126
|
+
}
|
|
127
|
+
if (buf.slice(4, 8).toString('ascii') !== 'ftyp') {
|
|
128
|
+
return false
|
|
129
|
+
}
|
|
130
|
+
let brand = buf.slice(8, 12).toString('ascii')
|
|
131
|
+
return ['isom', 'mp41', 'mp42', 'avc1', 'iso2', 'iso5', 'iso6', 'mp4v'].includes(brand)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
let getRealData = async (url) => {
|
|
135
|
+
|
|
136
|
+
//pm
|
|
137
|
+
let pm = genPm()
|
|
138
|
+
|
|
139
|
+
//check
|
|
140
|
+
if (!isestr(url)) {
|
|
141
|
+
pm.reject('invalid url')
|
|
142
|
+
return pm
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
//parseString
|
|
146
|
+
let parseString = (string) => {
|
|
147
|
+
return JSON.parse(`{"text": "${string}"}`).text
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
//fetch, 參數與解析機制來源: https://github.com/victorsouzaleal/fb-downloader-scrapper/blob/main/src/facebook.ts
|
|
151
|
+
let headers = {
|
|
152
|
+
'sec-fetch-user': '?1',
|
|
153
|
+
'sec-ch-ua-mobile': '?0',
|
|
154
|
+
'sec-fetch-site': 'none',
|
|
155
|
+
'sec-fetch-dest': 'document',
|
|
156
|
+
'sec-fetch-mode': 'navigate',
|
|
157
|
+
'cache-control': 'max-age=0',
|
|
158
|
+
'authority': 'www.facebook.com',
|
|
159
|
+
'upgrade-insecure-requests': '1',
|
|
160
|
+
'accept-language': 'en-GB,en;q=0.9,tr-TR;q=0.8,tr;q=0.7,en-US;q=0.6',
|
|
161
|
+
'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
|
|
162
|
+
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
|
|
163
|
+
'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.9',
|
|
164
|
+
'cookie': 'sb=Rn8BYQvCEb2fpMQZjsd6L382; datr=Rn8BYbyhXgw9RlOvmsosmVNT; c_user=100003164630629; _fbp=fb.1.1629876126997.444699739; wd=1920x939; spin=r.1004812505_b.trunk_t.1638730393_s.1_v.2_; xs=28%3A8ROnP0aeVF8XcQ%3A2%3A1627488145%3A-1%3A4916%3A%3AAcWIuSjPy2mlTPuZAeA2wWzHzEDuumXI89jH8a_QIV8; fr=0jQw7hcrFdas2ZeyT.AWVpRNl_4noCEs_hb8kaZahs-jA.BhrQqa.3E.AAA.0.0.BhrQqa.AWUu879ZtCw',
|
|
165
|
+
}
|
|
166
|
+
fetch(url, { headers })
|
|
167
|
+
.then((res) => {
|
|
168
|
+
|
|
169
|
+
//check
|
|
170
|
+
if (!res.ok) throw new Error(`HTTP ${res.status} ${res.statusText}`)
|
|
171
|
+
|
|
172
|
+
return res.text()
|
|
173
|
+
})
|
|
174
|
+
.then((data) => {
|
|
175
|
+
|
|
176
|
+
data = data.replace(/&quot;/g, '"').replace(/&amp;/g, '&')
|
|
177
|
+
let sdMatch = data.match(/"browser_native_sd_url":"(.*?)"/) || data.match(/"playable_url":"(.*?)"/) || data.match(/sd_src\s*:\s*"([^"]*)"/) || data.match(/(?<="src":")[^"]*(https:\/\/[^"]*)/)
|
|
178
|
+
let hdMatch = data.match(/"browser_native_hd_url":"(.*?)"/) || data.match(/"playable_url_quality_hd":"(.*?)"/) || data.match(/hd_src\s*:\s*"([^"]*)"/)
|
|
179
|
+
let titleMatch = data.match(/<meta\sname="description"\scontent="(.*?)"/)
|
|
180
|
+
let thumbMatch = data.match(/"preferred_thumbnail":{"image":{"uri":"(.*?)"/)
|
|
181
|
+
let duration = data.match(/"playable_duration_in_ms":[0-9]+/gm)
|
|
182
|
+
|
|
183
|
+
//check
|
|
184
|
+
if (sdMatch && sdMatch[1]) {
|
|
185
|
+
let result = {
|
|
186
|
+
url,
|
|
187
|
+
duration_ms: cint(duration[0].split(':')[1]),
|
|
188
|
+
sd: parseString(sdMatch[1]),
|
|
189
|
+
hd: hdMatch && hdMatch[1] ? parseString(hdMatch[1]) : '',
|
|
190
|
+
title: titleMatch && titleMatch[1] ? parseString(titleMatch[1]) : data.match(/<title>(.*?)<\/title>/)?.[1] ?? '',
|
|
191
|
+
thumbnail: thumbMatch && thumbMatch[1] ? parseString(thumbMatch[1]) : '',
|
|
192
|
+
}
|
|
193
|
+
pm.resolve(result)
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
pm.reject('no video url found in page')
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
})
|
|
200
|
+
.catch((err) => {
|
|
201
|
+
pm.reject(err)
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
return pm
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
//getRealData, 解析FB頁面取得mp4直連
|
|
208
|
+
let info
|
|
209
|
+
try {
|
|
210
|
+
info = await getRealData(url)
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
return Promise.reject(err)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
//check, 須有hd或sd其中之一
|
|
217
|
+
if (!info.hd && !info.sd) {
|
|
218
|
+
return Promise.reject('can not get hd/sd mp4 url (reel may be private/deleted/FB changed)')
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//target, 優先hd
|
|
222
|
+
let target = info.hd || info.sd
|
|
223
|
+
|
|
224
|
+
//fetch
|
|
225
|
+
let res
|
|
226
|
+
try {
|
|
227
|
+
res = await fetch(target)
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
return Promise.reject(`fetch mp4 fail: ${err.message}`)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
//check
|
|
234
|
+
if (!res.ok) {
|
|
235
|
+
return Promise.reject(`HTTP ${res.status} ${res.statusText}`)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
//total, Content-Length未必提供, 取不到視為0(中段不觸發funProg, 最後仍補100%)
|
|
239
|
+
let total = cint(res.headers.get('content-length'))
|
|
240
|
+
|
|
241
|
+
//讀取串流並計算進度
|
|
242
|
+
let reader = res.body.getReader()
|
|
243
|
+
let chunks = []
|
|
244
|
+
let received = 0
|
|
245
|
+
let progPre = -1
|
|
246
|
+
while (true) {
|
|
247
|
+
let { done, value } = await reader.read()
|
|
248
|
+
if (done) {
|
|
249
|
+
break
|
|
250
|
+
}
|
|
251
|
+
chunks.push(value)
|
|
252
|
+
received += value.length
|
|
253
|
+
|
|
254
|
+
//funProg, 整數百分比變動才觸發避免高頻
|
|
255
|
+
if (bFunProg && total > 0) {
|
|
256
|
+
let prog = (received / total) * 100
|
|
257
|
+
let progInt = Math.floor(prog)
|
|
258
|
+
if (progInt > progPre) {
|
|
259
|
+
progPre = progInt
|
|
260
|
+
funProg(prog, received, total)
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
//buf
|
|
266
|
+
let buf = Buffer.concat(chunks)
|
|
267
|
+
|
|
268
|
+
//check mp4 magic, 避免HTML錯誤頁面或非mp4回應被當mp4寫入
|
|
269
|
+
if (!isMp4(buf)) {
|
|
270
|
+
return Promise.reject(`downloaded but not valid mp4 (first 16 bytes: ${buf.slice(0, 16).toString('hex')})`)
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
//mkdir, 上層目錄不存在時自動建立
|
|
274
|
+
let dir = getPathParent(fp)
|
|
275
|
+
if (isestr(dir) && !fsIsFolder(dir)) {
|
|
276
|
+
fsCreateFolder(dir)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
//write
|
|
280
|
+
fs.writeFileSync(fp, buf)
|
|
281
|
+
|
|
282
|
+
//funProg, 最終補100%(涵蓋無Content-Length時中段未觸發的情況)
|
|
283
|
+
if (bFunProg) {
|
|
284
|
+
let na = total || buf.length
|
|
285
|
+
funProg(100, na, na)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return 'ok'
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
export default WDwloadReel
|
|
293
|
+
</code></pre>
|
|
294
|
+
</article>
|
|
295
|
+
</section>
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
<br class="clear">
|
|
305
|
+
|
|
306
|
+
<footer>
|
|
307
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue May 26 2026 20:57:38 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
308
|
+
</footer>
|
|
309
|
+
|
|
310
|
+
<script>prettyPrint();</script>
|
|
311
|
+
<script src="scripts/polyfill.js"></script>
|
|
312
|
+
<script src="scripts/linenumber.js"></script>
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
</body>
|
|
317
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|