[facebook] Add support for plugin video embeds and multiple embeds (closes #13493)
This commit is contained in:
		
							parent
							
								
									bf2dc9cc6e
								
							
						
					
					
						commit
						0646e34c7d
					
				
					 3 changed files with 17 additions and 16 deletions
				
			
		| 
						 | 
					@ -84,9 +84,10 @@ class BuzzFeedIE(InfoExtractor):
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            entries.append(self.url_result(video['url']))
 | 
					            entries.append(self.url_result(video['url']))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        facebook_url = FacebookIE._extract_url(webpage)
 | 
					        facebook_urls = FacebookIE._extract_urls(webpage)
 | 
				
			||||||
        if facebook_url:
 | 
					        entries.extend([
 | 
				
			||||||
            entries.append(self.url_result(facebook_url))
 | 
					            self.url_result(facebook_url)
 | 
				
			||||||
 | 
					            for facebook_url in facebook_urls])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
            '_type': 'playlist',
 | 
					            '_type': 'playlist',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -203,19 +203,19 @@ class FacebookIE(InfoExtractor):
 | 
				
			||||||
    }]
 | 
					    }]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def _extract_url(webpage):
 | 
					    def _extract_urls(webpage):
 | 
				
			||||||
        mobj = re.search(
 | 
					        urls = []
 | 
				
			||||||
            r'<iframe[^>]+?src=(["\'])(?P<url>https://www\.facebook\.com/video/embed.+?)\1', webpage)
 | 
					        for mobj in re.finditer(
 | 
				
			||||||
        if mobj is not None:
 | 
					                r'<iframe[^>]+?src=(["\'])(?P<url>https?://www\.facebook\.com/(?:video/embed|plugins/video\.php).+?)\1',
 | 
				
			||||||
            return mobj.group('url')
 | 
					                webpage):
 | 
				
			||||||
 | 
					            urls.append(mobj.group('url'))
 | 
				
			||||||
        # Facebook API embed
 | 
					        # Facebook API embed
 | 
				
			||||||
        # see https://developers.facebook.com/docs/plugins/embedded-video-player
 | 
					        # see https://developers.facebook.com/docs/plugins/embedded-video-player
 | 
				
			||||||
        mobj = re.search(r'''(?x)<div[^>]+
 | 
					        for mobj in re.finditer(r'''(?x)<div[^>]+
 | 
				
			||||||
                class=(?P<q1>[\'"])[^\'"]*\bfb-(?:video|post)\b[^\'"]*(?P=q1)[^>]+
 | 
					                class=(?P<q1>[\'"])[^\'"]*\bfb-(?:video|post)\b[^\'"]*(?P=q1)[^>]+
 | 
				
			||||||
                data-href=(?P<q2>[\'"])(?P<url>(?:https?:)?//(?:www\.)?facebook.com/.+?)(?P=q2)''', webpage)
 | 
					                data-href=(?P<q2>[\'"])(?P<url>(?:https?:)?//(?:www\.)?facebook.com/.+?)(?P=q2)''', webpage):
 | 
				
			||||||
        if mobj is not None:
 | 
					            urls.append(mobj.group('url'))
 | 
				
			||||||
            return mobj.group('url')
 | 
					        return urls
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _login(self):
 | 
					    def _login(self):
 | 
				
			||||||
        (useremail, password) = self._get_login_info()
 | 
					        (useremail, password) = self._get_login_info()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2222,9 +2222,9 @@ class GenericIE(InfoExtractor):
 | 
				
			||||||
            return self.url_result(mobj.group('url'))
 | 
					            return self.url_result(mobj.group('url'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Look for embedded Facebook player
 | 
					        # Look for embedded Facebook player
 | 
				
			||||||
        facebook_url = FacebookIE._extract_url(webpage)
 | 
					        facebook_urls = FacebookIE._extract_urls(webpage)
 | 
				
			||||||
        if facebook_url is not None:
 | 
					        if facebook_urls:
 | 
				
			||||||
            return self.url_result(facebook_url, 'Facebook')
 | 
					            return self.playlist_from_matches(facebook_urls, video_id, video_title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Look for embedded VK player
 | 
					        # Look for embedded VK player
 | 
				
			||||||
        mobj = re.search(r'<iframe[^>]+?src=(["\'])(?P<url>https?://vk\.com/video_ext\.php.+?)\1', webpage)
 | 
					        mobj = re.search(r'<iframe[^>]+?src=(["\'])(?P<url>https?://vk\.com/video_ext\.php.+?)\1', webpage)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue