mirror of
				https://github.com/KevinMidboe/spotify-downloader.git
				synced 2025-10-29 18:00:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| from slugify import SLUG_OK, slugify
 | |
| from core.const import log
 | |
| 
 | |
| import os
 | |
| 
 | |
| 
 | |
| def input_link(links):
 | |
|     """ Let the user input a choice. """
 | |
|     while True:
 | |
|         try:
 | |
|             log.info('Choose your number:')
 | |
|             the_chosen_one = int(input('> '))
 | |
|             if 1 <= the_chosen_one <= len(links):
 | |
|                 return links[the_chosen_one - 1]
 | |
|             elif the_chosen_one == 0:
 | |
|                 return None
 | |
|             else:
 | |
|                 log.warning('Choose a valid number!')
 | |
|         except ValueError:
 | |
|             log.warning('Choose a valid number!')
 | |
| 
 | |
| 
 | |
| def trim_song(text_file):
 | |
|     """ Remove the first song from file. """
 | |
|     with open(text_file, 'r') as file_in:
 | |
|         data = file_in.read().splitlines(True)
 | |
|     with open(text_file, 'w') as file_out:
 | |
|         file_out.writelines(data[1:])
 | |
| 
 | |
| 
 | |
| def is_spotify(raw_song):
 | |
|     """ Check if the input song is a Spotify link. """
 | |
|     status = len(raw_song) == 22 and raw_song.replace(" ", "%20") == raw_song
 | |
|     status = status or raw_song.find('spotify') > -1
 | |
|     return status
 | |
| 
 | |
| 
 | |
| def is_youtube(raw_song):
 | |
|     """ Check if the input song is a YouTube link. """
 | |
|     status = len(raw_song) == 11 and raw_song.replace(" ", "%20") == raw_song
 | |
|     status = status and not raw_song.lower() == raw_song
 | |
|     status = status or 'youtube.com/watch?v=' in raw_song
 | |
|     return status
 | |
| 
 | |
| 
 | |
| def generate_songname(tags):
 | |
|     """ Generate a string of the format '[artist] - [song]' for the given spotify song. """
 | |
|     raw_song = u'{0} - {1}'.format(tags['artists'][0]['name'], tags['name'])
 | |
|     return raw_song
 | |
| 
 | |
| 
 | |
| def sanitize_title(title):
 | |
|     """ Generate filename of the song to be downloaded. """
 | |
|     title = title.replace(' ', '_')
 | |
|     title = title.replace('/', '_')
 | |
| 
 | |
|     # slugify removes any special characters
 | |
|     title = slugify(title, ok='-_()[]{}', lower=False)
 | |
|     return title
 | |
| 
 | |
| 
 | |
| def filter_path(path):
 | |
|     if not os.path.exists(path):
 | |
|         os.makedirs(path)
 | |
|     for temp in os.listdir(path):
 | |
|         if temp.endswith('.temp'):
 | |
|             os.remove(os.path.join(path, temp))
 | |
| 
 | |
| 
 | |
| def videotime_from_seconds(time):
 | |
|     if time<60:
 | |
|         return str(time)
 | |
|     if time<3600:
 | |
|         return '{}:{}'.format(str(time//60), str(time%60).zfill(2))
 | |
| 
 | |
|     return '{}:{}:{}'.format(str(time//60),
 | |
|                              str((time%60)//60).zfill(2),
 | |
|                              str((time%60)%60).zfill(2))
 |