#!/usr/bin/python # -*- coding: utf-8 -*- #****************** ******************* #*********************************************************** import os import shutil from datetime import * import time from operator import itemgetter from ftplib import FTP import ftplib import subprocess import commands #*********************************************************** #****************** ******************* #****************** ************************ #*********************************************************** dir_exec = '' # , dir_music = '' #, -( streamripper) dir_music = os.path.join(dir_exec,dir_music) # alias_dir = '' # . : ' - ..' time_shift = 3 # time_sync = 4 # , time_storage = 30 # , server = '192.168.1.126' #FTP server, login = '' # FTP pass_ftp = ' ' # FTP port = '2121' # FTP andr_music = '/mnt/sdcard/Music' # FTP rec_proc = ['streamripper', ' ', '-d', '-D', '%S/%A-%T'] # streamrippera` #*********************************************************** #****************** ************************ #****************** ************************* #*********************************************************** #*** streamripper ( ) shell` def start_rec(proc_stream): num = commands.getoutput('pidof %s |wc -w' % proc_stream) if int(num) >= 2: os.system('killall ' + proc_stream) num = commands.getoutput('pidof %s |wc -w' % proc_stream) if int(num) == 0: proc = subprocess.Popen([rec_proc[0], rec_proc[1], rec_proc[2], dir_exec, rec_proc[3], rec_proc[4],], stdout=subprocess.PIPE) #*** ftp- def ftp_online(): ftpConnect = FTP() try: ftpConnect.connect(server,port) ftpConnect.login(login, pass_ftp) ftpConnect.quit() ftpConnect.close() enable = 1 except: enable = 0 return enable #*** , . def mdir(create_dir): if not os.path.isdir(create_dir): os.makedirs(create_dir) #*** def uniq_date(lst): return reduce(lambda y,z: not (z in y) and y.append(z) or y, lst, []) #*** mp3 def date_mp3(path_dir_music): out_date=[] names = os.listdir(path_dir_music) for name in names: if name.endswith('mp3'): path = os.path.join(path_dir_music,name) mtime = os.path.getmtime(path) - time_shift*60*60 out_date.append(date.fromtimestamp(mtime).strftime('%d.%m.%Y')) return out_date #*** mp3 def name_mp3(path_dir_music): out_name=[] names = os.listdir(path_dir_music) for name in names: if name.endswith('mp3'): out_name.append(name) return out_name #*** . . def m3u(dir,path): m3u_n_d = [] m3u_n_s = [] m3u_names = name_mp3(path) i=0 for m3u_name in m3u_names: m3u_mtime = os.path.getmtime(os.path.join(path,m3u_name)) - time_shift*60*60 m3u_n_d.append([m3u_name,m3u_mtime]) i=i+1 m3u_n_d = sorted(m3u_n_d, key=itemgetter(1)) w = open(path+'/'+dir+'.m3u','w') w.write('#EXTM3U\n') #EXTM3U m3U for i in range(i): #w.write('./'+m3u_n_d[i][0]+'\n') # w.write(m3u_n_d[i][0]+'\n') # PowerAmp w.close #*** NLST. def ftp_nlst(pwd): log = [] ftpConnect.cwd(pwd) ftpConnect.retrlines('NLST', callback=log.append) return log #*** LIST def ftp_list(pwd): log = [] file_ftp = [] ftpConnect.cwd(pwd) ftpConnect.retrlines('LIST', callback=log.append) files = (line.split(':')[1] for line in log) p = list(files) for name in p: file_ftp.append((name[3:])) return file_ftp #*** def num_day(dir_time): date_ = time.mktime(time.strptime(dir_time.split(' - ')[1],'%d.%m.%Y')) now_ = time.time() day_beet = (now_-date_)/(60*60*24) return int(day_beet) #*********************************************************** #****************** ************************* #****************** ***************************** #*********************************************************** # start_rec(rec_proc[0]) # creates_dirs = [] u_dates = uniq_date(date_mp3(dir_music)) j=0 for u_date in u_dates: mdir(os.path.join(dir_exec,alias_dir+u_date)) creates_dirs.append([alias_dir+u_date,os.path.join(dir_exec,alias_dir+u_date)]) j=j+1 # mp3 out_names = name_mp3(dir_music) for out_name in out_names: path = os.path.join(dir_music,out_name) mtime = os.path.getmtime(path) - time_shift*60*60 out_date_temp = date.fromtimestamp(mtime).strftime('%d.%m.%Y') shutil.move(os.path.join(dir_music,out_name),os.path.join(dir_exec,alias_dir+out_date_temp,out_name)) # for j in range(j): m3u(creates_dirs[j][0],creates_dirs[j][1]) # dir_rem_serv = os.listdir(dir_exec) for dir_rem_s in dir_rem_serv: if dir_rem_s[:15] == alias_dir: if num_day(dir_rem_s) > time_storage: shutil.rmtree(os.path.join(dir_exec,dir_rem_s)) # if ftp_online() == 1: ftpConnect = FTP() ftpConnect.connect(server,port) ftpConnect.login(login, pass_ftp) ftpConnect.cwd(andr_music) # st = ftpConnect.pwd() # dir_on_root = ftp_list(st) for dir_rem in dir_on_root: if dir_rem[:15] == alias_dir: if num_day(dir_rem) > time_sync: ftpConnect.cwd(os.path.join(st,dir_rem)) files_rem = ftp_list(os.path.join(st,dir_rem)) for file_rem in files_rem: ftpConnect.delete(file_rem) # ftpConnect.cwd(st) ftpConnect.rmd(os.path.join(st,dir_rem)) # ftpConnect.quit() ftpConnect.close() # dir_names = os.listdir(dir_exec) for dir_name in dir_names: if dir_name[:15] == alias_dir: if num_day(dir_name) <= time_sync and ftp_online() == 1: ftpConnect = FTP() ftpConnect.connect(server,port) ftpConnect.login(login, pass_ftp) ftpConnect.cwd(andr_music) # st = ftpConnect.pwd() # dir_on_root = ftp_list(st) if dir_name not in dir_on_root: ftpConnect.mkd(os.path.join(st,dir_name)) ftpConnect.cwd(os.path.join(st,dir_name)) list_files = os.listdir(os.path.join(dir_exec,dir_name)) files_on_dir = ftp_list(os.path.join(st,dir_name)) for file in list_files: st_file = str(os.path.join(dir_exec,dir_name,file)) if file not in files_on_dir: ftpConnect.storbinary('STOR ' + file, open(st_file, 'rb'),1024) if file.endswith('m3u'): ftpConnect.storbinary('STOR ' + file, open(st_file, 'rb'),1024) ftpConnect.quit() ftpConnect.close() #*********************************************************** #****************** ******************************
Source: https://habr.com/ru/post/146272/
All Articles