浏览代码

[wistia] reduce embed extraction false positives and support inline embeds(closes #22931)

Remita Amine 5 年之前
父节点
当前提交
152f22920d
共有 1 个文件被更改,包括 8 次插入7 次删除
  1. 8 7
      youtube_dl/extractor/wistia.py

+ 8 - 7
youtube_dl/extractor/wistia.py

@@ -12,7 +12,7 @@ from ..utils import (
 
 
 
 
 class WistiaIE(InfoExtractor):
 class WistiaIE(InfoExtractor):
-    _VALID_URL = r'(?:wistia:|https?://(?:fast\.)?wistia\.(?:net|com)/embed/(?:iframe|medias)/)(?P<id>[a-z0-9]+)'
+    _VALID_URL = r'(?:wistia:|https?://(?:fast\.)?wistia\.(?:net|com)/embed/(?:iframe|medias)/)(?P<id>[a-z0-9]{10})'
     _API_URL = 'http://fast.wistia.com/embed/medias/%s.json'
     _API_URL = 'http://fast.wistia.com/embed/medias/%s.json'
     _IFRAME_URL = 'http://fast.wistia.net/embed/iframe/%s'
     _IFRAME_URL = 'http://fast.wistia.net/embed/iframe/%s'
 
 
@@ -43,25 +43,26 @@ class WistiaIE(InfoExtractor):
         'only_matching': True,
         'only_matching': True,
     }]
     }]
 
 
+    # https://wistia.com/support/embed-and-share/video-on-your-website
     @staticmethod
     @staticmethod
     def _extract_url(webpage):
     def _extract_url(webpage):
         match = re.search(
         match = re.search(
-            r'<(?:meta[^>]+?content|iframe[^>]+?src)=(["\'])(?P<url>(?:https?:)?//(?:fast\.)?wistia\.(?:net|com)/embed/iframe/.+?)\1', webpage)
+            r'<(?:meta[^>]+?content|(?:iframe|script)[^>]+?src)=["\'](?P<url>(?:https?:)?//(?:fast\.)?wistia\.(?:net|com)/embed/(?:iframe|medias)/[a-z0-9]{10})', webpage)
         if match:
         if match:
             return unescapeHTML(match.group('url'))
             return unescapeHTML(match.group('url'))
 
 
-        match = re.search(r'(?:id=["\']wistia_|data-wistia-?id=["\']|Wistia\.embed\(["\'])(?P<id>[^"\']+)', webpage)
-        if match:
-            return 'wistia:%s' % match.group('id')
-
         match = re.search(
         match = re.search(
             r'''(?sx)
             r'''(?sx)
                 <script[^>]+src=(["'])(?:https?:)?//fast\.wistia\.com/assets/external/E-v1\.js\1[^>]*>.*?
                 <script[^>]+src=(["'])(?:https?:)?//fast\.wistia\.com/assets/external/E-v1\.js\1[^>]*>.*?
-                <div[^>]+class=(["']).*?\bwistia_async_(?P<id>[a-z0-9]+)\b.*?\2
+                <div[^>]+class=(["']).*?\bwistia_async_(?P<id>[a-z0-9]{10})\b.*?\2
             ''', webpage)
             ''', webpage)
         if match:
         if match:
             return 'wistia:%s' % match.group('id')
             return 'wistia:%s' % match.group('id')
 
 
+        match = re.search(r'(?:data-wistia-?id=["\']|Wistia\.embed\(["\']|id=["\']wistia_)(?P<id>[a-z0-9]{10})', webpage)
+        if match:
+            return 'wistia:%s' % match.group('id')
+
     def _real_extract(self, url):
     def _real_extract(self, url):
         video_id = self._match_id(url)
         video_id = self._match_id(url)