2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . common  import  InfoExtractor  
						 
					
						
							
								
									
										
										
										
											2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    float_or_none , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    int_or_none , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ViddlerIE ( InfoExtractor ) :  
						 
					
						
							
								
									
										
										
										
											2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r ' https?://(?:www \ .)?viddler \ .com/(?:v|embed|player)/(?P<id>[a-z0-9]+) ' 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    _TEST  =  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " url " :  " http://www.viddler.com/v/43903784 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' md5 ' :  ' ae43ad7cb59431ce043f0ff7fa13cbf4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' 43903784 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " title " :  " Video Made Easy " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  ' You don \' t need to be a professional to make high-quality video content. Viddler provides some quick and easy tips on how to produce great video content with limited resources.  ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " uploader " :  " viddler " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' timestamp ' :  1335371429 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' upload_date ' :  ' 20120425 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            " duration " :  100.89 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' thumbnail ' :  ' re:^https?://.* \ .jpg$ ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' view_count ' :  int , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' categories ' :  [ ' video content ' ,  ' high quality video ' ,  ' video made easy ' ,  ' how to produce video with limited resources ' ,  ' viddler ' ] , 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        video_id  =  self . _match_id ( url ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        json_url  =  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' http://api.viddler.com/api/v2/viddler.videos.getPlaybackDetails.json?video_id= %s &key=v0vhrt7bg2xq1vyxhkct '  % 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            video_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        data  =  self . _download_json ( json_url ,  video_id ) [ ' video ' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        formats  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  filed  in  data [ ' files ' ] : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  filed . get ( ' status ' ,  ' ready ' )  !=  ' ready ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            f  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' format_id ' :  filed [ ' profile_id ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' format_note ' :  filed [ ' profile_name ' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' url ' :  self . _proto_relative_url ( filed [ ' url ' ] ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' width ' :  int_or_none ( filed . get ( ' width ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' height ' :  int_or_none ( filed . get ( ' height ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' filesize ' :  int_or_none ( filed . get ( ' size ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' ext ' :  filed . get ( ' ext ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' source_preference ' :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            formats . append ( f ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  filed . get ( ' cdn_url ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f  =  f . copy ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f [ ' url ' ]  =  self . _proto_relative_url ( filed [ ' cdn_url ' ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f [ ' format_id ' ]  =  filed [ ' profile_id ' ]  +  ' -cdn ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f [ ' source_preference ' ]  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                formats . append ( f ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  filed . get ( ' html5_video_source ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f  =  f . copy ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f [ ' url ' ]  =  self . _proto_relative_url ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    filed [ ' html5_video_source ' ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f [ ' format_id ' ]  =  filed [ ' profile_id ' ]  +  ' -html5 ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                f [ ' source_preference ' ]  =  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                formats . append ( f ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . _sort_formats ( formats ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        categories  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            t . get ( ' text ' )  for  t  in  data . get ( ' tags ' ,  [ ] )  if  ' text '  in  t ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-03 14:21:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' _type ' :  ' video ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  video_id , 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' title ' :  data [ ' title ' ] , 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            ' formats ' :  formats , 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-25 00:10:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ' description ' :  data . get ( ' description ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' timestamp ' :  int_or_none ( data . get ( ' upload_time ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' thumbnail ' :  self . _proto_relative_url ( data . get ( ' thumbnail_url ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  data . get ( ' author ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' duration ' :  float_or_none ( data . get ( ' length ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' view_count ' :  int_or_none ( data . get ( ' view_count ' ) ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' categories ' :  categories , 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-06 07:12:47 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        }