Разработано 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