mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 04:57:07 -05:00 
			
		
		
		
	[youtube:live] Add extractor (Closes #8959)
This commit is contained in:
		@@ -1911,7 +1911,8 @@ class YoutubeChannelIE(YoutubePlaylistBaseInfoExtractor):
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def suitable(cls, url):
 | 
			
		||||
        return False if YoutubePlaylistsIE.suitable(url) else super(YoutubeChannelIE, cls).suitable(url)
 | 
			
		||||
        return (False if YoutubePlaylistsIE.suitable(url) or YoutubeLiveIE.suitable(url)
 | 
			
		||||
                else super(YoutubeChannelIE, cls).suitable(url))
 | 
			
		||||
 | 
			
		||||
    def _real_extract(self, url):
 | 
			
		||||
        channel_id = self._match_id(url)
 | 
			
		||||
@@ -1986,6 +1987,51 @@ class YoutubeUserIE(YoutubeChannelIE):
 | 
			
		||||
            return super(YoutubeUserIE, cls).suitable(url)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class YoutubeLiveIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
    IE_DESC = 'YouTube.com live streams'
 | 
			
		||||
    _VALID_URL = r'(?P<base_url>https?://(?:\w+\.)?youtube\.com/(?:user|channel)/(?P<id>[^/]+))/live'
 | 
			
		||||
    IE_NAME = 'youtube:live'
 | 
			
		||||
 | 
			
		||||
    _TESTS = [{
 | 
			
		||||
        'url': 'http://www.youtube.com/user/TheYoungTurks/live',
 | 
			
		||||
        'info_dict': {
 | 
			
		||||
            'id': 'a48o2S1cPoo',
 | 
			
		||||
            'ext': 'mp4',
 | 
			
		||||
            'title': 'The Young Turks - Live Main Show',
 | 
			
		||||
            'uploader': 'The Young Turks',
 | 
			
		||||
            'uploader_id': 'TheYoungTurks',
 | 
			
		||||
            'uploader_url': 're:https?://(?:www\.)?youtube\.com/user/TheYoungTurks',
 | 
			
		||||
            'upload_date': '20150715',
 | 
			
		||||
            'license': 'Standard YouTube License',
 | 
			
		||||
            'description': 'md5:438179573adcdff3c97ebb1ee632b891',
 | 
			
		||||
            'categories': ['News & Politics'],
 | 
			
		||||
            'tags': ['Cenk Uygur (TV Program Creator)', 'The Young Turks (Award-Winning Work)', 'Talk Show (TV Genre)'],
 | 
			
		||||
            'like_count': int,
 | 
			
		||||
            'dislike_count': int,
 | 
			
		||||
        },
 | 
			
		||||
        'params': {
 | 
			
		||||
            'skip_download': True,
 | 
			
		||||
        },
 | 
			
		||||
    }, {
 | 
			
		||||
        'url': 'http://www.youtube.com/channel/UC1yBKRuGpC1tSM73A0ZjYjQ/live',
 | 
			
		||||
        'only_matching': True,
 | 
			
		||||
    }]
 | 
			
		||||
 | 
			
		||||
    def _real_extract(self, url):
 | 
			
		||||
        mobj = re.match(self._VALID_URL, url)
 | 
			
		||||
        channel_id = mobj.group('id')
 | 
			
		||||
        base_url = mobj.group('base_url')
 | 
			
		||||
        webpage = self._download_webpage(url, channel_id, fatal=False)
 | 
			
		||||
        if webpage:
 | 
			
		||||
            page_type = self._og_search_property(
 | 
			
		||||
                'type', webpage, 'page type', default=None)
 | 
			
		||||
            video_id = self._html_search_meta(
 | 
			
		||||
                'videoId', webpage, 'video id', default=None)
 | 
			
		||||
            if page_type == 'video' and video_id and re.match(r'^[0-9A-Za-z_-]{11}$', video_id):
 | 
			
		||||
                return self.url_result(video_id, YoutubeIE.ie_key())
 | 
			
		||||
        return self.url_result(base_url)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class YoutubePlaylistsIE(YoutubePlaylistsBaseInfoExtractor):
 | 
			
		||||
    IE_DESC = 'YouTube.com user/channel playlists'
 | 
			
		||||
    _VALID_URL = r'https?://(?:\w+\.)?youtube\.com/(?:user|channel)/(?P<id>[^/]+)/playlists'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user