#!/usr/bin/python3 from youtube_search import YoutubeSearch import os ##Import list of songs, artists from list.txt ##parse this file into a list of dictionaries ##for each dictionary pair, search youtube and output formatted links in file ## ##FUTURE - remove successful downloads from text file!! ## -assign each line read a number ## -remember numbers that are successful downloads ## -at end of script, delete lines from those numbers ## -OR- ## -Find lines that match successful downloads ## ## - Differentiae between Masters and Relesses when taking doscogs argument DOWNLOAD=True musicfile="list.txt" music=[] songnum = 0 with open(musicfile) as f: for line in f: song={} (key, val) = line.split(", ") songnum += 1 song['songnum'] = songnum song['Title'] = key song['Artist'] = val.rstrip() song['raw'] = line music.append(song) f.close() logresults=[] linkresults=[] completed=[] for song in music: searchterm = song['Title'] + " " + song['Artist'] + ' lyrics -Video' dictlink={} try: ytresult = YoutubeSearch(searchterm, max_results=1).to_dict() link = 'https://youtube.com' + ytresult[0]['link'] dictlink['Title'] = song['Title'] dictlink['Artist'] = song['Artist'] dictlink['link'] = link linkresults.append(dictlink) logresults.append(song['Title'] + ", " + song['Artist'] + " Link Created") if DOWNLOAD: print("Attempting to download", song['Title']) try: os.system("youtube-dl --extract-audio --audio-format mp3 --output '%(title)s.%(ext)s' --ignore-errors " + link) completed.append(song['songnum']) logresults.append(song['Title'] + ", " + song['Artist'] + " Audio downloaded") print("Download Complete!") except e as youtubedlexception: logresults.append(song['Title'] + ", " + song['Artist'] + " FAILED TO DOWNLOAD SONG (youtube-dl)") print(youtubedlexception) else: print("ERROR: Not Downloading for some reason") except: logresults.append(song['Title'] + ", " + song['Artist'] + " COULD NOT CREATE LINK") print("------------") for r in logresults: print(r) print(completed) print("Cleaning completed files from list") linenum=0 with open(musicfile, "r") as f: lines = f.readlines() with open(musicfile, "w") as f: for line in lines: linenum += 1 if linenum not in completed: f.write(line) f.close()