| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 03:48:40 -07:00
										 |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  | from ..utils import ( | 
					
						
							|  |  |  |     parse_duration, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-05-12 03:48:40 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-12 03:48:40 -07:00
										 |  |  | class NuvidIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |     _VALID_URL = r'https?://(?:www|m)\.nuvid\.com/video/(?P<id>[0-9]+)' | 
					
						
							| 
									
										
										
										
											2014-05-12 03:48:40 -07:00
										 |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  |         'url': 'http://m.nuvid.com/video/1310741/', | 
					
						
							|  |  |  |         'md5': 'eab207b7ac4fccfb4e23c86201f11277', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '1310741', | 
					
						
							|  |  |  |             'ext': 'mp4', | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |             'title': 'Horny babes show their awesome bodeis and', | 
					
						
							|  |  |  |             'duration': 129, | 
					
						
							|  |  |  |             'age_limit': 18, | 
					
						
							| 
									
										
										
										
											2014-05-12 03:48:40 -07:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  |         video_id = self._match_id(url) | 
					
						
							| 
									
										
										
										
											2014-05-12 03:48:40 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:51:20 +08:00
										 |  |  |         page_url = 'http://m.nuvid.com/video/%s' % video_id | 
					
						
							|  |  |  |         webpage = self._download_webpage( | 
					
						
							|  |  |  |             page_url, video_id, 'Downloading video page') | 
					
						
							|  |  |  |         # When dwnld_speed exists and has a value larger than the MP4 file's | 
					
						
							|  |  |  |         # bitrate, Nuvid returns the MP4 URL | 
					
						
							|  |  |  |         # It's unit is 100bytes/millisecond, see mobile-nuvid-min.js for the algorithm | 
					
						
							|  |  |  |         self._set_cookie('nuvid.com', 'dwnld_speed', '10.0') | 
					
						
							|  |  |  |         mp4_webpage = self._download_webpage( | 
					
						
							|  |  |  |             page_url, video_id, 'Downloading video page for MP4 format') | 
					
						
							| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:51:20 +08:00
										 |  |  |         html5_video_re = r'(?s)<(?:video|audio)[^<]*(?:>.*?<source[^>]*)?\s+src=["\'](.*?)["\']', | 
					
						
							|  |  |  |         video_url = self._html_search_regex(html5_video_re, webpage, video_id) | 
					
						
							|  |  |  |         mp4_video_url = self._html_search_regex(html5_video_re, mp4_webpage, video_id) | 
					
						
							|  |  |  |         formats = [{ | 
					
						
							|  |  |  |             'url': video_url, | 
					
						
							|  |  |  |         }] | 
					
						
							|  |  |  |         if mp4_video_url != video_url: | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |             formats.append({ | 
					
						
							| 
									
										
										
										
											2016-04-28 17:51:20 +08:00
										 |  |  |                 'url': mp4_video_url, | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |             }) | 
					
						
							| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |         title = self._html_search_regex( | 
					
						
							| 
									
										
										
										
											2014-08-22 21:41:51 +07:00
										 |  |  |             [r'<span title="([^"]+)">', | 
					
						
							| 
									
										
										
										
											2016-04-28 17:51:20 +08:00
										 |  |  |              r'<div class="thumb-holder video">\s*<h5[^>]*>([^<]+)</h5>', | 
					
						
							|  |  |  |              r'<span[^>]+class="title_thumb">([^<]+)</span>'], webpage, 'title').strip() | 
					
						
							| 
									
										
										
										
											2014-08-22 21:41:51 +07:00
										 |  |  |         thumbnails = [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 'url': thumb_url, | 
					
						
							|  |  |  |             } for thumb_url in re.findall(r'<img src="([^"]+)" alt="" />', webpage) | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         thumbnail = thumbnails[0]['url'] if thumbnails else None | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |         duration = parse_duration(self._html_search_regex( | 
					
						
							| 
									
										
										
										
											2016-04-28 17:51:20 +08:00
										 |  |  |             [r'<i class="fa fa-clock-o"></i>\s*(\d{2}:\d{2})', | 
					
						
							|  |  |  |              r'<span[^>]+class="view_time">([^<]+)</span>'], webpage, 'duration', fatal=False)) | 
					
						
							| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							|  |  |  |             'title': title, | 
					
						
							| 
									
										
										
										
											2014-08-22 21:41:51 +07:00
										 |  |  |             'thumbnails': thumbnails, | 
					
						
							|  |  |  |             'thumbnail': thumbnail, | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |             'duration': duration, | 
					
						
							| 
									
										
										
										
											2014-05-13 10:08:32 +02:00
										 |  |  |             'age_limit': 18, | 
					
						
							| 
									
										
										
										
											2014-06-09 20:37:04 +07:00
										 |  |  |             'formats': formats, | 
					
						
							| 
									
										
										
										
											2014-11-23 20:41:03 +01:00
										 |  |  |         } |