Разработано MVP
Этот коммит содержится в:
Коммит
a4ff7cfe2d
1
app/__init__.py
Обычный файл
1
app/__init__.py
Обычный файл
@ -0,0 +1 @@
|
||||
from .main import run
|
60
app/main.py
Обычный файл
60
app/main.py
Обычный файл
@ -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
Обычный файл
1
config/__init__.py
Обычный файл
@ -0,0 +1 @@
|
||||
from .main import Main, Download, Yandex
|
67
config/main.py
Обычный файл
67
config/main.py
Обычный файл
@ -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',
|
||||
)
|
5
main.py
Обычный файл
5
main.py
Обычный файл
@ -0,0 +1,5 @@
|
||||
import app
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
1
requirements.txt
Обычный файл
1
requirements.txt
Обычный файл
@ -0,0 +1 @@
|
||||
yandex-music
|
Загрузка…
Ссылка в новой задаче
Block a user