| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import json | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | from ..compat import ( | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |     compat_urllib_parse, | 
					
						
							|  |  |  |     compat_urllib_request, | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							|  |  |  |     ExtractorError, | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |     int_or_none, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MoeVideoIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2014-09-09 21:04:57 +07:00
										 |  |  |     IE_DESC = 'LetitBit video services: moevideo.net, playreplay.net and videochart.net' | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |     _VALID_URL = r'''(?x)
 | 
					
						
							|  |  |  |         https?://(?P<host>(?:www\.)? | 
					
						
							| 
									
										
										
										
											2014-09-09 21:04:57 +07:00
										 |  |  |         (?:(?:moevideo|playreplay|videochart)\.net))/ | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |         (?:video|framevideo)/(?P<id>[0-9]+\.[0-9A-Za-z]+)'''
 | 
					
						
							|  |  |  |     _API_URL = 'http://api.letitbit.net/' | 
					
						
							|  |  |  |     _API_KEY = 'tVL0gjqo5' | 
					
						
							|  |  |  |     _TESTS = [ | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             'url': 'http://moevideo.net/video/00297.0036103fe3d513ef27915216fd29', | 
					
						
							|  |  |  |             'md5': '129f5ae1f6585d0e9bb4f38e774ffb3a', | 
					
						
							|  |  |  |             'info_dict': { | 
					
						
							|  |  |  |                 'id': '00297.0036103fe3d513ef27915216fd29', | 
					
						
							|  |  |  |                 'ext': 'flv', | 
					
						
							|  |  |  |                 'title': 'Sink cut out machine', | 
					
						
							|  |  |  |                 'description': 'md5:f29ff97b663aefa760bf7ca63c8ca8a8', | 
					
						
							|  |  |  |                 'thumbnail': 're:^https?://.*\.jpg$', | 
					
						
							|  |  |  |                 'width': 540, | 
					
						
							|  |  |  |                 'height': 360, | 
					
						
							|  |  |  |                 'duration': 179, | 
					
						
							| 
									
										
										
										
											2014-09-09 21:48:10 +07:00
										 |  |  |                 'filesize': 17822500, | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             'url': 'http://playreplay.net/video/77107.7f325710a627383d40540d8e991a', | 
					
						
							|  |  |  |             'md5': '74f0a014d5b661f0f0e2361300d1620e', | 
					
						
							|  |  |  |             'info_dict': { | 
					
						
							|  |  |  |                 'id': '77107.7f325710a627383d40540d8e991a', | 
					
						
							|  |  |  |                 'ext': 'flv', | 
					
						
							|  |  |  |                 'title': 'Operacion Condor.', | 
					
						
							|  |  |  |                 'description': 'md5:7e68cb2fcda66833d5081c542491a9a3', | 
					
						
							|  |  |  |                 'thumbnail': 're:^https?://.*\.jpg$', | 
					
						
							|  |  |  |                 'width': 480, | 
					
						
							|  |  |  |                 'height': 296, | 
					
						
							|  |  |  |                 'duration': 6027, | 
					
						
							| 
									
										
										
										
											2014-09-09 21:48:10 +07:00
										 |  |  |                 'filesize': 588257923, | 
					
						
							| 
									
										
										
										
											2015-01-01 00:46:03 +06:00
										 |  |  |             }, | 
					
						
							|  |  |  |             'skip': 'Video has been removed', | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |         }, | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         mobj = re.match(self._VALID_URL, url) | 
					
						
							|  |  |  |         video_id = mobj.group('id') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         webpage = self._download_webpage( | 
					
						
							|  |  |  |             'http://%s/video/%s' % (mobj.group('host'), video_id), | 
					
						
							|  |  |  |             video_id, 'Downloading webpage') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         title = self._og_search_title(webpage) | 
					
						
							|  |  |  |         thumbnail = self._og_search_thumbnail(webpage) | 
					
						
							|  |  |  |         description = self._og_search_description(webpage) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         r = [ | 
					
						
							|  |  |  |             self._API_KEY, | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 'preview/flv_link', | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     'uid': video_id, | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         r_json = json.dumps(r) | 
					
						
							|  |  |  |         post = compat_urllib_parse.urlencode({'r': r_json}) | 
					
						
							|  |  |  |         req = compat_urllib_request.Request(self._API_URL, post) | 
					
						
							|  |  |  |         req.add_header('Content-type', 'application/x-www-form-urlencoded') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         response = self._download_json(req, video_id) | 
					
						
							|  |  |  |         if response['status'] != 'OK': | 
					
						
							|  |  |  |             raise ExtractorError( | 
					
						
							|  |  |  |                 '%s returned error: %s' % (self.IE_NAME, response['data']), | 
					
						
							|  |  |  |                 expected=True | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         item = response['data'][0] | 
					
						
							|  |  |  |         video_url = item['link'] | 
					
						
							|  |  |  |         duration = int_or_none(item['length']) | 
					
						
							|  |  |  |         width = int_or_none(item['width']) | 
					
						
							|  |  |  |         height = int_or_none(item['height']) | 
					
						
							|  |  |  |         filesize = int_or_none(item['convert_size']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         formats = [{ | 
					
						
							|  |  |  |             'format_id': 'sd', | 
					
						
							|  |  |  |             'http_headers': {'Range': 'bytes=0-'},  # Required to download | 
					
						
							|  |  |  |             'url': video_url, | 
					
						
							|  |  |  |             'width': width, | 
					
						
							|  |  |  |             'height': height, | 
					
						
							| 
									
										
										
										
											2014-09-09 21:48:10 +07:00
										 |  |  |             'filesize': filesize, | 
					
						
							| 
									
										
										
										
											2014-09-07 01:21:58 +03:00
										 |  |  |         }] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							|  |  |  |             'title': title, | 
					
						
							|  |  |  |             'thumbnail': thumbnail, | 
					
						
							|  |  |  |             'description': description, | 
					
						
							|  |  |  |             'duration': duration, | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							|  |  |  |         } |