Разработано MVP
This commit is contained in:
		
							
								
								
									
										1
									
								
								app/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								app/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| from .main import run | ||||
							
								
								
									
										60
									
								
								app/main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								app/main.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | ||||
| import os | ||||
| import logging | ||||
| import random | ||||
| import time | ||||
|  | ||||
| from yandex_music import Client | ||||
|  | ||||
| import config | ||||
|  | ||||
|  | ||||
| logging.basicConfig( | ||||
|     level=logging.INFO, | ||||
| ) | ||||
|  | ||||
| logger = logging.getLogger(__name__) | ||||
|  | ||||
|  | ||||
| def run(): | ||||
|     logger.info('Init') | ||||
|     client = Client( | ||||
|         token=config.Yandex.token, | ||||
|     ) | ||||
|     client.init() | ||||
|     logger.info('Getting tracklist') | ||||
|     tracklist = client.usersLikesTracks() | ||||
|     dirpath = str(os.path.join( | ||||
|         config.Main.working_directory, | ||||
|         config.Download.dirname, | ||||
|     )) | ||||
|     os.makedirs( | ||||
|         name=dirpath, | ||||
|         exist_ok=True, | ||||
|     ) | ||||
|     for track in tracklist: | ||||
|         logger.info('Fetching track with ID %s' % track.id) | ||||
|         track = track.fetch_track() | ||||
|         logger.info('Downloading track %s — %s' % ( | ||||
|             ', '.join(track.artistsName()), | ||||
|             track.title, | ||||
|         )) | ||||
|         title = track.title | ||||
|         for symbol in config.Download.escape_symbols: | ||||
|             title = title.replace(symbol, '') | ||||
|         track.download( | ||||
|             filename=str(os.path.join( | ||||
|                 dirpath, | ||||
|                 config.Download.filename % { | ||||
|                     'artists': ', '.join(track.artistsName()), | ||||
|                     'title': title, | ||||
|                     'codec': config.Download.codec, | ||||
|                 }, | ||||
|             )), | ||||
|             codec=config.Download.codec, | ||||
|             bitrate_in_kbps=config.Download.bitrate, | ||||
|         ) | ||||
|         delay = random.randint( | ||||
|             config.Download.min_delay, | ||||
|             config.Download.max_delay, | ||||
|         ) | ||||
|         time.sleep(delay) | ||||
							
								
								
									
										1
									
								
								config/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								config/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| from .main import Main, Download, Yandex | ||||
							
								
								
									
										67
									
								
								config/main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								config/main.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | ||||
| from configparser import RawConfigParser | ||||
| import os | ||||
|  | ||||
|  | ||||
| cwd = os.getcwd() | ||||
|  | ||||
| config = RawConfigParser() | ||||
| config.optionxform = str | ||||
| config.read( | ||||
|     os.path.join( | ||||
|         cwd, | ||||
|         'config.ini', | ||||
|     ) | ||||
| ) | ||||
|  | ||||
|  | ||||
| class Main: | ||||
|     working_directory = config.get( | ||||
|         section='Main', | ||||
|         option='working_directory', | ||||
|         fallback=cwd, | ||||
|     ) | ||||
|  | ||||
|  | ||||
| class Download: | ||||
|     dirname = config.get( | ||||
|         section='Download', | ||||
|         option='dirname', | ||||
|         fallback='music', | ||||
|     ) | ||||
|     filename = config.get( | ||||
|         section='Download', | ||||
|         option='filename', | ||||
|         fallback='%(artists)s — %(title)s.%(codec)s', | ||||
|     ) | ||||
|     escape_symbols = config.get( | ||||
|         section='Download', | ||||
|         option='escape_symbols', | ||||
|         fallback=r'\/:*?"<>|', | ||||
|     ) | ||||
|     codec = config.get( | ||||
|         section='Download', | ||||
|         option='codec', | ||||
|         fallback='mp3', | ||||
|     ) | ||||
|     bitrate = config.getint( | ||||
|         section='Download', | ||||
|         option='bitrate', | ||||
|         fallback=320, | ||||
|     ) | ||||
|     min_delay = config.getint( | ||||
|         section='Download', | ||||
|         option='min_delay', | ||||
|         fallback=0, | ||||
|     ) | ||||
|     max_delay = config.getint( | ||||
|         section='Download', | ||||
|         option='max_delay', | ||||
|         fallback=0, | ||||
|     ) | ||||
|  | ||||
|  | ||||
| class Yandex: | ||||
|     token = config.get( | ||||
|         section='Yandex', | ||||
|         option='token', | ||||
|     ) | ||||
							
								
								
									
										1
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| yandex-music | ||||
		Reference in New Issue
	
	Block a user