2014-04-19 19:51:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  __future__  import  unicode_literals  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  re  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . common  import  InfoExtractor  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . . utils  import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ExtractorError , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    unescapeHTML , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SteamIE ( InfoExtractor ) :  
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _VALID_URL  =  r """ (?x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        https ? : / / store \. steampowered \. com / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( agecheck / ) ? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ? P < urltype > video | app ) /  #If the page is only for videos or for a game 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ? P < gameID > \d + ) / ? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( ? P < videoID > \d * ) ( ? P < extra > \? ? )  # For urltype == video we sometimes get the videoID 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        https ? : / / ( ? : www \. ) ? steamcommunity \. com / sharedfiles / filedetails / \? id = ( ? P < fileID > [ 0 - 9 ] + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    """ 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    _VIDEO_PAGE_TEMPLATE  =  ' http://store.steampowered.com/video/ %s / ' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _AGECHECK_TEMPLATE  =  ' http://store.steampowered.com/agecheck/video/ %s /?snr=1_agecheck_agecheck__age-gate&ageDay=1&ageMonth=January&ageYear=1970 ' 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    _TESTS  =  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-19 19:51:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        " url " :  " http://store.steampowered.com/video/105600/ " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " playlist " :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:20:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-19 19:51:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " md5 " :  " f870007cee7065d7c76b88f0a45ecc07 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " info_dict " :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' id ' :  ' 81300 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' ext ' :  ' flv ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " title " :  " Terraria 1.1 Trailer " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' playlist_index ' :  1 , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:20:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            { 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-19 19:51:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " md5 " :  " 61aaf31a5c5c3041afb58fb83cbb5751 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " info_dict " :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' id ' :  ' 80859 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' ext ' :  ' flv ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " title " :  " Terraria Trailer " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' playlist_index ' :  2 , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:20:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-19 19:55:53 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' params ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' playlistend ' :  2 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' url ' :  ' http://steamcommunity.com/sharedfiles/filedetails/?id=242472205 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' info_dict ' :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' id ' :  ' WB5DvDOOvAY ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' ext ' :  ' mp4 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' upload_date ' :  ' 20140329 ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' title ' :  ' FRONTIERS - Final Greenlight Trailer ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' description ' :  " The final trailer for the Steam Greenlight launch. Hooray, progress! Here ' s the official Greenlight page: http://steamcommunity.com/sharedfiles/filedetails/?id=242472205 " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader ' :  ' AAD Productions ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ' uploader_id ' :  ' AtomicAgeDogGames ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ] 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-27 20:20:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    def  _real_extract ( self ,  url ) : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        m  =  re . match ( self . _VALID_URL ,  url ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        fileID  =  m . group ( ' fileID ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  fileID : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            videourl  =  url 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist_id  =  fileID 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            gameID  =  m . group ( ' gameID ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist_id  =  gameID 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            videourl  =  self . _VIDEO_PAGE_TEMPLATE  %  playlist_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        webpage  =  self . _download_webpage ( videourl ,  playlist_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  re . search ( ' <h2>Please enter your birth date to continue:</h2> ' ,  webpage )  is  not  None : 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            videourl  =  self . _AGECHECK_TEMPLATE  %  playlist_id 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            self . report_age_confirmation ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            webpage  =  self . _download_webpage ( videourl ,  playlist_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  fileID : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist_title  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' <div class= " workshopItemTitle " >(.+)</div> ' ,  webpage ,  ' title ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            mweb  =  re . finditer ( r ''' (?x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' movie_(?P<videoID>[0-9]+) ' : \s * \{ \s * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                YOUTUBE_VIDEO_ID : \s * " (?P<youtube_id>[^ " ] + ) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ''' , webpage) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            videos  =  [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' _type ' :  ' url ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' url ' :  vid . group ( ' youtube_id ' ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' ie_key ' :  ' Youtube ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  for  vid  in  mweb ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            playlist_title  =  self . _html_search_regex ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' <h2 class= " pageheader " >(.*?)</h2> ' ,  webpage ,  ' game title ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            mweb  =  re . finditer ( r ''' (?x) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ' movie_(?P<videoID>[0-9]+) ' : \s * \{ \s * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                FILENAME : \s * " (?P<videoURL>[ \ w:/ \ . \ ?=]+) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( , \s * MOVIE_NAME : \s * \" (?P<videoName>[ \ w:/ \ . \ ?= \ +-]+) \" )? \ s* \ }, 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ''' , webpage) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            titles  =  re . finditer ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' <span class= " title " >(?P<videoName>.+?)</span> ' ,  webpage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            thumbs  =  re . finditer ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                r ' <img class= " movie_thumb "  src= " (?P<thumbnail>.+?) " > ' ,  webpage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            videos  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            for  vid ,  vtitle ,  thumb  in  zip ( mweb ,  titles ,  thumbs ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                video_id  =  vid . group ( ' videoID ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                title  =  vtitle . group ( ' videoName ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                video_url  =  vid . group ( ' videoURL ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                video_thumb  =  thumb . group ( ' thumbnail ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  not  video_url : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    raise  ExtractorError ( ' Cannot find video url for  %s '  %  video_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                videos . append ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' id ' :  video_id , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' url ' :  video_url , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' ext ' :  ' flv ' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' title ' :  unescapeHTML ( title ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    ' thumbnail ' :  video_thumb 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  not  videos : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            raise  ExtractorError ( ' Could not find any videos ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-23 22:02:56 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-21 02:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  self . playlist_result ( videos ,  playlist_id ,  playlist_title )