mirror of
				https://code.hackerspace.pl/q3k/youtube-dl
				synced 2025-03-16 11:43:02 +00:00 
			
		
		
		
	[CeskaTelevize] Add initial support for ceskatelevize.cz
This commit is contained in:
		
							parent
							
								
									ca97a56e4b
								
							
						
					
					
						commit
						8cfb5bbf92
					
				| @ -26,6 +26,7 @@ from .c56 import C56IE | ||||
| from .canalplus import CanalplusIE | ||||
| from .canalc2 import Canalc2IE | ||||
| from .cbs import CBSIE | ||||
| from .ceskatelevize import CeskaTelevizeIE | ||||
| from .channel9 import Channel9IE | ||||
| from .chilloutzone import ChilloutzoneIE | ||||
| from .cinemassacre import CinemassacreIE | ||||
|  | ||||
							
								
								
									
										106
									
								
								youtube_dl/extractor/ceskatelevize.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								youtube_dl/extractor/ceskatelevize.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | ||||
| # -*- coding: utf-8 -*- | ||||
| from __future__ import unicode_literals | ||||
| 
 | ||||
| import re | ||||
| import json | ||||
| from urllib import unquote | ||||
| 
 | ||||
| from .common import InfoExtractor | ||||
| from ..utils import ( | ||||
|     compat_urllib_request, | ||||
|     compat_urllib_parse, | ||||
|     compat_urllib_parse_urlparse | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| class CeskaTelevizeIE(InfoExtractor): | ||||
|     _VALID_URL = r'https?://www\.ceskatelevize\.cz/(porady|ivysilani)/(.+/)?(?P<id>[^?#]+)' | ||||
| 
 | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://www.ceskatelevize.cz/ivysilani/10532695142-prvni-republika/213512120230004-spanelska-chripka', | ||||
|         'info_dict': { | ||||
|             'id': '213512120230004', | ||||
|             'ext': 'flv', | ||||
|             'title': 'První republika: Španělská chřipka', | ||||
|             'duration': 3107.4, | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': True,  # requires rtmpdump | ||||
|         }, | ||||
|     }, { | ||||
|         'url': 'http://www.ceskatelevize.cz/ivysilani/1030584952-tsatsiki-maminka-a-policajt', | ||||
|         'info_dict': { | ||||
|             'id': '20138143440', | ||||
|             'ext': 'flv', | ||||
|             'title': 'Tsatsiki, maminka a policajt', | ||||
|             'duration': 6754.1, | ||||
|         }, | ||||
|         'params': { | ||||
|             'skip_download': True,  # requires rtmpdump | ||||
|         }, | ||||
|     }] | ||||
| 
 | ||||
|     def _real_extract(self, url): | ||||
|         url = url.replace('/porady/', '/ivysilani/').replace('/video/', '') | ||||
| 
 | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         video_id = mobj.group('id') | ||||
| 
 | ||||
|         webpage = self._download_webpage(url, video_id) | ||||
| 
 | ||||
|         typ = self._html_search_regex(r'getPlaylistUrl\(\[\{"type":"(.+?)","id":".+?"\}\],', webpage, 'type') | ||||
|         episode_id = self._html_search_regex(r'getPlaylistUrl\(\[\{"type":".+?","id":"(.+?)"\}\],', webpage, 'episode_id') | ||||
| 
 | ||||
|         data = { | ||||
|             'playlist[0][type]': typ, | ||||
|             'playlist[0][id]': episode_id, | ||||
|             'requestUrl': compat_urllib_parse_urlparse(url).path, | ||||
|             'requestSource': 'iVysilani', | ||||
|         } | ||||
| 
 | ||||
|         req = compat_urllib_request.Request('http://www.ceskatelevize.cz/ivysilani/ajax/get-playlist-url', | ||||
|                                             data=compat_urllib_parse.urlencode(data)) | ||||
| 
 | ||||
|         req.add_header('Content-type', 'application/x-www-form-urlencoded') | ||||
|         req.add_header('x-addr', '127.0.0.1') | ||||
|         req.add_header('X-Requested-With', 'XMLHttpRequest') | ||||
|         req.add_header('Referer', url) | ||||
| 
 | ||||
|         playlistpage = self._download_webpage(req, video_id) | ||||
| 
 | ||||
|         req = compat_urllib_request.Request(unquote(json.loads(playlistpage)['url'])) | ||||
|         req.add_header('Referer', url) | ||||
| 
 | ||||
|         playlist = self._download_xml(req, video_id) | ||||
|          | ||||
|         formats = [] | ||||
|         for i in playlist.find('smilRoot/body'): | ||||
|             if 'AD' not in i.attrib['id']: | ||||
|                 base_url = i.attrib['base'] | ||||
|                 parsedurl = compat_urllib_parse_urlparse(base_url) | ||||
|                 duration = i.attrib['duration'] | ||||
| 
 | ||||
|                 for video in i.findall('video'): | ||||
|                     if video.attrib['label'] != 'AD': | ||||
|                         format_id = video.attrib['label'] | ||||
|                         play_path = video.attrib['src'] | ||||
|                         vbr = int(video.attrib['system-bitrate']) | ||||
| 
 | ||||
|                         formats.append({ | ||||
|                             'format_id': format_id, | ||||
|                             'url': base_url, | ||||
|                             'vbr': vbr, | ||||
|                             'play_path': play_path, | ||||
|                             'app': parsedurl.path[1:] + '?' + parsedurl.query, | ||||
|                             'rtmp_live': True, | ||||
|                             'ext': 'flv', | ||||
|                         }) | ||||
| 
 | ||||
|         self._sort_formats(formats) | ||||
| 
 | ||||
|         return { | ||||
|             'id': episode_id, | ||||
|             'title': self._html_search_regex(r'<title>(.+?) — iVysílání — Česká televize</title>', webpage, 'title'), | ||||
|             'duration': float(duration), | ||||
|             'formats': formats, | ||||
|         } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 pulpe
						pulpe