mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-11-01 09:26:45 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# coding: utf-8
 | 
						|
from __future__ import unicode_literals
 | 
						|
 | 
						|
from .common import InfoExtractor
 | 
						|
from ..compat import compat_str
 | 
						|
from ..utils import (
 | 
						|
    try_get,
 | 
						|
    urljoin,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
class PhilharmonieDeParisIE(InfoExtractor):
 | 
						|
    IE_DESC = 'Philharmonie de Paris'
 | 
						|
    _VALID_URL = r'''(?x)
 | 
						|
                    https?://
 | 
						|
                        (?:
 | 
						|
                            live\.philharmoniedeparis\.fr/(?:[Cc]oncert/|misc/Playlist\.ashx\?id=)|
 | 
						|
                            pad\.philharmoniedeparis\.fr/doc/CIMU/
 | 
						|
                        )
 | 
						|
                        (?P<id>\d+)
 | 
						|
                    '''
 | 
						|
    _TESTS = [{
 | 
						|
        'url': 'http://pad.philharmoniedeparis.fr/doc/CIMU/1086697/jazz-a-la-villette-knower',
 | 
						|
        'md5': 'a0a4b195f544645073631cbec166a2c2',
 | 
						|
        'info_dict': {
 | 
						|
            'id': '1086697',
 | 
						|
            'ext': 'mp4',
 | 
						|
            'title': 'Jazz à la Villette : Knower',
 | 
						|
        },
 | 
						|
    }, {
 | 
						|
        'url': 'http://live.philharmoniedeparis.fr/concert/1032066.html',
 | 
						|
        'info_dict': {
 | 
						|
            'id': '1032066',
 | 
						|
            'title': 'md5:0a031b81807b3593cffa3c9a87a167a0',
 | 
						|
        },
 | 
						|
        'playlist_mincount': 2,
 | 
						|
    }, {
 | 
						|
        'url': 'http://live.philharmoniedeparis.fr/Concert/1030324.html',
 | 
						|
        'only_matching': True,
 | 
						|
    }, {
 | 
						|
        'url': 'http://live.philharmoniedeparis.fr/misc/Playlist.ashx?id=1030324&track=&lang=fr',
 | 
						|
        'only_matching': True,
 | 
						|
    }]
 | 
						|
    _LIVE_URL = 'https://live.philharmoniedeparis.fr'
 | 
						|
 | 
						|
    def _real_extract(self, url):
 | 
						|
        video_id = self._match_id(url)
 | 
						|
 | 
						|
        config = self._download_json(
 | 
						|
            '%s/otoPlayer/config.ashx' % self._LIVE_URL, video_id, query={
 | 
						|
                'id': video_id,
 | 
						|
                'lang': 'fr-FR',
 | 
						|
            })
 | 
						|
 | 
						|
        def extract_entry(source):
 | 
						|
            if not isinstance(source, dict):
 | 
						|
                return
 | 
						|
            title = source.get('title')
 | 
						|
            if not title:
 | 
						|
                return
 | 
						|
            files = source.get('files')
 | 
						|
            if not isinstance(files, dict):
 | 
						|
                return
 | 
						|
            format_urls = set()
 | 
						|
            formats = []
 | 
						|
            for format_id in ('mobile', 'desktop'):
 | 
						|
                format_url = try_get(
 | 
						|
                    files, lambda x: x[format_id]['file'], compat_str)
 | 
						|
                if not format_url or format_url in format_urls:
 | 
						|
                    continue
 | 
						|
                format_urls.add(format_url)
 | 
						|
                m3u8_url = urljoin(self._LIVE_URL, format_url)
 | 
						|
                formats.extend(self._extract_m3u8_formats(
 | 
						|
                    m3u8_url, video_id, 'mp4', entry_protocol='m3u8_native',
 | 
						|
                    m3u8_id='hls', fatal=False))
 | 
						|
            if not formats:
 | 
						|
                return
 | 
						|
            self._sort_formats(formats)
 | 
						|
            return {
 | 
						|
                'title': title,
 | 
						|
                'formats': formats,
 | 
						|
            }
 | 
						|
 | 
						|
        thumbnail = urljoin(self._LIVE_URL, config.get('image'))
 | 
						|
 | 
						|
        info = extract_entry(config)
 | 
						|
        if info:
 | 
						|
            info.update({
 | 
						|
                'id': video_id,
 | 
						|
                'thumbnail': thumbnail,
 | 
						|
            })
 | 
						|
            return info
 | 
						|
 | 
						|
        entries = []
 | 
						|
        for num, chapter in enumerate(config['chapters'], start=1):
 | 
						|
            entry = extract_entry(chapter)
 | 
						|
            entry['id'] = '%s-%d' % (video_id, num)
 | 
						|
            entries.append(entry)
 | 
						|
 | 
						|
        return self.playlist_result(entries, video_id, config.get('title'))
 |