Correct a few formatting bugs and add .to_stdout() to downloader
This commit is contained in:
		
							parent
							
								
									b46347267a
								
							
						
					
					
						commit
						9fcd8355e5
					
				
					 1 changed files with 40 additions and 32 deletions
				
			
		
							
								
								
									
										46
									
								
								youtube-dl
									
										
									
									
									
								
							
							
						
						
									
										46
									
								
								youtube-dl
									
										
									
									
									
								
							| 
						 | 
					@ -84,8 +84,6 @@ class FileDownloader(object):
 | 
				
			||||||
		else:
 | 
							else:
 | 
				
			||||||
			exponent = long(math.log(float(bytes), 1024.0))
 | 
								exponent = long(math.log(float(bytes), 1024.0))
 | 
				
			||||||
		suffix = 'bkMGTPEZY'[exponent]
 | 
							suffix = 'bkMGTPEZY'[exponent]
 | 
				
			||||||
		if exponent == 0:
 | 
					 | 
				
			||||||
			return '%s%s' % (bytes, suffix)
 | 
					 | 
				
			||||||
		converted = float(bytes) / float(1024**exponent)
 | 
							converted = float(bytes) / float(1024**exponent)
 | 
				
			||||||
		return '%.2f%s' % (converted, suffix)
 | 
							return '%.2f%s' % (converted, suffix)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,7 +111,7 @@ class FileDownloader(object):
 | 
				
			||||||
	def calc_speed(start, now, bytes):
 | 
						def calc_speed(start, now, bytes):
 | 
				
			||||||
		dif = now - start
 | 
							dif = now - start
 | 
				
			||||||
		if bytes == 0 or dif < 0.001: # One millisecond
 | 
							if bytes == 0 or dif < 0.001: # One millisecond
 | 
				
			||||||
			return '%9s' % 'N/A b/s'
 | 
								return '%10s' % '---b/s'
 | 
				
			||||||
		return '%10s' % ('%s/s' % FileDownloader.format_bytes(float(bytes) / dif))
 | 
							return '%10s' % ('%s/s' % FileDownloader.format_bytes(float(bytes) / dif))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@staticmethod
 | 
						@staticmethod
 | 
				
			||||||
| 
						 | 
					@ -144,6 +142,12 @@ class FileDownloader(object):
 | 
				
			||||||
		self._ies.append(ie)
 | 
							self._ies.append(ie)
 | 
				
			||||||
		ie.set_downloader(self)
 | 
							ie.set_downloader(self)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						def to_stdout(self, message, skip_eol=False):
 | 
				
			||||||
 | 
							"""Print message to stdout if not in quiet mode."""
 | 
				
			||||||
 | 
							if not self._params.get('quiet', False):
 | 
				
			||||||
 | 
								sys.stdout.write('%s%s' % (message, ['\n', ''][skip_eol]))
 | 
				
			||||||
 | 
								sys.stdout.flush()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	def download(self, url_list):
 | 
						def download(self, url_list):
 | 
				
			||||||
		"""Download a given list of URLs."""
 | 
							"""Download a given list of URLs."""
 | 
				
			||||||
		for url in url_list:
 | 
							for url in url_list:
 | 
				
			||||||
| 
						 | 
					@ -199,11 +203,8 @@ class FileDownloader(object):
 | 
				
			||||||
			percent_str = self.calc_percent(byte_counter, data_len)
 | 
								percent_str = self.calc_percent(byte_counter, data_len)
 | 
				
			||||||
			eta_str = self.calc_eta(start, time.time(), data_len, byte_counter)
 | 
								eta_str = self.calc_eta(start, time.time(), data_len, byte_counter)
 | 
				
			||||||
			speed_str = self.calc_speed(start, time.time(), byte_counter)
 | 
								speed_str = self.calc_speed(start, time.time(), byte_counter)
 | 
				
			||||||
 | 
								self.to_stdout('\r[download] %s of %s at %s ETA %s' %
 | 
				
			||||||
			if not self._params.get('quiet', False):
 | 
										(percent_str, data_len_str, speed_str, eta_str), skip_eol=True)
 | 
				
			||||||
				sys.stdout.write('\r[download] %s of %s at %s ETA %s' %
 | 
					 | 
				
			||||||
						(percent_str, data_len_str, speed_str, eta_str))
 | 
					 | 
				
			||||||
				sys.stdout.flush()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			before = time.time()
 | 
								before = time.time()
 | 
				
			||||||
			data_block = data.read(block_size)
 | 
								data_block = data.read(block_size)
 | 
				
			||||||
| 
						 | 
					@ -215,9 +216,7 @@ class FileDownloader(object):
 | 
				
			||||||
			stream.write(data_block)
 | 
								stream.write(data_block)
 | 
				
			||||||
			block_size = self.best_block_size(after - before, data_block_len)
 | 
								block_size = self.best_block_size(after - before, data_block_len)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if not self._params.get('quiet', False):
 | 
							self.to_stdout('')
 | 
				
			||||||
			print
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if data_len is not None and str(byte_counter) != data_len:
 | 
							if data_len is not None and str(byte_counter) != data_len:
 | 
				
			||||||
			raise ValueError('Content too short: %s/%s bytes' % (byte_counter, data_len))
 | 
								raise ValueError('Content too short: %s/%s bytes' % (byte_counter, data_len))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -323,11 +322,13 @@ class YoutubeIE(InfoExtractor):
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		# Log in
 | 
							# Log in
 | 
				
			||||||
		login_form = {	'current_form': 'loginForm',
 | 
							login_form = {
 | 
				
			||||||
 | 
									'current_form': 'loginForm',
 | 
				
			||||||
				'next':		'/',
 | 
									'next':		'/',
 | 
				
			||||||
				'action_login':	'Log In',
 | 
									'action_login':	'Log In',
 | 
				
			||||||
				'username':	username,
 | 
									'username':	username,
 | 
				
			||||||
				'password':	password,	}
 | 
									'password':	password,
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
		request = urllib2.Request(self._LOGIN_URL, urllib.urlencode(login_form), std_headers)
 | 
							request = urllib2.Request(self._LOGIN_URL, urllib.urlencode(login_form), std_headers)
 | 
				
			||||||
		try:
 | 
							try:
 | 
				
			||||||
			self.to_stdout('[youtube] Logging in')
 | 
								self.to_stdout('[youtube] Logging in')
 | 
				
			||||||
| 
						 | 
					@ -340,8 +341,10 @@ class YoutubeIE(InfoExtractor):
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
		# Confirm age
 | 
							# Confirm age
 | 
				
			||||||
		age_form = {	'next_url':		'/',
 | 
							age_form = {
 | 
				
			||||||
				'action_confirm':	'Confirm',	}
 | 
									'next_url':		'/',
 | 
				
			||||||
 | 
									'action_confirm':	'Confirm',
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
		request = urllib2.Request(self._AGE_URL, urllib.urlencode(age_form), std_headers)
 | 
							request = urllib2.Request(self._AGE_URL, urllib.urlencode(age_form), std_headers)
 | 
				
			||||||
		try:
 | 
							try:
 | 
				
			||||||
			self.to_stdout('[youtube] Confirming age')
 | 
								self.to_stdout('[youtube] Confirming age')
 | 
				
			||||||
| 
						 | 
					@ -386,6 +389,7 @@ class YoutubeIE(InfoExtractor):
 | 
				
			||||||
		video_real_url = 'http://www.youtube.com/get_video?video_id=%s&t=%s' % (video_id, mobj.group(1))
 | 
							video_real_url = 'http://www.youtube.com/get_video?video_id=%s&t=%s' % (video_id, mobj.group(1))
 | 
				
			||||||
		if format_param is not None:
 | 
							if format_param is not None:
 | 
				
			||||||
			video_real_url = '%s&fmt=%s' % (video_real_url, format_param)
 | 
								video_real_url = '%s&fmt=%s' % (video_real_url, format_param)
 | 
				
			||||||
 | 
							self.to_stdout('[youtube] %s: URL: %s' % (video_id, video_real_url))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		# uploader
 | 
							# uploader
 | 
				
			||||||
		mobj = re.search(r'More From: ([^<]*)<', video_webpage)
 | 
							mobj = re.search(r'More From: ([^<]*)<', video_webpage)
 | 
				
			||||||
| 
						 | 
					@ -407,7 +411,8 @@ class YoutubeIE(InfoExtractor):
 | 
				
			||||||
		simple_title = simple_title.strip(u'_')
 | 
							simple_title = simple_title.strip(u'_')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		# Return information
 | 
							# Return information
 | 
				
			||||||
		return [{	'id':		video_id,
 | 
							return [{
 | 
				
			||||||
 | 
								'id':		video_id,
 | 
				
			||||||
			'url':		video_real_url,
 | 
								'url':		video_real_url,
 | 
				
			||||||
			'uploader':	video_uploader,
 | 
								'uploader':	video_uploader,
 | 
				
			||||||
			'title':	video_title,
 | 
								'title':	video_title,
 | 
				
			||||||
| 
						 | 
					@ -425,7 +430,8 @@ if __name__ == '__main__':
 | 
				
			||||||
		youtube_ie = YoutubeIE()
 | 
							youtube_ie = YoutubeIE()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		# File downloader
 | 
							# File downloader
 | 
				
			||||||
		fd = FileDownloader({	'usenetrc': False,
 | 
							fd = FileDownloader({
 | 
				
			||||||
 | 
								'usenetrc': False,
 | 
				
			||||||
			'username': None,
 | 
								'username': None,
 | 
				
			||||||
			'password': None,
 | 
								'password': None,
 | 
				
			||||||
			'quiet': False,
 | 
								'quiet': False,
 | 
				
			||||||
| 
						 | 
					@ -433,9 +439,11 @@ if __name__ == '__main__':
 | 
				
			||||||
			'outtmpl': '%(id)s.%(ext)s'
 | 
								'outtmpl': '%(id)s.%(ext)s'
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		fd.add_info_extractor(youtube_ie)
 | 
							fd.add_info_extractor(youtube_ie)
 | 
				
			||||||
		fd.download([	'http://www.youtube.com/watch?v=t7qdwI7TVe8',
 | 
							fd.download([
 | 
				
			||||||
 | 
								'http://www.youtube.com/watch?v=t7qdwI7TVe8',
 | 
				
			||||||
			'http://www.youtube.com/watch?v=IJyn3pRcy_Q',
 | 
								'http://www.youtube.com/watch?v=IJyn3pRcy_Q',
 | 
				
			||||||
				'http://www.youtube.com/watch?v=DZRXe1wtC-M',	])
 | 
								'http://www.youtube.com/watch?v=DZRXe1wtC-M',
 | 
				
			||||||
 | 
								])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	except KeyboardInterrupt:
 | 
						except KeyboardInterrupt:
 | 
				
			||||||
		sys.exit('\nERROR: Interrupted by user')
 | 
							sys.exit('\nERROR: Interrupted by user')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue