97 lines
2.8 KiB
Python
97 lines
2.8 KiB
Python
import sys
|
|
import os
|
|
from os.path import basename
|
|
import spotipy
|
|
import spotipy.oauth2 as oauth2
|
|
import re
|
|
from titlecase import titlecase
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
|
|
|
|
def improve_song_names(songs):
|
|
char_filters = "()[]{}-:_/=+\"\'"
|
|
word_filters = ('lyrics', 'lyric', 'by', 'video', 'official', 'hd', 'dirty', 'with', 'lyrics', 'feat', 'original', 'mix',
|
|
'www', 'com', 'mp3', 'audio', 'remixed', 'remix', 'full', 'version', 'music', 'hq', 'uploaded', 'explicit')
|
|
|
|
reg_exp = 's/^\d\d //'
|
|
improved_names = []
|
|
for song in songs:
|
|
song = song.strip()
|
|
song = song.lstrip("0123456789.- ")
|
|
# re.sub(reg_exp, '', song)
|
|
song = song[0:-4]
|
|
song = ''.join(
|
|
map(lambda c: " " if c in char_filters else c, song))
|
|
|
|
song = re.sub('|'.join(re.escape(key) for key in word_filters),
|
|
"", song, flags=re.IGNORECASE)
|
|
|
|
song = ' '.join(song.split())
|
|
improved_names.append(song.strip())
|
|
|
|
return improved_names
|
|
|
|
|
|
def get_song_name(title, artist):
|
|
return title + ' - ' + artist
|
|
|
|
|
|
def get_metadata_spotify(spotify, song_name):
|
|
metadata = {}
|
|
meta_tags = spotify.search(song_name, limit=1)['tracks']['items'][0]
|
|
|
|
metadata['title'] = meta_tags['name']
|
|
metadata['artist'] = meta_tags['artists'][0]['name']
|
|
metadata['album'] = meta_tags['album']['name']
|
|
metadata['album_artist'] = meta_tags['album']['artists'][0]['name']
|
|
|
|
album_id = meta_tags['album']['id']
|
|
album_meta_tags = spotify.album(album_id)
|
|
|
|
metadata['release-date'] = album_meta_tags['release_date']
|
|
try:
|
|
metadata['genre'] = titlecase(album_meta_tags['genres'][0])
|
|
except IndexError:
|
|
try:
|
|
artist_id = meta_tags['artists'][0]['id']
|
|
artist_meta_tags = spotify.artist(artist_id)
|
|
metadata['genre'] = titlecase(artist_meta_tags['genres'][0])
|
|
|
|
except IndexError:
|
|
pass
|
|
|
|
metadata['track_num'] = meta_tags['track_number']
|
|
metadata['disc_num'] = meta_tags['disc_number']
|
|
|
|
metadata['albumart'] = meta_tags['album']['images'][0]['url']
|
|
# metadata['lyrics'] = get_lyrics_genius(
|
|
# get_song_name(metadata['title'], metadata['artist']))
|
|
|
|
return metadata
|
|
|
|
|
|
def list_files():
|
|
files = []
|
|
return [f for f in os.listdir('.') if f.endswith('.mp3')]
|
|
|
|
|
|
def main():
|
|
auth = oauth2.SpotifyClientCredentials(
|
|
client_id='622a0e16a4914e3eadc2a37b4a134f1e',
|
|
client_secret='6fe008a8b7754954a58a9849fa3172df')
|
|
token = auth.get_access_token()
|
|
spotify = spotipy.Spotify(auth=token)
|
|
|
|
files = list_files()
|
|
improved_name = improve_song_names(files)
|
|
|
|
# print(improved_name[19])
|
|
# print(files[16])
|
|
metadata = get_metadata_spotify(
|
|
spotify, improved_name[19])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|