| 
									
										
										
										
											2014-09-29 12:23:52 +02:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | from ..compat import ( | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |     compat_parse_qs, | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |     compat_urlparse, | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |     determine_ext, | 
					
						
							|  |  |  |     int_or_none, | 
					
						
							|  |  |  |     xpath_text, | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InternetVideoArchiveIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |     _VALID_URL = r'https?://video\.internetvideoarchive\.net/(?:player|flash/players)/.*?\?.*?publishedid.*?' | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |         'url': 'http://video.internetvideoarchive.net/player/6/configuration.ashx?customerid=69249&publishedid=194487&reporttag=vdbetatitle&playerid=641&autolist=0&domain=www.videodetective.com&maxrate=high&minrate=low&socialplayer=false', | 
					
						
							| 
									
										
										
										
											2014-09-29 12:23:52 +02:00
										 |  |  |         'info_dict': { | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |             'id': '194487', | 
					
						
							| 
									
										
										
										
											2014-09-29 12:23:52 +02:00
										 |  |  |             'ext': 'mp4', | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |             'title': 'KICK-ASS 2', | 
					
						
							|  |  |  |             'description': 'md5:c189d5b7280400630a1d3dd17eaa8d8a', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'params': { | 
					
						
							|  |  |  |             # m3u8 download | 
					
						
							|  |  |  |             'skip_download': True, | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |     def _build_json_url(query): | 
					
						
							|  |  |  |         return 'http://video.internetvideoarchive.net/player/6/configuration.ashx?' + query | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-12 22:21:23 +02:00
										 |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |     def _build_xml_url(query): | 
					
						
							|  |  |  |         return 'http://video.internetvideoarchive.net/flash/players/flashconfiguration.aspx?' + query | 
					
						
							| 
									
										
										
										
											2013-10-12 22:21:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         query = compat_urlparse.urlparse(url).query | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |         query_dic = compat_parse_qs(query) | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |         video_id = query_dic['publishedid'][0] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |         if '/player/' in url: | 
					
						
							|  |  |  |             configuration = self._download_json(url, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # There are multiple videos in the playlist whlie only the first one | 
					
						
							|  |  |  |             # matches the video played in browsers | 
					
						
							|  |  |  |             video_info = configuration['playlist'][0] | 
					
						
							| 
									
										
										
										
											2016-09-04 11:42:15 +01:00
										 |  |  |             title = video_info['title'] | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             formats = [] | 
					
						
							|  |  |  |             for source in video_info['sources']: | 
					
						
							|  |  |  |                 file_url = source['file'] | 
					
						
							|  |  |  |                 if determine_ext(file_url) == 'm3u8': | 
					
						
							| 
									
										
										
										
											2016-09-04 11:42:15 +01:00
										 |  |  |                     m3u8_formats = self._extract_m3u8_formats( | 
					
						
							|  |  |  |                         file_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False) | 
					
						
							|  |  |  |                     if m3u8_formats: | 
					
						
							|  |  |  |                         formats.extend(m3u8_formats) | 
					
						
							|  |  |  |                         file_url = m3u8_formats[0]['url'] | 
					
						
							|  |  |  |                         formats.extend(self._extract_f4m_formats( | 
					
						
							|  |  |  |                             file_url.replace('.m3u8', '.f4m'), | 
					
						
							|  |  |  |                             video_id, f4m_id='hds', fatal=False)) | 
					
						
							|  |  |  |                         formats.extend(self._extract_mpd_formats( | 
					
						
							|  |  |  |                             file_url.replace('.m3u8', '.mpd'), | 
					
						
							|  |  |  |                             video_id, mpd_id='dash', fatal=False)) | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |                 else: | 
					
						
							|  |  |  |                     a_format = { | 
					
						
							|  |  |  |                         'url': file_url, | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if source.get('label') and source['label'][-4:] == ' kbs': | 
					
						
							|  |  |  |                         tbr = int_or_none(source['label'][:-4]) | 
					
						
							|  |  |  |                         a_format.update({ | 
					
						
							|  |  |  |                             'tbr': tbr, | 
					
						
							|  |  |  |                             'format_id': 'http-%d' % tbr, | 
					
						
							|  |  |  |                         }) | 
					
						
							|  |  |  |                         formats.append(a_format) | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |             self._sort_formats(formats) | 
					
						
							| 
									
										
										
										
											2013-12-26 21:08:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |             description = video_info.get('description') | 
					
						
							|  |  |  |             thumbnail = video_info.get('image') | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             configuration = self._download_xml(url, video_id) | 
					
						
							|  |  |  |             formats = [{ | 
					
						
							|  |  |  |                 'url': xpath_text(configuration, './file', 'file URL', fatal=True), | 
					
						
							|  |  |  |             }] | 
					
						
							|  |  |  |             thumbnail = xpath_text(configuration, './image', 'thumbnail') | 
					
						
							|  |  |  |             title = 'InternetVideoArchive video %s' % video_id | 
					
						
							|  |  |  |             description = None | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-21 15:07:33 +02:00
										 |  |  |         return { | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |             'id': video_id, | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |             'title': title, | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |             'formats': formats, | 
					
						
							| 
									
										
										
										
											2016-04-09 21:46:51 +08:00
										 |  |  |             'thumbnail': thumbnail, | 
					
						
							|  |  |  |             'description': description, | 
					
						
							| 
									
										
										
										
											2013-10-12 21:34:04 +02:00
										 |  |  |         } |