| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | # -*- coding: utf-8 -*- | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | from random import random | 
					
						
							|  |  |  | from math import floor | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | from ..compat import ( | 
					
						
							| 
									
										
										
										
											2014-03-15 01:38:44 +07:00
										 |  |  |     compat_urllib_request, | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2014-03-15 01:38:44 +07:00
										 |  |  |     ExtractorError, | 
					
						
							| 
									
										
										
										
											2015-06-02 17:28:14 +03:00
										 |  |  |     remove_end, | 
					
						
							| 
									
										
										
										
											2014-03-15 01:38:44 +07:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IPrimaIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2015-06-02 17:28:14 +03:00
										 |  |  |     _VALID_URL = r'https?://play\.iprima\.cz/(?:[^/]+/)*(?P<id>[^?#]+)' | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     _TESTS = [{ | 
					
						
							|  |  |  |         'url': 'http://play.iprima.cz/particka/particka-92', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '39152', | 
					
						
							|  |  |  |             'ext': 'flv', | 
					
						
							|  |  |  |             'title': 'Partička (92)', | 
					
						
							| 
									
										
										
										
											2015-06-02 21:10:18 +06:00
										 |  |  |             'description': 'md5:74e9617e51bca67c3ecfb2c6f9766f45', | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  |             'thumbnail': 'http://play.iprima.cz/sites/default/files/image_crops/image_620x349/3/491483_particka-92_image_620x349.jpg', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'params': { | 
					
						
							| 
									
										
										
										
											2014-02-24 10:12:36 +01:00
										 |  |  |             'skip_download': True,  # requires rtmpdump | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2014-02-24 10:12:36 +01:00
										 |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://play.iprima.cz/particka/tchibo-particka-jarni-moda', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '9718337', | 
					
						
							|  |  |  |             'ext': 'flv', | 
					
						
							|  |  |  |             'title': 'Tchibo Partička - Jarní móda', | 
					
						
							|  |  |  |             'thumbnail': 're:^http:.*\.jpg$', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'params': { | 
					
						
							|  |  |  |             'skip_download': True,  # requires rtmpdump | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2015-06-02 13:16:58 +03:00
										 |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://play.iprima.cz/zpravy-ftv-prima-2752015', | 
					
						
							|  |  |  |         'only_matching': True, | 
					
						
							| 
									
										
										
										
											2014-02-24 10:12:36 +01:00
										 |  |  |     }] | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         mobj = re.match(self._VALID_URL, url) | 
					
						
							| 
									
										
										
										
											2014-02-24 09:53:48 +01:00
										 |  |  |         video_id = mobj.group('id') | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-18 19:33:28 +07:00
										 |  |  |         if re.search(r'Nemáte oprávnění přistupovat na tuto stránku\.\s*</div>', webpage): | 
					
						
							| 
									
										
										
										
											2014-03-15 01:38:44 +07:00
										 |  |  |             raise ExtractorError( | 
					
						
							|  |  |  |                 '%s said: You do not have permission to access this page' % self.IE_NAME, expected=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-24 10:12:36 +01:00
										 |  |  |         player_url = ( | 
					
						
							|  |  |  |             'http://embed.livebox.cz/iprimaplay/player-embed-v2.js?__tok%s__=%s' % | 
					
						
							| 
									
										
										
										
											2014-11-23 21:23:05 +01:00
										 |  |  |             (floor(random() * 1073741824), floor(random() * 1073741824)) | 
					
						
							| 
									
										
										
										
											2014-02-24 13:50:53 +01:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         req = compat_urllib_request.Request(player_url) | 
					
						
							|  |  |  |         req.add_header('Referer', url) | 
					
						
							|  |  |  |         playerpage = self._download_webpage(req, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         base_url = ''.join(re.findall(r"embed\['stream'\] = '(.+?)'.+'(\?auth=)'.+'(.+?)';", playerpage)[1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         zoneGEO = self._html_search_regex(r'"zoneGEO":(.+?),', webpage, 'zoneGEO') | 
					
						
							|  |  |  |         if zoneGEO != '0': | 
					
						
							| 
									
										
										
										
											2014-02-24 09:53:48 +01:00
										 |  |  |             base_url = base_url.replace('token', 'token_' + zoneGEO) | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         formats = [] | 
					
						
							|  |  |  |         for format_id in ['lq', 'hq', 'hd']: | 
					
						
							| 
									
										
										
										
											2014-02-24 09:53:48 +01:00
										 |  |  |             filename = self._html_search_regex( | 
					
						
							|  |  |  |                 r'"%s_id":(.+?),' % format_id, webpage, 'filename') | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if filename == 'null': | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-24 09:53:48 +01:00
										 |  |  |             real_id = self._search_regex( | 
					
						
							| 
									
										
										
										
											2014-02-24 10:12:36 +01:00
										 |  |  |                 r'Prima-(?:[0-9]{10}|WEB)-([0-9]+)[-_]', | 
					
						
							|  |  |  |                 filename, 'real video id') | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if format_id == 'lq': | 
					
						
							|  |  |  |                 quality = 0 | 
					
						
							|  |  |  |             elif format_id == 'hq': | 
					
						
							|  |  |  |                 quality = 1 | 
					
						
							|  |  |  |             elif format_id == 'hd': | 
					
						
							|  |  |  |                 quality = 2 | 
					
						
							| 
									
										
										
										
											2014-02-24 09:53:48 +01:00
										 |  |  |                 filename = 'hq/' + filename | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             formats.append({ | 
					
						
							|  |  |  |                 'format_id': format_id, | 
					
						
							|  |  |  |                 'url': base_url, | 
					
						
							|  |  |  |                 'quality': quality, | 
					
						
							| 
									
										
										
										
											2014-02-24 09:53:48 +01:00
										 |  |  |                 'play_path': 'mp4:' + filename.replace('"', '')[:-4], | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  |                 'rtmp_live': True, | 
					
						
							|  |  |  |                 'ext': 'flv', | 
					
						
							| 
									
										
										
										
											2014-02-04 10:24:00 +01:00
										 |  |  |             }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self._sort_formats(formats) | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': real_id, | 
					
						
							| 
									
										
										
										
											2015-06-02 17:28:14 +03:00
										 |  |  |             'title': remove_end(self._og_search_title(webpage), ' | Prima PLAY'), | 
					
						
							| 
									
										
										
										
											2014-02-04 07:45:41 +01:00
										 |  |  |             'thumbnail': self._og_search_thumbnail(webpage), | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							| 
									
										
										
										
											2015-06-02 21:10:18 +06:00
										 |  |  |             'description': self._search_regex( | 
					
						
							|  |  |  |                 r'<p[^>]+itemprop="description"[^>]*>([^<]+)', | 
					
						
							|  |  |  |                 webpage, 'description', default=None), | 
					
						
							| 
									
										
										
										
											2014-02-04 10:24:00 +01:00
										 |  |  |         } |