def test_is_spotify(self): url = "https://open.spotify.com/user/spotify/playlist/" + \ "37i9dQZF1DX6PYajiT4pAf?si=PxCM89KITte-N40hxgykqw" result = internals.is_spotify(url) assert result url = "https://open.notspotify.com/user/spotify/playlist/" + \ "37i9dQZF1DX6PYajiT4pAf?si=PxCM89KITte-N40hxgykqw" result = internals.is_spotify(url) assert not result
def generate_metadata(raw_song): """ Fetch a song's metadata from Spotify. """ if internals.is_spotify(raw_song): # fetch track information directly if it is spotify link log.debug('Fetching metadata for given track URL') meta_tags = spotify.track(raw_song) else: # otherwise search on spotify and fetch information from first result log.debug('Searching for "{}" on Spotify'.format(raw_song)) try: meta_tags = spotify.search(raw_song, limit=1)['tracks']['items'][0] except IndexError: return None artist = spotify.artist(meta_tags['artists'][0]['id']) album = spotify.album(meta_tags['album']['id']) try: meta_tags[u'genre'] = titlecase(artist['genres'][0]) except IndexError: meta_tags[u'genre'] = None try: meta_tags[u'copyright'] = album['copyrights'][0]['text'] except IndexError: meta_tags[u'copyright'] = None try: meta_tags[u'external_ids'][u'isrc'] except KeyError: meta_tags[u'external_ids'][u'isrc'] = None meta_tags[u'release_date'] = album['release_date'] meta_tags[u'publisher'] = album['label'] meta_tags[u'total_tracks'] = album['tracks']['total'] log.debug(pprint.pformat(meta_tags)) return meta_tags
def check_exists(music_file, raw_song, meta_tags, folder): """ Check if the input song already exists in the given folder. """ log.debug('Cleaning any temp files and checking ' 'if "{}" already exists'.format(music_file)) songs = os.listdir(folder) for song in songs: if song.endswith('.temp'): os.remove(os.path.join(folder, song)) continue # check if any song with same name is already present in the given folder if os.path.splitext(song)[0] == music_file: log.debug('Found an already existing song: "{}"'.format(song)) if internals.is_spotify(raw_song): # check if the already downloaded song has correct metadata # if not, remove it and download again without prompt already_tagged = metadata.compare(os.path.join(folder, song), meta_tags) log.debug( 'Checking if it is already tagged correctly? {}'.format( already_tagged)) if not already_tagged: os.remove(os.path.join(folder, song)) return False log.debug('Skipping "{}"'.format(song)) return True return False
def generate_metadata(raw_song): """ Fetch a song's metadata from Spotify. """ if internals.is_spotify(raw_song): # fetch track information directly if it is spotify link log.debug('Fetching metadata for given track URL') meta_tags = _getClient().track(raw_song) else: # otherwise search on spotify and fetch information from first result log.debug('Searching for "{}" on Spotify'.format(raw_song)) try: search_result = _getClient().search(raw_song, limit=1) meta_tags = search_result['tracks']['items'][0] except IndexError: return None artist = _getClient().artist(meta_tags['artists'][0]['id']) album = _getClient().album(meta_tags['album']['id']) try: meta_tags[u'genre'] = titlecase(artist['genres'][0]) except IndexError: meta_tags[u'genre'] = None try: meta_tags[u'copyright'] = album['copyrights'][0]['text'] except IndexError: meta_tags[u'copyright'] = None try: meta_tags[u'external_ids'][u'isrc'] except KeyError: meta_tags[u'external_ids'][u'isrc'] = None meta_tags[u'release_date'] = album['release_date'] meta_tags[u'publisher'] = album['label'] meta_tags[u'total_tracks'] = album['tracks']['total'] log.debug('Fetching lyrics') try: meta_tags['lyrics'] = lyricwikia.get_lyrics( meta_tags['artists'][0]['name'], meta_tags['name']) except lyricwikia.LyricsNotFound: meta_tags['lyrics'] = None # Some sugar meta_tags['year'], *_ = meta_tags['release_date'].split('-') meta_tags['duration'] = meta_tags['duration_ms'] / 1000.0 # Remove unwanted parameters del meta_tags['duration_ms'] del meta_tags['available_markets'] del meta_tags['album']['available_markets'] log.debug(pprint.pformat(meta_tags)) return meta_tags
def check_exists(music_file, raw_song, meta_tags): """ Check if the input song already exists in the given folder. """ log.debug('Cleaning any temp files and checking ' 'if "{}" already exists'.format(music_file)) songs = os.listdir(args.folder) for song in songs: if song.endswith('.temp'): os.remove(os.path.join(args.folder, song)) continue # check if any song with similar name is already present in the given folder file_name = internals.sanitize_title(music_file) if song.startswith(file_name): log.debug('Found an already existing song: "{}"'.format(song)) if internals.is_spotify(raw_song): # check if the already downloaded song has correct metadata # if not, remove it and download again without prompt already_tagged = metadata.compare( os.path.join(args.folder, song), meta_tags) log.debug('Checking if it is already tagged correctly? {}', already_tagged) if not already_tagged: os.remove(os.path.join(args.folder, song)) return False log.warning('"{}" already exists'.format(song)) if args.overwrite == 'prompt': log.info('"{}" has already been downloaded. ' 'Re-download? (y/N): '.format(song)) prompt = input('> ') if prompt.lower() == 'y': os.remove(os.path.join(args.folder, song)) return False else: return True elif args.overwrite == 'force': os.remove(os.path.join(args.folder, song)) log.info('Overwriting "{}"'.format(song)) return False elif args.overwrite == 'skip': log.info('Skipping "{}"'.format(song)) return True return False