Hello community, here is the log from the commit of package youtube-dl for openSUSE:Factory checked in at 2016-11-21 14:26:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/youtube-dl (Old) and /work/SRC/openSUSE:Factory/.youtube-dl.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "youtube-dl" Changes: -------- --- /work/SRC/openSUSE:Factory/youtube-dl/youtube-dl.changes 2016-11-14 20:17:09.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.youtube-dl.new/youtube-dl.changes 2016-11-21 14:26:58.000000000 +0100 @@ -1,0 +2,6 @@ +Thu Nov 17 20:10:03 UTC 2016 - jengelh@inai.de + +- Update to new upstream release 2016.11.18 +* fix openload extraction + +------------------------------------------------------------------- Old: ---- youtube-dl-2016.11.14.1.tar.gz youtube-dl-2016.11.14.1.tar.gz.sig New: ---- youtube-dl-2016.11.18.tar.gz youtube-dl-2016.11.18.tar.gz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ youtube-dl.spec ++++++ --- /var/tmp/diff_new_pack.ZWu4Cc/_old 2016-11-21 14:26:59.000000000 +0100 +++ /var/tmp/diff_new_pack.ZWu4Cc/_new 2016-11-21 14:26:59.000000000 +0100 @@ -17,7 +17,7 @@ Name: youtube-dl -Version: 2016.11.14.1 +Version: 2016.11.18 Release: 0 Summary: A tool for downloading from video sites for offline watching License: SUSE-Public-Domain and CC-BY-SA-3.0 ++++++ youtube-dl-2016.11.14.1.tar.gz -> youtube-dl-2016.11.18.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/ChangeLog new/youtube-dl/ChangeLog --- old/youtube-dl/ChangeLog 2016-11-13 20:48:14.000000000 +0100 +++ new/youtube-dl/ChangeLog 2016-11-17 18:25:21.000000000 +0100 @@ -1,3 +1,11 @@ +version 2016.11.18 + +Extractors +* [youtube:live] Relax _VALID_URL (#11164) +* [openload] Fix extraction (#10408, #11122) +* [vlive] Prefer locale over language for subtitles id (#11203) + + version 2016.11.14.1 Core diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/bash-completion.py new/youtube-dl/devscripts/bash-completion.py --- old/youtube-dl/devscripts/bash-completion.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/bash-completion.py 2016-11-13 22:39:54.000000000 +0100 @@ -25,5 +25,6 @@ filled_template = template.replace("{{flags}}", " ".join(opts_flag)) f.write(filled_template) + parser = youtube_dl.parseOpts()[0] build_completion(parser) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/create-github-release.py new/youtube-dl/devscripts/create-github-release.py --- old/youtube-dl/devscripts/create-github-release.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/create-github-release.py 2016-11-13 22:39:54.000000000 +0100 @@ -2,11 +2,13 @@ from __future__ import unicode_literals import base64 +import io import json import mimetypes import netrc import optparse import os +import re import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) @@ -90,16 +92,23 @@ def main(): - parser = optparse.OptionParser(usage='%prog VERSION BUILDPATH') + parser = optparse.OptionParser(usage='%prog CHANGELOG VERSION BUILDPATH') options, args = parser.parse_args() - if len(args) != 2: + if len(args) != 3: parser.error('Expected a version and a build directory') - version, build_path = args + changelog_file, version, build_path = args + + with io.open(changelog_file, encoding='utf-8') as inf: + changelog = inf.read() + + mobj = re.search(r'(?s)version %s\n{2}(.+?)\n{3}' % version, changelog) + body = mobj.group(1) if mobj else '' releaser = GitHubReleaser() - new_release = releaser.create_release(version, name='youtube-dl %s' % version) + new_release = releaser.create_release( + version, name='youtube-dl %s' % version, body=body) release_id = new_release['id'] for asset in os.listdir(build_path): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/fish-completion.py new/youtube-dl/devscripts/fish-completion.py --- old/youtube-dl/devscripts/fish-completion.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/fish-completion.py 2016-11-13 22:39:54.000000000 +0100 @@ -44,5 +44,6 @@ with open(FISH_COMPLETION_FILE, 'w') as f: f.write(filled_template) + parser = youtube_dl.parseOpts()[0] build_completion(parser) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/generate_aes_testdata.py new/youtube-dl/devscripts/generate_aes_testdata.py --- old/youtube-dl/devscripts/generate_aes_testdata.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/generate_aes_testdata.py 2016-11-13 22:39:54.000000000 +0100 @@ -23,6 +23,7 @@ out, _ = prog.communicate(secret_msg) return out + iv = key = [0x20, 0x15] + 14 * [0] r = openssl_encode('aes-128-cbc', key, iv) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/gh-pages/update-sites.py new/youtube-dl/devscripts/gh-pages/update-sites.py --- old/youtube-dl/devscripts/gh-pages/update-sites.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/gh-pages/update-sites.py 2016-11-13 22:39:54.000000000 +0100 @@ -32,5 +32,6 @@ with open('supportedsites.html', 'w', encoding='utf-8') as sitesf: sitesf.write(template) + if __name__ == '__main__': main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/make_contributing.py new/youtube-dl/devscripts/make_contributing.py --- old/youtube-dl/devscripts/make_contributing.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/make_contributing.py 2016-11-13 22:39:54.000000000 +0100 @@ -28,5 +28,6 @@ with io.open(outfile, 'w', encoding='utf-8') as outf: outf.write(out) + if __name__ == '__main__': main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/make_lazy_extractors.py new/youtube-dl/devscripts/make_lazy_extractors.py --- old/youtube-dl/devscripts/make_lazy_extractors.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/make_lazy_extractors.py 2016-11-13 22:39:54.000000000 +0100 @@ -59,6 +59,7 @@ s += make_valid_template.format(valid_url=ie._make_valid_url()) return s + # find the correct sorting and add the required base classes so that sublcasses # can be correctly created classes = _ALL_CLASSES[:-1] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/make_supportedsites.py new/youtube-dl/devscripts/make_supportedsites.py --- old/youtube-dl/devscripts/make_supportedsites.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/make_supportedsites.py 2016-11-13 22:39:54.000000000 +0100 @@ -41,5 +41,6 @@ with io.open(outfile, 'w', encoding='utf-8') as outf: outf.write(out) + if __name__ == '__main__': main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/prepare_manpage.py new/youtube-dl/devscripts/prepare_manpage.py --- old/youtube-dl/devscripts/prepare_manpage.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/prepare_manpage.py 2016-11-13 22:39:54.000000000 +0100 @@ -74,5 +74,6 @@ return ret + if __name__ == '__main__': main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/release.sh new/youtube-dl/devscripts/release.sh --- old/youtube-dl/devscripts/release.sh 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/release.sh 2016-11-13 22:39:54.000000000 +0100 @@ -110,7 +110,7 @@ for f in $RELEASE_FILES; do gpg --passphrase-repeat 5 --detach-sig "build/$version/$f"; done ROOT=$(pwd) -python devscripts/create-github-release.py $version "$ROOT/build/$version" +python devscripts/create-github-release.py ChangeLog $version "$ROOT/build/$version" ssh ytdl@yt-dl.org "sh html/update_latest.sh $version" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/devscripts/zsh-completion.py new/youtube-dl/devscripts/zsh-completion.py --- old/youtube-dl/devscripts/zsh-completion.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/devscripts/zsh-completion.py 2016-11-13 22:39:54.000000000 +0100 @@ -44,5 +44,6 @@ with open(ZSH_COMPLETION_FILE, "w") as f: f.write(template) + parser = youtube_dl.parseOpts()[0] build_completion(parser) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_InfoExtractor.py new/youtube-dl/test/test_InfoExtractor.py --- old/youtube-dl/test/test_InfoExtractor.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_InfoExtractor.py 2016-11-13 22:39:54.000000000 +0100 @@ -84,5 +84,6 @@ self.assertRaises(ExtractorError, self.ie._download_json, uri, None) self.assertEqual(self.ie._download_json(uri, None, fatal=False), None) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_aes.py new/youtube-dl/test/test_aes.py --- old/youtube-dl/test/test_aes.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_aes.py 2016-11-13 22:39:54.000000000 +0100 @@ -51,5 +51,6 @@ decrypted = (aes_decrypt_text(encrypted, password, 32)) self.assertEqual(decrypted, self.secret_msg) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_download.py new/youtube-dl/test/test_download.py --- old/youtube-dl/test/test_download.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_download.py 2016-11-13 22:39:54.000000000 +0100 @@ -60,6 +60,7 @@ with open(fn, 'rb') as f: return hashlib.md5(f.read()).hexdigest() + defs = gettestcases() @@ -217,6 +218,7 @@ return test_template + # And add them to TestDownload for n, test_case in enumerate(defs): test_method = generator(test_case) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_execution.py new/youtube-dl/test/test_execution.py --- old/youtube-dl/test/test_execution.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_execution.py 2016-11-13 22:39:54.000000000 +0100 @@ -39,5 +39,6 @@ _, stderr = p.communicate() self.assertFalse(stderr) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_http.py new/youtube-dl/test/test_http.py --- old/youtube-dl/test/test_http.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_http.py 2016-11-13 22:39:54.000000000 +0100 @@ -169,5 +169,6 @@ # b'xn--fiq228c' is '中文'.encode('idna') self.assertEqual(response, 'normal: http://xn--fiq228c.tw/') + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_iqiyi_sdk_interpreter.py new/youtube-dl/test/test_iqiyi_sdk_interpreter.py --- old/youtube-dl/test/test_iqiyi_sdk_interpreter.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_iqiyi_sdk_interpreter.py 2016-11-13 22:39:54.000000000 +0100 @@ -43,5 +43,6 @@ ie._login() self.assertTrue('unable to log in:' in logger.messages[0]) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_jsinterp.py new/youtube-dl/test/test_jsinterp.py --- old/youtube-dl/test/test_jsinterp.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_jsinterp.py 2016-11-13 22:39:54.000000000 +0100 @@ -104,6 +104,14 @@ }''') self.assertEqual(jsi.call_function('x'), [20, 20, 30, 40, 50]) + def test_call(self): + jsi = JSInterpreter(''' + function x() { return 2; } + function y(a) { return x() + a; } + function z() { return y(3); } + ''') + self.assertEqual(jsi.call_function('z'), 5) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_utils.py new/youtube-dl/test/test_utils.py --- old/youtube-dl/test/test_utils.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_utils.py 2016-11-13 22:39:54.000000000 +0100 @@ -1075,5 +1075,6 @@ self.assertEqual(get_element_by_class('foo', html), 'nice') self.assertEqual(get_element_by_class('no-such-class', html), None) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_verbose_output.py new/youtube-dl/test/test_verbose_output.py --- old/youtube-dl/test/test_verbose_output.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_verbose_output.py 2016-11-13 22:39:54.000000000 +0100 @@ -66,5 +66,6 @@ self.assertTrue(b'-p' in serr) self.assertTrue(b'secret' not in serr) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_write_annotations.py new/youtube-dl/test/test_write_annotations.py --- old/youtube-dl/test/test_write_annotations.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_write_annotations.py 2016-11-13 22:39:54.000000000 +0100 @@ -24,6 +24,7 @@ super(YoutubeDL, self).__init__(*args, **kwargs) self.to_stderr = self.to_screen + params = get_params({ 'writeannotations': True, 'skip_download': True, @@ -74,5 +75,6 @@ def tearDown(self): try_rm(ANNOTATIONS_FILE) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_youtube_lists.py new/youtube-dl/test/test_youtube_lists.py --- old/youtube-dl/test/test_youtube_lists.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_youtube_lists.py 2016-11-13 22:39:54.000000000 +0100 @@ -66,5 +66,6 @@ for entry in result['entries']: self.assertTrue(entry.get('title')) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/test/test_youtube_signature.py new/youtube-dl/test/test_youtube_signature.py --- old/youtube-dl/test/test_youtube_signature.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/test/test_youtube_signature.py 2016-11-13 22:39:54.000000000 +0100 @@ -114,6 +114,7 @@ test_func.__name__ = str('test_signature_' + stype + '_' + test_id) setattr(TestSignature, test_func.__name__, test_func) + for test_spec in _TESTS: make_tfunc(*test_spec) Files old/youtube-dl/youtube-dl and new/youtube-dl/youtube-dl differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/__init__.py new/youtube-dl/youtube_dl/__init__.py --- old/youtube-dl/youtube_dl/__init__.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/youtube_dl/__init__.py 2016-11-13 22:39:54.000000000 +0100 @@ -95,8 +95,7 @@ write_string('[debug] Batch file urls: ' + repr(batch_urls) + '\n') except IOError: sys.exit('ERROR: batch file could not be read') - all_urls = batch_urls + args - all_urls = [url.strip() for url in all_urls] + all_urls = batch_urls + [url.strip() for url in args] # batch_urls are already striped in read_batch_urls _enc = preferredencoding() all_urls = [url.decode(_enc, 'ignore') if isinstance(url, bytes) else url for url in all_urls] @@ -450,4 +449,5 @@ except KeyboardInterrupt: sys.exit('\nERROR: Interrupted by user') + __all__ = ['main', 'YoutubeDL', 'gen_extractors', 'list_extractors'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/aes.py new/youtube-dl/youtube_dl/aes.py --- old/youtube-dl/youtube_dl/aes.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/youtube_dl/aes.py 2016-11-13 22:39:54.000000000 +0100 @@ -174,6 +174,7 @@ return plaintext + RCON = (0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36) SBOX = (0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, @@ -328,4 +329,5 @@ break return data + __all__ = ['aes_encrypt', 'key_expansion', 'aes_ctr_decrypt', 'aes_cbc_decrypt', 'aes_decrypt_text'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/compat.py new/youtube-dl/youtube_dl/compat.py --- old/youtube-dl/youtube_dl/compat.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/youtube_dl/compat.py 2016-11-13 22:39:54.000000000 +0100 @@ -2491,6 +2491,7 @@ def doctype(self, name, pubid, system): pass + if sys.version_info[0] >= 3: def compat_etree_fromstring(text): return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder())) @@ -2787,6 +2788,7 @@ return real_add_option(self, *bargs, **bkwargs) optparse.OptionGroup.add_option = _compat_add_option + if hasattr(shutil, 'get_terminal_size'): # Python >= 3.3 compat_get_terminal_size = shutil.get_terminal_size else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/downloader/external.py new/youtube-dl/youtube_dl/downloader/external.py --- old/youtube-dl/youtube_dl/downloader/external.py 2016-11-13 20:27:41.000000000 +0100 +++ new/youtube-dl/youtube_dl/downloader/external.py 2016-11-13 22:39:54.000000000 +0100 @@ -293,6 +293,7 @@ class AVconvFD(FFmpegFD): pass + _BY_NAME = dict( (klass.get_basename(), klass) for name, klass in globals().items() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/youtube-dl/youtube_dl/extractor/openload.py new/youtube-dl/youtube_dl/extractor/openload.py --- old/youtube-dl/youtube_dl/extractor/openload.py 2016-11-13 20:27:42.000000000 +0100 +++ new/youtube-dl/youtube_dl/extractor/openload.py 2016-11-13 22:39:54.000000000 +0100 @@ -1,6 +1,8 @@ # coding: utf-8 from __future__ import unicode_literals, division +import re + from .common import InfoExtractor from ..compat import ( compat_chr, @@ -10,6 +12,10 @@ determine_ext, ExtractorError, ) +from ..jsinterp import ( + JSInterpreter, + _NAME_RE +) class OpenloadIE(InfoExtractor): @@ -56,6 +62,44 @@ 'only_matching': True, }] + def openload_decode(self, txt): + symbol_dict = { + '(゚Д゚) [゚Θ゚]': '_', + '(゚Д゚) [゚ω゚ノ]': 'a', + '(゚Д゚) [゚Θ゚ノ]': 'b', + '(゚Д゚) [\'c\']': 'c', + '(゚Д゚) [゚ー゚ノ]': 'd', + '(゚Д゚) [゚Д゚ノ]': 'e', + '(゚Д゚) [1]': 'f', + '(゚Д゚) [\'o\']': 'o', + '(o゚ー゚o)': 'u', + '(゚Д゚) [\'c\']': 'c', + '((゚ー゚) + (o^_^o))': '7', + '((o^_^o) +(o^_^o) +(c^_^o))': '6', + '((゚ー゚) + (゚Θ゚))': '5', + '(-~3)': '4', + '(-~-~1)': '3', + '(-~1)': '2', + '(-~0)': '1', + '((c^_^o)-(c^_^o))': '0', + } + delim = '(゚Д゚)[゚ε゚]+' + end_token = '(゚Д゚)[゚o゚]' + symbols = '|'.join(map(re.escape, symbol_dict.keys())) + txt = re.sub('(%s)\+\s?' % symbols, lambda m: symbol_dict[m.group(1)], txt) + ret = '' + for aacode in re.findall(r'{0}\+\s?{1}(.*?){0}'.format(re.escape(end_token), re.escape(delim)), txt): + for aachar in aacode.split(delim): + if aachar.isdigit(): + ret += compat_chr(int(aachar, 8)) + else: + m = re.match(r'^u([\da-f]{4})$', aachar) + if m: + ret += compat_chr(int(m.group(1), 16)) + else: + self.report_warning("Cannot decode: %s" % aachar) + return ret + def _real_extract(self, url): video_id = self._match_id(url) webpage = self._download_webpage('https://openload.co/embed/%s/' % video_id, video_id) @@ -70,19 +114,26 @@ r']*>([^<]+)</span>\s*]*>[^<]+</span>\s*]+id="streamurl"', webpage, 'encrypted data') - magic = compat_ord(enc_data[-1]) + enc_code = self._html_search_regex(r'