Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e88e7c2c3 | |||
| cfd80b839b |
@@ -1,71 +0,0 @@
|
|||||||
import requests
|
|
||||||
import os
|
|
||||||
from time import sleep
|
|
||||||
|
|
||||||
def get_mb_id(artist_name, mb_confidence):
|
|
||||||
artist_name = artist_name.strip('_')
|
|
||||||
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:
|
|
||||||
mb_data = response.json()
|
|
||||||
if mb_data['count'] > 0:
|
|
||||||
if mb_data['artists'][0]['score'] > mb_confidence:
|
|
||||||
return True, mb_data['artists'][0]['id'], True
|
|
||||||
else:
|
|
||||||
print("No artist found of hight enough confidance.")
|
|
||||||
return False, "", True
|
|
||||||
else:
|
|
||||||
print("No artist found.")
|
|
||||||
return False, "", True
|
|
||||||
elif (response.status_code == 503):
|
|
||||||
sleep(1)
|
|
||||||
return False, "", False
|
|
||||||
else:
|
|
||||||
print(f"MB Error: {response.status_code}")
|
|
||||||
return False, "", True
|
|
||||||
|
|
||||||
def get_image(mb_id, ftv_api_key, artist_path):
|
|
||||||
ftv_api_url = f'https://webservice.fanart.tv/v3/music/{mb_id}?api_key={ftv_api_key}'
|
|
||||||
response = requests.get(ftv_api_url)
|
|
||||||
ftv_data =response.json()
|
|
||||||
if not ('status' in ftv_data):
|
|
||||||
if ('artistthumb' in ftv_data):
|
|
||||||
art_url = ftv_data['artistthumb'][0]['url']
|
|
||||||
print(art_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)
|
|
||||||
return True
|
|
||||||
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)
|
|
||||||
return True
|
|
||||||
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)
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
print("Error downloading: ", response.status_code)
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
print("Thumb not found.")
|
|
||||||
return True
|
|
||||||
elif (response.status_code == 503):
|
|
||||||
sleep(1)
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
error_msg = ftv_data['error message']
|
|
||||||
if (error_msg == "503"):
|
|
||||||
sleep(1)
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
print(f"FTV Error: {error_msg}")
|
|
||||||
return True
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
def get_all(path):
|
|
||||||
return [name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
|
|
||||||
|
|
||||||
def has_artist_art(path):
|
|
||||||
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
|
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
#include <libconfig.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define conf_file "config.ini"
|
||||||
|
|
||||||
|
const char *get_conf_str(char set_key[10]) {
|
||||||
|
const char *prog_conf = malloc(10 * sizeof(char));
|
||||||
|
config_t cfg;
|
||||||
|
config_setting_t *setting;
|
||||||
|
|
||||||
|
config_init(&cfg);
|
||||||
|
|
||||||
|
if (!config_read_file(&cfg, conf_file)) {
|
||||||
|
fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
|
||||||
|
config_error_line(&cfg), config_error_text(&cfg));
|
||||||
|
config_destroy(&cfg);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
setting = config_lookup(&cfg, set_key);
|
||||||
|
|
||||||
|
prog_conf = config_setting_get_string(setting);
|
||||||
|
|
||||||
|
config_destroy(&cfg);
|
||||||
|
return prog_conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_conf_int(char set_key[10]) {
|
||||||
|
int set_int;
|
||||||
|
config_t cfg;
|
||||||
|
config_setting_t *setting;
|
||||||
|
|
||||||
|
config_init(&cfg);
|
||||||
|
|
||||||
|
if (!config_read_file(&cfg, conf_file)) {
|
||||||
|
fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
|
||||||
|
config_error_line(&cfg), config_error_text(&cfg));
|
||||||
|
config_destroy(&cfg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
setting = config_lookup(&cfg, set_key);
|
||||||
|
set_int = config_setting_get_int(setting);
|
||||||
|
|
||||||
|
config_destroy(&cfg);
|
||||||
|
|
||||||
|
return set_int;
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_conf(const char m_dir[20], const int mb_conf,
|
||||||
|
const char ftv_api_key[32]) {
|
||||||
|
if (m_dir != NULL) {
|
||||||
|
printf("The music directory is: %s\n", m_dir);
|
||||||
|
}
|
||||||
|
if (mb_conf != 1) {
|
||||||
|
printf("The lower limit for MB confidence is: %d\n", mb_conf);
|
||||||
|
}
|
||||||
|
if (ftv_api_key != NULL) {
|
||||||
|
printf("Your API key is: %s\n", ftv_api_key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int mb_conf;
|
||||||
|
const char *m_dir, *ftv_api_key;
|
||||||
|
|
||||||
|
m_dir = get_conf_str("dir");
|
||||||
|
mb_conf = get_conf_int("confidence");
|
||||||
|
ftv_api_key = get_conf_str("api_key");
|
||||||
|
|
||||||
|
print_conf(m_dir, mb_conf, ftv_api_key);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
from time import sleep
|
|
||||||
import dir_activities
|
|
||||||
import api_calls
|
|
||||||
from prog_conf import gaa_conf
|
|
||||||
|
|
||||||
gaa_version = "2024.10.15.2"
|
|
||||||
|
|
||||||
option_set = argparse.ArgumentParser(description=f"An automatic downloader of artist art using MusicBrainz and Fanart.TV.\nVersion: {gaa_version}")
|
|
||||||
jls_extract_var = f'%(prog)s {gaa_version}'
|
|
||||||
option_set.add_argument('--version', '-v', action='version', version=jls_extract_var)
|
|
||||||
cmd_options = option_set.parse_args()
|
|
||||||
|
|
||||||
config = gaa_conf().conf
|
|
||||||
|
|
||||||
music_path = config['music']['dir']
|
|
||||||
ftv_api_key = config['fanart_tv']['api_key']
|
|
||||||
mb_confidence = int(config['musicbrainz']['confidence'])
|
|
||||||
|
|
||||||
count = 1
|
|
||||||
dir_list = dir_activities.get_all(music_path)
|
|
||||||
dir_list.sort()
|
|
||||||
for artist in dir_list:
|
|
||||||
artist_path = os.path.join(music_path, artist)
|
|
||||||
if (not(dir_activities.has_artist_art(artist_path))):
|
|
||||||
# print(dir_activities.has_artist_art(artist_path))
|
|
||||||
print(str(count) + ": " + artist.strip('_'))
|
|
||||||
try:
|
|
||||||
ftv_response = False
|
|
||||||
mb_exit = False
|
|
||||||
while not mb_exit:
|
|
||||||
found_status, mb_id, mb_exit = api_calls.get_mb_id(artist, mb_confidence)
|
|
||||||
# print("Getting ", artist_image)
|
|
||||||
if found_status:
|
|
||||||
while not ftv_response:
|
|
||||||
ftv_response = api_calls.get_image(mb_id, ftv_api_key, artist_path)
|
|
||||||
print(ftv_response)
|
|
||||||
else:
|
|
||||||
print(f"{artist} returned no results.")
|
|
||||||
# api_requests.get_art(artist_image, artist, music_path)
|
|
||||||
except Exception as e:
|
|
||||||
print("Artist or art not found.")
|
|
||||||
print(e)
|
|
||||||
print("---------")
|
|
||||||
count += 1
|
|
||||||
#sleep(1)
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
import configparser
|
|
||||||
from os.path import exists,join,expanduser
|
|
||||||
|
|
||||||
|
|
||||||
class gaa_conf:
|
|
||||||
def __init__(self):
|
|
||||||
self.conf = configparser.ConfigParser()
|
|
||||||
if (exists('config.ini')):
|
|
||||||
self.conf_path = 'config.ini'
|
|
||||||
else:
|
|
||||||
self.conf_path = join(expanduser(
|
|
||||||
"~"), ".local/share/get_artist_art/config.ini")
|
|
||||||
self.conf.read(self.conf_path)
|
|
||||||
|
|
||||||
def get():
|
|
||||||
return gaa_conf
|
|
||||||
Reference in New Issue
Block a user