2
0
Эх сурвалжийг харах

[common] Relax JWPlayer regex and remove duplicate urls(#12768)

Remita Amine 8 жил өмнө
parent
commit
bf1b87cd91

+ 8 - 2
youtube_dl/extractor/common.py

@@ -2182,7 +2182,7 @@ class InfoExtractor(object):
 
 
     def _find_jwplayer_data(self, webpage, video_id=None, transform_source=js_to_json):
     def _find_jwplayer_data(self, webpage, video_id=None, transform_source=js_to_json):
         mobj = re.search(
         mobj = re.search(
-            r'jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\)\.setup\s*\((?P<options>[^)]+)\)',
+            r'(?s)jwplayer\((?P<quote>[\'"])[^\'" ]+(?P=quote)\).*?\.setup\s*\((?P<options>[^)]+)\)',
             webpage)
             webpage)
         if mobj:
         if mobj:
             try:
             try:
@@ -2258,11 +2258,17 @@ class InfoExtractor(object):
 
 
     def _parse_jwplayer_formats(self, jwplayer_sources_data, video_id=None,
     def _parse_jwplayer_formats(self, jwplayer_sources_data, video_id=None,
                                 m3u8_id=None, mpd_id=None, rtmp_params=None, base_url=None):
                                 m3u8_id=None, mpd_id=None, rtmp_params=None, base_url=None):
+        urls = []
         formats = []
         formats = []
         for source in jwplayer_sources_data:
         for source in jwplayer_sources_data:
-            source_url = self._proto_relative_url(source['file'])
+            source_url = self._proto_relative_url(source.get('file'))
+            if not source_url:
+                continue
             if base_url:
             if base_url:
                 source_url = compat_urlparse.urljoin(base_url, source_url)
                 source_url = compat_urlparse.urljoin(base_url, source_url)
+            if source_url in urls:
+                continue
+            urls.append(source_url)
             source_type = source.get('type') or ''
             source_type = source.get('type') or ''
             ext = mimetype2ext(source_type) or determine_ext(source_url)
             ext = mimetype2ext(source_type) or determine_ext(source_url)
             if source_type == 'hls' or ext == 'm3u8':
             if source_type == 'hls' or ext == 'm3u8':