diff options
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 4 | ||||
| -rw-r--r-- | youtube_dl/jsinterp.py | 21 | 
2 files changed, 13 insertions, 12 deletions
| diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 0bbce71a3..1855fca7f 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1569,9 +1569,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):               r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\('),              jscode, 'Initial JS player signature function name', group='sig') -        # temporary (please) hack for player 6ed0d907 #32314 -        ah = 'var AH={LR:function(a,b){var c=a[0];a[0]=a[b%a.length];a[b%a.length]=c},QV:function(a){a.reverse()},pO:function(a,b){a.splice(0,b)}};' -        jsi = JSInterpreter(ah + jscode) +        jsi = JSInterpreter(jscode)          initial_function = jsi.extract_function(funcname) diff --git a/youtube_dl/jsinterp.py b/youtube_dl/jsinterp.py index 00f219440..1ba9c3d67 100644 --- a/youtube_dl/jsinterp.py +++ b/youtube_dl/jsinterp.py @@ -940,15 +940,18 @@ class JSInterpreter(object):      def extract_object(self, objname):          _FUNC_NAME_RE = r'''(?:[a-zA-Z$0-9]+|"[a-zA-Z$0-9]+"|'[a-zA-Z$0-9]+')'''          obj = {} -        obj_m = re.search( -            r'''(?xs) -                (?:{0}\s*\.\s*{1}|{1}\s*=\s*\{{\s* -                    (?P<fields>({2}\s*:\s*function\s*\(.*?\)\s*\{{.*?}}(?:,\s*)?)*) -                }}\s*); -            '''.format(_NAME_RE, re.escape(objname), _FUNC_NAME_RE), -            self.code) -        fields = obj_m and obj_m.group('fields') -        if fields is None: +        fields = None +        for obj_m in re.finditer( +                r'''(?xs) +                    {0}\s*\.\s*{1}|{1}\s*=\s*\{{\s* +                        (?P<fields>({2}\s*:\s*function\s*\(.*?\)\s*\{{.*?}}(?:,\s*)?)*) +                    }}\s*; +                '''.format(_NAME_RE, re.escape(objname), _FUNC_NAME_RE), +                self.code): +            fields = obj_m.group('fields') +            if fields: +                break +        else:              raise self.Exception('Could not find object ' + objname)          # Currently, it only supports function definitions          fields_m = re.finditer( | 
