2014-01-26 14:05:34 +05:30 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . common  import  InfoExtractor  
						 
					
						
							
								
									
										
										
										
											2015-01-08 17:36:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    parse_duration , 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 17:36:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    parse_iso8601 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
									
										
										
										
											2016-04-30 21:55:28 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . compat  import  compat_str  
						 
					
						
							
								
									
										
										
										
											2014-01-26 14:05:34 +05:30 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  DiscoveryIE ( InfoExtractor ) :  
						 
					
						
							
								
									
										
										
										
											2016-03-20 10:26:58 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r ''' (?x)https?://(?:www \ .)?(?: 
 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 17:29:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            discovery | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            investigationdiscovery | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            discoverylife | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            animalplanet | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ahctv | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            destinationamerica | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            sciencechannel | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            tlc | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            velocity 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 18:24:49 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ) \. com / ( ? : [ ^ / ] + / ) * ( ? P < id > [ ^ . / ? #]+)''' 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TESTS  =  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-24 17:41:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.discovery.com/tv-shows/mythbusters/videos/mission-impossible-outtakes.htm ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-26 14:05:34 +05:30 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' id ' :  ' 20769 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 17:36:56 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' title ' :  ' Mission Impossible Outtakes ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-27 12:41:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  ( ' Watch Jamie Hyneman and Adam Savage practice being ' 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-23 21:39:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                            '  each other -- to the point of confusing Jamie \' s dog -- and  ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            ' don \' t miss Adam moon-walking as Jamie ... behind Jamie \' s ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            '  back. ' ) , 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-27 12:41:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' duration ' :  156 , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 17:29:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' timestamp ' :  1302032462 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' upload_date ' :  ' 20110405 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 21:49:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader_id ' :  ' 103207 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-27 12:41:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' params ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' skip_download ' :  True ,   # requires ffmpeg 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.discovery.com/tv-shows/mythbusters/videos/mythbusters-the-simpsons ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' mythbusters-the-simpsons ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' MythBusters: The Simpsons ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 17:29:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' playlist_mincount ' :  10 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://www.animalplanet.com/longfin-eels-maneaters/ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 78326 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' Longfin Eels: Maneaters? ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  ' Jeremy Wade tests whether or not New Zealand \' s longfin eels are man-eaters by covering himself in fish guts and getting in the water with them. ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' upload_date ' :  ' 20140725 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' timestamp ' :  1406246400 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' duration ' :  116 , 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 21:49:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' uploader_id ' :  ' 103207 ' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 17:29:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 21:49:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ' params ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' skip_download ' :  True ,   # requires ffmpeg 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ] 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-26 14:05:34 +05:30 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 17:29:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        display_id  =  self . _match_id ( url ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        info  =  self . _download_json ( url  +  ' ?flat=1 ' ,  display_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-27 12:41:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_title  =  info . get ( ' playlist_title ' )  or  info . get ( ' video_title ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-01-26 14:05:34 +05:30 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 07:03:08 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        entries  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  idx ,  video_info  in  enumerate ( info [ ' playlist ' ] ) : 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-02 07:07:35 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            subtitles  =  { } 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 20:49:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            caption_url  =  video_info . get ( ' captionsUrl ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  caption_url : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                subtitles  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' en ' :  [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        ' url ' :  caption_url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 07:03:08 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            entries . append ( { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 21:49:32 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                ' _type ' :  ' url_transparent ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' url ' :  ' http://players.brightcove.net/103207/default_default/index.html?videoId=ref: %s '  %  video_info [ ' referenceId ' ] , 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 07:03:08 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                ' id ' :  compat_str ( video_info [ ' id ' ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' title ' :  video_info [ ' title ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' description ' :  video_info . get ( ' description ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' duration ' :  parse_duration ( video_info . get ( ' video_length ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' webpage_url ' :  video_info . get ( ' href ' )  or  video_info . get ( ' url ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' thumbnail ' :  video_info . get ( ' thumbnailURL ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' alt_title ' :  video_info . get ( ' secondary_title ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' timestamp ' :  parse_iso8601 ( video_info . get ( ' publishedDate ' ) ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 20:49:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                ' subtitles ' :  subtitles , 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-27 07:03:08 +06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-07 16:34:19 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-31 17:29:37 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  self . playlist_result ( entries ,  display_id ,  video_title )