Compare commits

...

3 Commits

Author SHA1 Message Date
39c6a1bcc1 Adds functionality to use command line switches.
The program will now accept the following switches:
-p to print the values stored in the config file.
-s NOT IMPLIMENTED YET. Will be used later to search for a given artist.
2024-10-04 11:09:17 -04:00
5e88e7c2c3 Reading a config file is now working. 2024-10-04 00:07:06 -04:00
cfd80b839b Remove Python files.
Remove the Python code from this branch.
2024-10-03 17:15:41 -04:00
4 changed files with 133 additions and 99 deletions

View File

@ -1,47 +0,0 @@
import requests
import os
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']
else:
print("No artist found of hight enough confidance.")
else:
print("No artist found.")
return False, ""
else:
print(f"Error: {response.status_code}")
return False, ""
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)
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:
print("Thumb not found.")
else:
error_msg = ftv_data['error message']
print(f"Error: {error_msg}")

View File

@ -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

133
get_artist_art.c Normal file
View File

@ -0,0 +1,133 @@
#include <libconfig.h>
#include <unistd.h>
#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
#define conf_file "config.ini"
#define mb_url "https://musicbrainz.org/ws/2/artist?query=artist:\"Slayer\"&fmt=json"
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);
}
}
const char* get_mb_id(){
int response_code;
const char *mb_id;
CURL *curl;
CURLcode res;
char *buffer;
long res_len;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, mb_url);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed with error: %s\n", curl_easy_strerror(res));
return "1";
}
curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &res_len);
buffer = malloc(res_len);
res = curl_easy_recv(curl, buffer, res_len, 0);
if(res != CURLE_OK){
fprintf(stderr, "curl_easy_recv() failed with error: %s\n", curl_easy_strerror(res));
return "1";
}
printf("Response body: %s\n", buffer);
free(buffer);
curl_easy_cleanup(curl);
}
return mb_id;
}
int main(int argc, char **argv) {
int mb_conf, opt;
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");
while ((opt = getopt(argc, argv, "ps:")) != -1){
switch (opt) {
case 'p':
print_conf(m_dir, mb_conf, ftv_api_key);
break;
default:
printf("So long and thanks for all the fish.\n");
break;
}
}
return EXIT_SUCCESS;
}

View File

@ -1,42 +0,0 @@
#!/usr/bin/env python3
import configparser
import os
from time import sleep
import dir_activities
import api_calls
config = configparser.ConfigParser()
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']
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:
found_status, mb_id = api_calls.get_mb_id(artist, mb_confidence)
# print("Getting ", artist_image)
if found_status:
artist_image = api_calls.get_image(mb_id, ftv_api_key, artist_path)
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)
count += 1
sleep(1)