From fd81cc9c14b0ace96fa024ce0d9a978ff9c375b9 Mon Sep 17 00:00:00 2001 From: meowcateatrat Date: Tue, 14 Jan 2025 13:32:21 +0700 Subject: [PATCH] 1) Provide User-Agent to YT-DLP (if any). 2) Try to extract cookies from web browser if no cookies are provided. --- plugin/manifest.json | 2 +- plugin/msabstractparser.js | 88 ++++++++++++++++++++++++++++++++----- plugin/signature.dat | Bin 384 -> 384 bytes 3 files changed, 77 insertions(+), 13 deletions(-) diff --git a/plugin/manifest.json b/plugin/manifest.json index 8f66df5..3313b2a 100644 --- a/plugin/manifest.json +++ b/plugin/manifest.json @@ -2,7 +2,7 @@ "uuid": "elephant", "name": "Elephant", "description": "Provides support for downloading videos from various sites.", - "version": "1.1.20", + "version": "1.1.21", "icon": "icon.svg", "mediaParser": true, "mediaListParser": true, diff --git a/plugin/msabstractparser.js b/plugin/msabstractparser.js index 977123c..d4bda87 100644 --- a/plugin/msabstractparser.js +++ b/plugin/msabstractparser.js @@ -1,3 +1,5 @@ +var g_browsers = Object.create(null); + var msAbstractParser = (function() { function MsAbstractParser() @@ -10,10 +12,19 @@ var msAbstractParser = (function() { console.log("parsing..."); - var args = []; - var tmpCookies; + let args = []; + let tmpCookies; + let systemUserAgent; + let systemBrowser; + + try + { + systemUserAgent = qtJsSystem.defaultUserAgent; + systemBrowser = qtJsSystem.defaultWebBrowser; + } + catch(e) {} - var proxyUrl = qtJsNetworkProxyMgr.proxyForUrl(obj.url).url(); + let proxyUrl = qtJsNetworkProxyMgr.proxyForUrl(obj.url).url(); if (proxyUrl) { proxyUrl = proxyUrl.replace(/^https:\/\//i, 'http://'); // FDM bug workaround @@ -23,11 +34,31 @@ var msAbstractParser = (function() args.push("-J", "--flat-playlist", "--no-warnings", "--compat-options", "no-youtube-unavailable-videos"); if (obj.cookies && obj.cookies.length) - { - tmpCookies = qtJsTools.createTmpFile("request_" + obj.requestId + "_cookies"); - if (tmpCookies && tmpCookies.writeText(cookiesToNetscapeText(obj.cookies))) - args.push("--cookies", tmpCookies.path); - } + { + tmpCookies = qtJsTools.createTmpFile("request_" + obj.requestId + "_cookies"); + if (tmpCookies && tmpCookies.writeText(cookiesToNetscapeText(obj.cookies))) + args.push("--cookies", tmpCookies.path); + } + else + { + let browser = obj.browser || systemBrowser; + if (browser) + { + if (!(browser in g_browsers)) + { + return this.checkBrowser(obj.requestId, obj.interactive, browser) + .then(() => this.parse(obj, customArgs)); + } + else if (g_browsers[browser]) + { + args.push('--cookies-from-browser', browser); + } + } + } + + let userAgent = obj.userAgent || systemUserAgent; + if (userAgent) + args.push('--user-agent', userAgent); if (customArgs.length) args = args.concat(customArgs); @@ -80,10 +111,43 @@ var msAbstractParser = (function() return /^https?:\/\//.test(obj.url); }, - overrideUrlPolicy: function(url) - { - return true; - } + overrideUrlPolicy: function(url) + { + return true; + }, + + checkBrowser: function(requestId, interactive, browser) + { + console.log("Checking browser support (", browser, ")..."); + + return launchPythonScript(requestId, interactive, "yt-dlp/yt_dlp/__main__.py", ['--cookies-from-browser', browser, 'e692ec362191442c960a761ac6b84878://test.test']) + .then(function(obj) + { + console.log("Python result: ", obj.output); + + return new Promise(function (resolve, reject) + { + var output = obj.output.trim(); + if (!output) + { + reject({ + error: "Parse error", + isParseError: false + }); + } + else + { + let isSupported = /"e692ec362191442c960a761ac6b84878"/.test(output); + + console.log(browser, " supported: ", isSupported); + + g_browsers[browser] = isSupported; + + resolve(); + } + }); + }); + } }; return new MsAbstractParser(); diff --git a/plugin/signature.dat b/plugin/signature.dat index 1bf631125dfcccbd68fdf8348348cc50dfe51963..498314839daa9c2a0ad763b985530e2154183233 100644 GIT binary patch literal 384 zcmV-`0e}8Va6T;o9QN%t+3jU7yn@!;dTuT^IBBMk6Mm|7&$R~QlCk+p4Xmdq&y|(i z8Oj10_)=9S#=DDs;=(;d9;@;sML4GfZb|+dU}=G)Rdno0FTdqG)Tc@j$-;Dozu7%0 z7c-W>_d|_5C&t9|7I8b=jH`M>X;}~17UD)9__5DvU%a8r&id9d;&{Qb^x=<(w}cbB zyevxH#imt28kVPj>=jYmZWt@JFz9%vG*>EUSc}7*`y{IAg}<+3ODmxvC*m1`E~}Q* zM&Ym^?of%at@~%+1F1r@TUrN$;4lmZss+dPksd^Jd;zFO_^se>Jc@n}d3(0NOgVp^g`yGLb4|FB!y6XP975gs6Z@)8$EET=Vo(d0ko#9cj zv1#C7b-V6HPfrmFEHaq#QAFHxo7N{w7RyaY;R?ex!jc&@r_XOBI8Sk}y7_hF(f{7l zKkp|hx4X_#?IZ%~2QJ|LDzmp|(aCOTlq8s-gs7!OHeq7!JcVHMX0iTi4v&f>T5o#C zW}d$K#w@Pr$sPy6flQ;4AIzB*Yvn?nu%#;7NzXSS)@Ud-#m8+!m09Yc)mx=_P4Jr+ zY~gTDMl6X&;G}}#$OGixh0T$cK)NeGU(25aPH`VZU<_g_bjFX`H1A*V}|E0A05FvC;j#O|agW#sZDh-!Tr zS${%Z(?U0#Pef4eqo^5;*^oP+6lz79Z*7&^-*+l^(2eO(lf27>mjZbH3is&4FRt14 e$GtdZtg9spv;gj&t&n7%EM|jdBBeQ_`|gj*^Th}N