diff options
Diffstat (limited to 'youtube_dl/extractor/brightcove.py')
| -rw-r--r-- | youtube_dl/extractor/brightcove.py | 31 | 
1 files changed, 29 insertions, 2 deletions
| diff --git a/youtube_dl/extractor/brightcove.py b/youtube_dl/extractor/brightcove.py index 4f60d5366..d768f99e6 100644 --- a/youtube_dl/extractor/brightcove.py +++ b/youtube_dl/extractor/brightcove.py @@ -156,6 +156,28 @@ class BrightcoveIE(InfoExtractor):          linkBase = find_param('linkBaseURL')          if linkBase is not None:              params['linkBaseURL'] = linkBase +        return cls._make_brightcove_url(params) + +    @classmethod +    def _build_brighcove_url_from_js(cls, object_js): +        # The layout of JS is as follows: +        # customBC.createVideo = function (width, height, playerID, playerKey, videoPlayer, VideoRandomID) { +        #   // build Brightcove <object /> XML +        # } +        m = re.search( +            r'''(?x)customBC.\createVideo\( +                .*?                                                  # skipping width and height +                ["\'](?P<playerID>\d+)["\']\s*,\s*                   # playerID +                ["\'](?P<playerKey>AQ[^"\']{48})[^"\']*["\']\s*,\s*  # playerKey begins with AQ and is 50 characters +                                                                     # in length, however it's appended to itself +                                                                     # in places, so truncate +                ["\'](?P<videoID>\d+)["\']                           # @videoPlayer +            ''', object_js) +        if m: +            return cls._make_brightcove_url(m.groupdict()) + +    @classmethod +    def _make_brightcove_url(cls, params):          data = compat_urllib_parse.urlencode(params)          return cls._FEDERATED_URL_TEMPLATE % data @@ -172,7 +194,7 @@ class BrightcoveIE(InfoExtractor):          """Return a list of all Brightcove URLs from the webpage """          url_m = re.search( -            r'<meta\s+property="og:video"\s+content="(https?://(?:secure|c)\.brightcove.com/[^"]+)"', +            r'<meta\s+property=[\'"]og:video[\'"]\s+content=[\'"](https?://(?:secure|c)\.brightcove.com/[^\'"]+)[\'"]',              webpage)          if url_m:              url = unescapeHTML(url_m.group(1)) @@ -188,7 +210,12 @@ class BrightcoveIE(InfoExtractor):                  [^>]*?>\s*<param\s+name="movie"\s+value="https?://[^/]*brightcove\.com/              ).+?>\s*</object>''',              webpage) -        return list(filter(None, [cls._build_brighcove_url(m) for m in matches])) +        if matches: +            return list(filter(None, [cls._build_brighcove_url(m) for m in matches])) + +        return list(filter(None, [ +            cls._build_brighcove_url_from_js(custom_bc) +            for custom_bc in re.findall(r'(customBC\.createVideo\(.+?\);)', webpage)]))      def _real_extract(self, url):          url, smuggled_data = unsmuggle_url(url, {}) | 
