spotify-csv-parser/main.py

67 lines
2.2 KiB
Python

import argparse
import csv
import sys
from tqdm import tqdm
from ytmusicapi import YTMusic as YTM
def createArgParser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input', type=str, help='Input csv file with songs', default='spotlistr-exported-playlist.csv')
parser.add_argument('-o', '--output', type=str, help='Output file with urls on youtube music', default='urls.txt')
return parser
class Song():
artist = ''
trackName = ''
albumName = ''
def __init__(self, artist='', trackName='', albumName='') -> None:
self.artist = artist
self.trackName = trackName
self.albumName = albumName
def print(self) -> None:
print(f'Artist: {self.artist}\nTrack: {self.trackName}\nAlbum: {self.albumName}')
def getArtist(self) -> str:
return self.artist
def getTrack(self) -> str:
return self.trackName
def getAlbum(self) -> str:
return self.albumName
def parseCSV(file: str = 'spotlistr-exported-playlist.csv') -> list:
songs = []
with open(file, newline='', encoding="UTF-8") as csvfile:
songsList = csv.reader(csvfile)
for row in songsList:
try:
songs.append(Song(row[0], row[1], row[2]))
except: pass
return songs[1:]
def searchSongs(songs: list) -> list:
YTMusic = YTM()
urls = []
urlBase = 'https://music.youtube.com/watch?v='
for song in tqdm(songs):
searched = YTMusic.search(query=song.getArtist() + ' ' + song.getTrack(), filter='songs', limit=1)
try:
urls.append(urlBase + searched[0]['videoId'])
except IndexError:
print('\n' + song.getArtist() + ' ' + song.getTrack() + ' - NOT FOUND')
return urls
def writeUrlToFile(urls: list, file: str = 'urls.txt') -> None:
with open(file, 'w') as f:
w = ''
for i in urls:
w += i + '\n'
f.write(w)
if __name__ == '__main__':
parser = createArgParser()
namespace = parser.parse_args(sys.argv[1:])
writeUrlToFile(searchSongs(parseCSV(namespace.input)), namespace.output)