| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | from ..compat import ( | 
					
						
							| 
									
										
										
										
											2015-07-17 23:46:33 +06:00
										 |  |  |     compat_urllib_parse_unquote, | 
					
						
							|  |  |  |     compat_urllib_parse_unquote_plus, | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2014-11-29 22:16:35 +06:00
										 |  |  |     clean_html, | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |     ExtractorError, | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  | class PlayvidIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |     _VALID_URL = r'https?://www\.playvid\.com/watch(\?v=|/)(?P<id>.+?)(?:#|$)' | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |         'url': 'http://www.playvid.com/watch/RnmBNgtrrJu', | 
					
						
							|  |  |  |         'md5': 'ffa2f6b2119af359f544388d8c01eb6c', | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  |         'info_dict': { | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |             'id': 'RnmBNgtrrJu', | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  |             'ext': 'mp4', | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |             'title': 'md5:9256d01c6317e3f703848b5906880dc8', | 
					
						
							|  |  |  |             'duration': 82, | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  |             'age_limit': 18, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |         video_id = self._match_id(url) | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  |         webpage = self._download_webpage(url, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-29 22:16:35 +06:00
										 |  |  |         m_error = re.search( | 
					
						
							|  |  |  |             r'<div class="block-error">\s*<div class="heading">\s*<div>(?P<msg>.+?)</div>\s*</div>', webpage) | 
					
						
							|  |  |  |         if m_error: | 
					
						
							|  |  |  |             raise ExtractorError(clean_html(m_error.group('msg')), expected=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  |         video_title = None | 
					
						
							|  |  |  |         duration = None | 
					
						
							|  |  |  |         video_thumbnail = None | 
					
						
							|  |  |  |         formats = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # most of the information is stored in the flashvars | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  |         flashvars = self._html_search_regex( | 
					
						
							|  |  |  |             r'flashvars="(.+?)"', webpage, 'flashvars') | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 23:46:33 +06:00
										 |  |  |         infos = compat_urllib_parse_unquote(flashvars).split(r'&') | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  |         for info in infos: | 
					
						
							|  |  |  |             videovars_match = re.match(r'^video_vars\[(.+?)\]=(.+?)$', info) | 
					
						
							|  |  |  |             if videovars_match: | 
					
						
							|  |  |  |                 key = videovars_match.group(1) | 
					
						
							|  |  |  |                 val = videovars_match.group(2) | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  |                 if key == 'title': | 
					
						
							| 
									
										
										
										
											2015-07-17 23:46:33 +06:00
										 |  |  |                     video_title = compat_urllib_parse_unquote_plus(val) | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  |                 if key == 'duration': | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         duration = int(val) | 
					
						
							|  |  |  |                     except ValueError: | 
					
						
							|  |  |  |                         pass | 
					
						
							|  |  |  |                 if key == 'big_thumb': | 
					
						
							|  |  |  |                     video_thumbnail = val | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-10 20:55:47 +01:00
										 |  |  |                 videourl_match = re.match( | 
					
						
							|  |  |  |                     r'^video_urls\]\[(?P<resolution>[0-9]+)p', key) | 
					
						
							|  |  |  |                 if videourl_match: | 
					
						
							|  |  |  |                     height = int(videourl_match.group('resolution')) | 
					
						
							|  |  |  |                     formats.append({ | 
					
						
							|  |  |  |                         'height': height, | 
					
						
							|  |  |  |                         'url': val, | 
					
						
							|  |  |  |                     }) | 
					
						
							|  |  |  |         self._sort_formats(formats) | 
					
						
							| 
									
										
										
										
											2014-03-10 14:41:19 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Extract title - should be in the flashvars; if not, look elsewhere | 
					
						
							|  |  |  |         if video_title is None: | 
					
						
							|  |  |  |             video_title = self._html_search_regex( | 
					
						
							|  |  |  |                 r'<title>(.*?)</title', webpage, 'title') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							|  |  |  |             'title': video_title, | 
					
						
							|  |  |  |             'thumbnail': video_thumbnail, | 
					
						
							|  |  |  |             'duration': duration, | 
					
						
							|  |  |  |             'description': None, | 
					
						
							|  |  |  |             'age_limit': 18 | 
					
						
							|  |  |  |         } |