aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUnknown <blackjack4494@web.de>2020-08-05 19:10:25 +0200
committerUnknown <blackjack4494@web.de>2020-08-05 19:10:25 +0200
commit66f48768b0740ac2c00bb980a2fe8518fcc22c80 (patch)
tree83760b599bebe9b77abc23fe8f8beda565fa4b92
parentea4b8b6747d5d8a72ba5d4943fdaabbc4669740d (diff)
downloadhypervideo-pre-66f48768b0740ac2c00bb980a2fe8518fcc22c80.tar.lz
hypervideo-pre-66f48768b0740ac2c00bb980a2fe8518fcc22c80.tar.xz
hypervideo-pre-66f48768b0740ac2c00bb980a2fe8518fcc22c80.zip
sc web-auth api
-rw-r--r--youtube_dl/extractor/soundcloud.py245
-rw-r--r--youtube_dl/extractor/test.py52
2 files changed, 296 insertions, 1 deletions
diff --git a/youtube_dl/extractor/soundcloud.py b/youtube_dl/extractor/soundcloud.py
index d37c52543..6d124c66e 100644
--- a/youtube_dl/extractor/soundcloud.py
+++ b/youtube_dl/extractor/soundcloud.py
@@ -3,6 +3,8 @@ from __future__ import unicode_literals
import itertools
import re
+import time
+import random
from .common import (
InfoExtractor,
@@ -308,8 +310,249 @@ class SoundcloudIE(InfoExtractor):
return False
raise
+ _CLIENT_ID = 'EXLwg5lHTO2dslU5EePe3xkw0m1h86Cd'
+ _USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.50' #MS EDGE CHROME-BASED
+ _USERNAME = ''
+ _PASSWORD = ''
+ _KEY = '0763ed7314c69015fd4a0dc16bbf4b90'
+
def _real_initialize(self):
- self._CLIENT_ID = self._downloader.cache.load('soundcloud', 'client_id') or 'YUKXoArFcqrlQn9tfNHvvyfnDISj04zk'
+ self._CLIENT_ID, _CLIENT_ID = self._downloader.cache.load('soundcloud', 'client_id') or 'EXLwg5lHTO2dslU5EePe3xkw0m1h86Cd' #'YUKXoArFcqrlQn9tfNHvvyfnDISj04zk'
+ self._USERNAME, self._PASSWORD = self._get_login_info()
+ _USERNAME = self._USERNAME
+ _PASSWORD = self._PASSWORD
+ self._login()
+
+ def _login(self):
+ username, password = self._get_login_info()
+ if username is None:
+ return
+
+ '''
+ EXAMPLE
+ {"client_id":"EXLwg5lHTO2dslU5EePe3xkw0m1h86Cd","recaptcha_pubkey":"6Ld72JcUAAAAAItDloUGqg6H38KK5j08VuQlegV1","recaptcha_response":null,"credentials":{"identifier":user,"password":password},"signature":"8:33-1-53791-767-2073600-1028-25-25:3b9024:4","device_id":"71542-609622-728970-275967","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.50"}
+
+
+ call_payload = {
+ client_id: u.clientId,
+ recaptcha_pubkey: p,
+ recaptcha_response: 0 < n.length ? n : null,
+ credentials: {
+ identifier: e,
+ password: t
+ },
+ signature: l.sign(e, u.clientId, c),
+ device_id: u.deviceId,
+ user_agent: h
+ }
+ '''
+
+ '''
+ var t, n, o = ["touchmove", "webdriver", "__webdriver_script_fn", "Chromium PDF Viewer", "$cdc_asdjflasutopfhvcZLmcfl_", "keydown", "typeof process", "encodeURIComponent", "getAttribute", "document", "unescape", "256", "call", "Chrome PDF Viewer", "_Selenium_IDE_Recorder", "width", "TestUA", "location", "name", "forEach", "length", "Chrome PDF Plugin", "512", "mozInnerScreenY", "Date", "addEventListener", "Native Client", "424242", "exports", "height", "Widevine Content Decryption Module", "mousemove", "keyup", "1024", "420", "https:", "128", "plugins", "charCodeAt", "4096", "typeof global", "undefined", "now", "msLaunchUri", "screen", "eval", "safari", "navigator", "WebKit built-in PDF", "isTrusted"];
+ t = o,
+ n = 219,
+ function(e) {
+ for (; --e; )
+ t.push(t.shift())
+ }(++n);
+ var g = function(e, t) {
+ return o[e -= 0]
+ };
+ e[g("0x9")] = {
+ initialize: function() {
+ v = window[g("0x5")].now();
+ var e = function(e) {
+ try {
+ if (!1 === e[g("0x1e")])
+ return
+ } catch (e) {}
+ w += 1
+ };
+ window[g("0x6")](g("0xc"), e),
+ window[g("0x6")](g("0x1f"), e),
+ window[g("0x6")](g("0x24"), function() {
+ b += 1
+ }),
+ window.addEventListener(g("0xd"), function() {
+ k += 1
+ }),
+ window[g("0x6")]("click", function() {
+ _ += 1
+ })
+ }
+ '''
+
+ '''
+ sign: function(e, t, n, o) {e = "tom_heidel@web.de", t = "EXLwg5lHTO2dslU5EePe3xkw0m1h86Cd", n = "0763ed7314c69015fd4a0dc16bbf4b90", o = undefined
+ r = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
+ }
+
+ ## ignore
+ #var g = function(e, t) {
+ # return o[e -= 0]
+ #};
+ #Return value: "$cdc_asdjflasutopfhvcZLmcfl_"
+
+ var s = window[g("0x5")][g("0x17")]() - v #v was created earlier in initialize
+ g("0x5") = Date
+ g("0x17") = now
+ v = Timestamp in milliseconds e.g. 1596580552126
+ Return value s: 725321
+
+ u = 0;
+ try {
+ u = window.screen[g("0x2e")] * window[g("0x19")][g("0xa")]
+ g("0x2e") = width
+ g("0x19") = screen
+ g("0xa") = height
+ Return value u: 2073600
+
+ var l = +g("0xe");
+ l = 1024
+
+ try {
+ [][g("0x0")][g("0x2b")](window[g("0x1c")][g("0x12")], function(e) {
+ var t = e[g("0x31")];
+ t === g("0x22") && (l += 1),
+ t === g("0x2c") && (l += 2),
+ t === g("0x7") && (l += 4),
+ t === g("0xb") && (l += 8),
+ t === g("0x2") && (l += 16),
+ "Java Appvar Plug-in" === t && (l += 32),
+ "Shockwave Flash" === t && (l += 64),
+ "Edge PDF Viewer" === t && (l += +g("0x11")),
+ t === g("0x1d") && (l += +g("0x2a"))
+ })
+ }
+ g("0x0") = forEach
+ g("0x2b") = call
+ g("0x1c") = navigator
+ g("0x12") = plugins
+
+ } catch (e) {}
+ o && (r = g("0x2f"));
+ o && (i = +g("0x14"));
+ o && (a = +g("0x14"));
+ o && (w = 42);
+ o && (s = +g("0x8"));
+ o && (u = 420 * +g("0xf"));
+ o && (l = +g("0xe"));
+ o && (b = 7);
+ o && (k = 9);
+ o && (_ = 0);
+
+ e = "tom_heidel@web.de"
+ o = undefined, r = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
+ a = 33
+ i = 1
+ a = 33
+ s = 725321
+ u = 2073600
+ l = 1046
+ b = 2
+ k = 2
+ _ = 5
+ w = 1049
+ y = "8"
+ n = "0763ed7314c69015fd4a0dc16bbf4b90" #same as c in l.sign
+
+ for (var d = [a, i, s, w, u, l, b, k].join("-"), c = _, p = n + y + d + r + e + t + d + n, h = window[g("0x29")](window[g("0x26")](p)), m = 8011470, f = 0; f < h[g("0x1")]; f += 1)
+ m = (m >> 1) + ((1 & m) << 23),
+ m += h[g("0x13")](f),
+ m &= 16777215;
+ return y + ":" + d + ":" + m.toString(16) + ":" + c
+ }
+
+ d = "33-1-725321-1049-2073600-1046-2-2"
+ c = 5
+ p = "0763ed7314c69015fd4a0dc16bbf4b90833-1-725321-1049-2073600-1046-2-2Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36tom_heidel@web.deEXLwg5lHTO2dslU5EePe3xkw0m1h86Cd33-1-725321-1049-2073600-1046-2-20763ed7314c69015fd4a0dc16bbf4b90"
+
+ g("0x29") = unescape
+ g("0x26") = encodeURIComponent
+
+ h = "0763ed7314c69015fd4a0dc16bbf4b90833-1-725321-1049-2073600-1046-2-2Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36tom_heidel@web.deEXLwg5lHTO2dslU5EePe3xkw0m1h86Cd33-1-725321-1049-2073600-1046-2-20763ed7314c69015fd4a0dc16bbf4b90"
+ m = 8011470
+ f = 0
+
+ g("0x1") = length
+ m = 4005735 #calculated m = (m >> 1) + ((1 & m) << 23)
+ g("0x13") = charCodeAt
+ m = 4005783 #calculated m += h[g("0x13")](f)
+ .-.-.-. after all h.length iterations
+ m = 245670
+
+ Return value: "8:33-1-725321-1049-2073600-1046-2-2:3bfa6:5" #signature
+
+ # user-agent string is processed in signature calculating
+ # this probably means if a signature with user-agent A is given you cannot change it to B when logging in
+
+ '''
+
+ login_form = {
+ 'client_id': self._CLIENT_ID,
+ 'recaptcha_pubkey': 'null',
+ 'recaptcha_response': 'null',
+ 'credentials': {
+ 'identifier': username,
+ 'password': password
+ },
+ 'signature': '',#l.sign(username, self._CLIENT_ID, c='0763ed7314c69015fd4a0dc16bbf4b90'), #c is extracted from web_auth js around (reading upwards from) function api.callEndpoint("verifyIdentifier"
+ 'device_id': '00000-000000-000000-000000',
+ 'user_agent': self._USER_AGENT
+ }
+
+ '''
+ login = self._call_api(
+ 'sessions.json', None,
+ 'Logging in', post_data=login_form)
+ '''
+
+ # signature generation
+ def sign(self):#, username=_USERNAME, client_id=_CLIENT_ID, key=_KEY):
+ zero = 0
+ i = a = 1
+ u = 0 #u is actually screenWidth * screenHeight for 1920*1080 = 2073600
+ mU = 2073600
+ l = 1024 #1046?
+ timestamp = millis = int(round(time.time() * 1000))
+ mTimestamp = timestamp - (timestamp - random.randint(50000, 850000)) #hacky timestamp difference
+ uTimestamp = random.randint(50000, 850000)
+ w = 42 #1049?
+ b = k = 2 #25?
+ underscore = 0 #4, 5?
+
+
+ #d = '-'.join([str(mInt) for mInt in [a, i, s, w, u, l, b, k]])
+ d = '-'.join([str(mInt) for mInt in [a, i, zero, w, u, l, b, k]])
+ print(d)
+
+ c = underscore
+
+ n = _KEY = '0763ed7314c69015fd4a0dc16bbf4b90'
+ y = '8' #some kind of version??
+ r = _USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
+ e = _USERNAME = "tom_heidel@web.de"
+ t = _CLIENT_ID = 'EXLwg5lHTO2dslU5EePe3xkw0m1h86Cd'
+
+
+ p = n + y + d + r + e + t + d + n
+
+ h = p
+
+ m = 8011470
+ f = 0
+
+ for f in range(f, len(h)):
+ m = (m >> 1) + ((1 & m) << 23)
+ m += ord(h[f])
+ m &= 16777215
+
+ # c is not even needed
+ out = str(y) + ':' + str(d) + ':' + format(m, 'x') + ':' + str(c)
+
+ return out
+
+ ###
@classmethod
def _resolv_url(cls, url):
diff --git a/youtube_dl/extractor/test.py b/youtube_dl/extractor/test.py
new file mode 100644
index 000000000..3ec71871d
--- /dev/null
+++ b/youtube_dl/extractor/test.py
@@ -0,0 +1,52 @@
+import time
+import random
+
+def sign():#, username=_USERNAME, client_id=_CLIENT_ID, key=_KEY):
+ zero = 0
+ i = a = 1
+ mA = 33
+ u = 0 #u is actually screenWidth * screenHeight for 1920*1080 = 2073600
+ mU = 2073600
+ l = 1024 #1046?
+ mL = 1046
+ timestamp = millis = int(round(time.time() * 1000))
+ mTimestamp = timestamp - (timestamp - random.randint(50000, 850000)) #hacky timestamp difference
+ uTimestamp = random.randint(50000, 850000)
+ w = 42 #1049?
+ mW = 1049
+ b = k = 2 #25?
+ mB = mK = 25
+ underscore = 0 #4, 5?
+ mUnderscore = 5
+
+
+ #d = '-'.join([str(mInt) for mInt in [a, i, s, w, u, l, b, k]])
+ d = '-'.join([str(mInt) for mInt in [mA, i, uTimestamp, mW, mU, mL, mB, mK]])
+ print(d)
+
+ c = mUnderscore
+
+ n = _KEY = '0763ed7314c69015fd4a0dc16bbf4b90'
+ y = '8' #some kind of version??
+ r = _USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
+ e = _USERNAME = "tom_heidel@web.de"
+ t = _CLIENT_ID = 'EXLwg5lHTO2dslU5EePe3xkw0m1h86Cd'
+
+
+ p = n + y + d + r + e + t + d + n
+
+ h = p
+
+ m = 8011470
+ f = 0
+
+ for f in range(f, len(h)):
+ m = (m >> 1) + ((1 & m) << 23)
+ m += ord(h[f])
+ m &= 16777215
+
+ out = str(y) + ':' + str(d) + ':' + format(m, 'x') + ':' + str(c)
+
+ return out
+
+print(sign()) \ No newline at end of file