[brightcove] Improve and generalize brightcove URL extraction from JS
This commit is contained in:
		@@ -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
 | 
			
		||||
 | 
			
		||||
@@ -191,16 +213,9 @@ class BrightcoveIE(InfoExtractor):
 | 
			
		||||
        if matches:
 | 
			
		||||
            return list(filter(None, [cls._build_brighcove_url(m) for m in matches]))
 | 
			
		||||
 | 
			
		||||
        custombcs = re.findall(r'customBC.\createVideo\((.+?)\);',webpage)
 | 
			
		||||
        if custombcs:
 | 
			
		||||
            urls = []
 | 
			
		||||
            for match in custombcs:
 | 
			
		||||
                # brightcove playerkey begins with AQ and is 50 characters in length,
 | 
			
		||||
                # however it's appended to itself in places, so truncate.
 | 
			
		||||
                f = re.search(r'["\'](AQ[^"\']{48}).*?["\'](\d+)["\']', match)
 | 
			
		||||
                if f:
 | 
			
		||||
                    urls.append('brightcove:playerKey='+f.group(1)+'&%40videoPlayer='+f.group(2))
 | 
			
		||||
            return urls
 | 
			
		||||
        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, {})
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user