9 Commits

Author SHA1 Message Date
883f594f4f Fix the output path of Artist Background.
The artist background had been saving to the folder the script was run from. This has now been resolved.
2024-10-14 11:08:17 -04:00
c5ffadd1f0 Get the artist background.
Adds the artist background as a possible source of artist image.
2024-10-14 10:34:43 -04:00
ea7396ff53 Sleep timer added.
A dely of 1 second has been added to keep the MusicBrainz API from dropping requests (503 errors).
2024-09-30 22:06:30 -04:00
c01b4cdcdd Send a useragent in the request header to MB.
MusicBrainz desires an identifying header in the requests made to its API. This is now included.
2024-09-30 22:05:31 -04:00
66ce579992 Add check for config in .local directory 2024-09-30 17:03:56 -04:00
6f7e69411b Update code to remove a trialing _ from the artist name. 2024-09-25 21:09:10 -04:00
fe8a4c2410 Add fetching of hdmusiclogo if artistthumb fails.
This will catch a few more artists and at least place something in their directory.
2024-09-20 14:12:54 -04:00
858d68b491 Fix if statement from previous commit. 2024-09-20 14:01:00 -04:00
f2d21185af Check for artist.png when looking for local art. 2024-09-20 13:58:58 -04:00
3 changed files with 39 additions and 12 deletions

View File

@@ -2,8 +2,10 @@ import requests
import os import os
def get_mb_id(artist_name, mb_confidence): def get_mb_id(artist_name, mb_confidence):
mb_url = f'https://musicbrainz.org/ws/2/artist?query=artist:%22{artist_name}%22&fmt=json' artist_name = artist_name.strip('_')
response = requests.get(mb_url) mb_url = f'https://musicbrainz.org/ws/2/artist?query=artist:"{artist_name}"&fmt=json'
header = {'User-Agent': 'get_artist_art.py/1.0'}
response = requests.get(mb_url, headers=header)
if response.status_code == 200: if response.status_code == 200:
mb_data = response.json() mb_data = response.json()
if mb_data['count'] > 0: if mb_data['count'] > 0:
@@ -23,14 +25,29 @@ def get_image(mb_id, ftv_api_key, artist_path):
response = requests.get(ftv_api_url) response = requests.get(ftv_api_url)
ftv_data =response.json() ftv_data =response.json()
if not ('status' in ftv_data): if not ('status' in ftv_data):
art_url = ftv_data['artistthumb'][0]['url'] if ('artistthumb' in ftv_data):
print(art_url) art_url = ftv_data['artistthumb'][0]['url']
response = requests.get(art_url) print(art_url)
if response.status_code == 200: response = requests.get(art_url)
with open(os.path.join(artist_path, 'artist.jpg'), 'wb') as f: if response.status_code == 200:
f.write(response.content) with open(os.path.join(artist_path, 'artist.jpg'), 'wb') as f:
f.write(response.content)
elif ('artistbackground' in ftv_data):
art_url = ftv_data['artistbackground'][0]['url']
response = requests.get(art_url)
if (response.status_code == 200):
with open(os.path.join(artist_path, 'artist.jpg'),'wb') as f:
f.write(response.content)
elif ('hdmusiclogo' in ftv_data):
art_url = ftv_data['hdmusiclogo'][0]['url']
response = requests.get(art_url)
if response.status_code == 200:
with open(os.path.join(artist_path, 'artist.png'), 'wb') as f:
f.write(response.content)
else:
print("Error downloading: ", response.status_code)
else: else:
print("Error downloading: ", response.status_code) print("Thumb not found.")
else: else:
error_msg = ftv_data['error message'] error_msg = ftv_data['error message']
print(f"Error: {error_msg}") print(f"Error: {error_msg}")

View File

@@ -4,4 +4,7 @@ def get_all(path):
return [name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))] return [name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
def has_artist_art(path): def has_artist_art(path):
return os.path.exists(os.path.join(path, "artist.jpg")) if(os.path.exists(os.path.join(path, "artist.jpg")))or (os.path.exists(os.path.join(path, "artist.png"))):
return True
else:
return False

View File

@@ -2,11 +2,17 @@
import configparser import configparser
import os import os
from time import sleep
import dir_activities import dir_activities
import api_calls import api_calls
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read('config.ini') if (os.path.exists('config.ini')):
conf_path = 'config.ini'
else:
conf_path = os.path.join(os.path.expanduser("~"), ".local/share/get_artist_art/config.ini")
config.read(conf_path)
music_path = config['music']['dir'] music_path = config['music']['dir']
ftv_api_key = config['fanart_tv']['api_key'] ftv_api_key = config['fanart_tv']['api_key']
@@ -19,7 +25,7 @@ for artist in dir_list:
artist_path = os.path.join(music_path, artist) artist_path = os.path.join(music_path, artist)
if (not(dir_activities.has_artist_art(artist_path))): if (not(dir_activities.has_artist_art(artist_path))):
print(dir_activities.has_artist_art(artist_path)) print(dir_activities.has_artist_art(artist_path))
print(str(count) + ": " + artist) print(str(count) + ": " + artist.strip('_'))
try: try:
found_status, mb_id = api_calls.get_mb_id(artist, mb_confidence) found_status, mb_id = api_calls.get_mb_id(artist, mb_confidence)
# print("Getting ", artist_image) # print("Getting ", artist_image)
@@ -33,3 +39,4 @@ for artist in dir_list:
print(e) print(e)
count += 1 count += 1
sleep(1)