script finally working

pull/1/head
Yash Agarwal 2017-06-17 18:21:17 +05:30
parent c921790d62
commit 830106cab5
1 changed files with 69 additions and 14 deletions

View File

@ -10,6 +10,7 @@ ______________________________________________________________
import sys import sys
import shutil
import os import os
from os import chdir, listdir, rename, walk, path, environ from os import chdir, listdir, rename, walk, path, environ
from os.path import basename, dirname, realpath from os.path import basename, dirname, realpath
@ -116,6 +117,7 @@ def get_lyrics_genius(song_name):
calls genius.com api for getting the url of the song lyrics page then scrapes that page to fetch the lyrics calls genius.com api for getting the url of the song lyrics page then scrapes that page to fetch the lyrics
''' '''
GENIUS_KEY = "iazjdOEEunvS_XOXhmJTcUzOsvrEjaNIftCKj7PLrgZjjWXiFTeoNHVmwYRDMkx9"
base_url = "https://api.genius.com" base_url = "https://api.genius.com"
headers = {'Authorization': 'Bearer %s' % (GENIUS_KEY)} headers = {'Authorization': 'Bearer %s' % (GENIUS_KEY)}
search_url = base_url + "/search" search_url = base_url + "/search"
@ -154,6 +156,7 @@ def get_metadata_spotify(spotify, song_name):
call spotify.com api to get the metadata required, as much as possible call spotify.com api to get the metadata required, as much as possible
''' '''
print("trying to find data on Spotify...")
metadata = {} metadata = {}
try: try:
meta_tags = spotify.search(song_name, limit=1)['tracks']['items'][0] meta_tags = spotify.search(song_name, limit=1)['tracks']['items'][0]
@ -179,6 +182,7 @@ def get_metadata_spotify(spotify, song_name):
metadata['genre'] = titlecase(artist_meta_tags['genres'][0]) metadata['genre'] = titlecase(artist_meta_tags['genres'][0])
except IndexError: except IndexError:
print("song genre could not be found.")
pass pass
metadata['track_num'] = meta_tags['track_number'] metadata['track_num'] = meta_tags['track_number']
@ -192,6 +196,7 @@ def get_metadata_spotify(spotify, song_name):
if lyrics is not None: if lyrics is not None:
metadata['lyrics'] = lyrics metadata['lyrics'] = lyrics
print()
return metadata return metadata
@ -204,11 +209,13 @@ def list_files():
return [f for f in listdir('.') if f.endswith('.mp3')] return [f for f in listdir('.') if f.endswith('.mp3')]
def set_metadata(norename, rename_format, file_name, metadata): def set_metadata(file_name, metadata):
''' '''
call eyed3 module to set mp3 song metadata as received from spotify call eyed3 module to set mp3 song metadata as received from spotify
''' '''
print("setting metadata for " + file_name)
print()
audiofile = eyed3.load(file_name) audiofile = eyed3.load(file_name)
tag = audiofile.tag tag = audiofile.tag
@ -227,6 +234,44 @@ def set_metadata(norename, rename_format, file_name, metadata):
tag.save(version=(2, 3, 0)) tag.save(version=(2, 3, 0))
# if not norename:
# song_title = rename_format.format(
# title=metadata['title'] + ' -',
# artist=metadata['artist'] + ' -',
# album=metadata['album'] + ' -')
# song_title = song_title[:-1] if song_title.endswith('-') else song_title
# song_title = ' '.join(song_title.split()).strip()
# print("renaming " + file_name + "to " + song_title)
# new_path = path.dirname(file_name) + '{}.mp3'.format(song_title)
# rename(file_name, new_path)
print()
return
def fix_music_file(spotify, file_name, norename, rename_format):
print("------------------------------------------------------------------------")
print()
print()
print("Currently processing " + file_name)
metadata = get_metadata_spotify(spotify, improve_song_name(file_name))
if not metadata:
is_improvemet_needed = True
return is_improvemet_needed
else:
set_metadata(file_name, metadata)
is_improvemet_needed = False
rename_file = rename_to_format(
file_name, norename, rename_format, metadata)
shutil.move(rename_file, 'Music')
return is_improvemet_needed
def rename_to_format(file_name, norename, rename_format, metadata):
if not norename: if not norename:
song_title = rename_format.format( song_title = rename_format.format(
title=metadata['title'] + ' -', title=metadata['title'] + ' -',
@ -235,19 +280,24 @@ def set_metadata(norename, rename_format, file_name, metadata):
song_title = song_title[:-1] if song_title.endswith('-') else song_title song_title = song_title[:-1] if song_title.endswith('-') else song_title
song_title = ' '.join(song_title.split()).strip() song_title = ' '.join(song_title.split()).strip()
print("renaming " + file_name + "to " + song_title)
new_path = path.dirname(file_name) + '{}.mp3'.format(song_title) new_path = path.dirname(file_name) + '{}.mp3'.format(song_title)
rename(file_name, new_path) rename(file_name, new_path)
return new_path
return
def fix_music_files(spotify, files, norename, rename_format): def fix_music_files(spotify, files, norename, rename_format):
need_to_improve = [] need_to_improve = []
for file_name in files: for file_name in files:
metadata = get_metadata_spotify(spotify, improve_song_name(file_name)) response = fix_music_file(spotify, file_name, norename, rename_format)
if not metadata:
if response is True:
need_to_improve.append(file_name) need_to_improve.append(file_name)
set_metadata(norename, rename_format, file_name, metadata)
("------------------------------------------------------------------------")
print()
print()
return need_to_improve return need_to_improve
@ -299,14 +349,19 @@ def main():
files = [] files = []
# if song_name is not None: if song_name is not None:
# fix_music_files(spotify, files.append( need_to_improve = fix_music_file(
# song_name), norename, rename_format) spotify, song_name, norename, rename_format)
if need_to_improve is True:
print(song_name)
# elif repair_directory: elif repair_directory:
chdir(repair_directory or '.') chdir(repair_directory or '.')
if not os.path.exists("Music"):
os.makedirs("Music")
files = list_files() files = list_files()
need_to_improve = fix_music_files(spotify, files, norename, rename_format) need_to_improve = fix_music_files(
spotify, files, norename, rename_format)
print(need_to_improve) print(need_to_improve)