| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  | import random | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  | from ..utils import ( | 
					
						
							|  |  |  |     xpath_text, | 
					
						
							|  |  |  |     int_or_none, | 
					
						
							| 
									
										
										
										
											2015-04-14 15:27:56 +08:00
										 |  |  |     ExtractorError, | 
					
						
							| 
									
										
										
										
											2015-11-21 22:18:17 +06:00
										 |  |  |     sanitized_Request, | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 22:33:30 +06:00
										 |  |  | class MioMioIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |     IE_NAME = 'miomio.tv' | 
					
						
							|  |  |  |     _VALID_URL = r'https?://(?:www\.)?miomio\.tv/watch/cc(?P<id>[0-9]+)' | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |     _TESTS = [{ | 
					
						
							| 
									
										
										
										
											2015-04-14 15:27:56 +08:00
										 |  |  |         # "type=video" in flashvars | 
					
						
							|  |  |  |         'url': 'http://www.miomio.tv/watch/cc88912/', | 
					
						
							|  |  |  |         'md5': '317a5f7f6b544ce8419b784ca8edae65', | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |         'info_dict': { | 
					
						
							| 
									
										
										
										
											2015-04-14 15:27:56 +08:00
										 |  |  |             'id': '88912', | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |             'ext': 'flv', | 
					
						
							| 
									
										
										
										
											2015-04-14 15:27:56 +08:00
										 |  |  |             'title': '【SKY】字幕 铠武昭和VS平成 假面骑士大战FEAT战队 魔星字幕组 字幕', | 
					
						
							|  |  |  |             'duration': 5923, | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |         }, | 
					
						
							|  |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://www.miomio.tv/watch/cc184024/', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '43729', | 
					
						
							|  |  |  |             'title': '《动漫同人插画绘制》', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'playlist_mincount': 86, | 
					
						
							| 
									
										
										
										
											2015-04-19 19:12:23 +08:00
										 |  |  |         'skip': 'This video takes time too long for retrieving the URL', | 
					
						
							|  |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://www.miomio.tv/watch/cc173113/', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '173113', | 
					
						
							|  |  |  |             'title': 'The New Macbook 2015 上手试玩与简评' | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'playlist_mincount': 2, | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |     }] | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         video_id = self._match_id(url) | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |         title = self._html_search_meta( | 
					
						
							|  |  |  |             'description', webpage, 'title', fatal=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         mioplayer_path = self._search_regex( | 
					
						
							|  |  |  |             r'src="(/mioplayer/[^"]+)"', webpage, 'ref_path') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-06 23:28:14 +06:00
										 |  |  |         http_headers = {'Referer': 'http://www.miomio.tv%s' % mioplayer_path} | 
					
						
							| 
									
										
										
										
											2015-11-06 06:33:05 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |         xml_config = self._search_regex( | 
					
						
							| 
									
										
										
										
											2015-04-14 15:27:56 +08:00
										 |  |  |             r'flashvars="type=(?:sina|video)&(.+?)&', | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |             webpage, 'xml config') | 
					
						
							| 
									
										
										
										
											2015-04-03 14:09:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 23:16:50 +01:00
										 |  |  |         # skipping the following page causes lags and eventually connection drop-outs | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |         self._request_webpage( | 
					
						
							|  |  |  |             'http://www.miomio.tv/mioplayer/mioplayerconfigfiles/xml.php?id=%s&r=%s' % (id, random.randint(100, 999)), | 
					
						
							|  |  |  |             video_id) | 
					
						
							| 
									
										
										
										
											2015-03-23 23:16:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-21 22:18:17 +06:00
										 |  |  |         vid_config_request = sanitized_Request( | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |             'http://www.miomio.tv/mioplayer/mioplayerconfigfiles/sina.php?{0}'.format(xml_config), | 
					
						
							| 
									
										
										
										
											2015-11-06 06:33:05 +01:00
										 |  |  |             headers=http_headers) | 
					
						
							| 
									
										
										
										
											2015-11-06 02:09:55 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # the following xml contains the actual configuration information on the video file(s) | 
					
						
							|  |  |  |         vid_config = self._download_xml(vid_config_request, video_id) | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-14 15:27:56 +08:00
										 |  |  |         if not int_or_none(xpath_text(vid_config, 'timelength')): | 
					
						
							|  |  |  |             raise ExtractorError('Unable to load videos!', expected=True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |         entries = [] | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |         for f in vid_config.findall('./durl'): | 
					
						
							|  |  |  |             segment_url = xpath_text(f, 'url', 'video url') | 
					
						
							|  |  |  |             if not segment_url: | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             order = xpath_text(f, 'order', 'order') | 
					
						
							|  |  |  |             segment_id = video_id | 
					
						
							|  |  |  |             segment_title = title | 
					
						
							|  |  |  |             if order: | 
					
						
							|  |  |  |                 segment_id += '-%s' % order | 
					
						
							|  |  |  |                 segment_title += ' part %s' % order | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |             entries.append({ | 
					
						
							|  |  |  |                 'id': segment_id, | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |                 'url': segment_url, | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |                 'title': segment_title, | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |                 'duration': int_or_none(xpath_text(f, 'length', 'duration'), 1000), | 
					
						
							|  |  |  |                 'http_headers': http_headers, | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |             }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if len(entries) == 1: | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |             segment = entries[0] | 
					
						
							|  |  |  |             segment['id'] = video_id | 
					
						
							|  |  |  |             segment['title'] = title | 
					
						
							|  |  |  |             return segment | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             '_type': 'multi_video', | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							|  |  |  |             'entries': entries, | 
					
						
							| 
									
										
										
										
											2015-04-02 22:32:16 +06:00
										 |  |  |             'title': title, | 
					
						
							|  |  |  |             'http_headers': http_headers, | 
					
						
							| 
									
										
										
										
											2015-03-23 01:42:17 +01:00
										 |  |  |         } |