For Lidarr searches, implemented 15 sec timeout before falling back to yt-dlp
This commit is contained in:
parent
6810c0ecbb
commit
d186e32c03
62
musicfetch
62
musicfetch
@ -5,6 +5,7 @@ import os
|
|||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import requests
|
import requests
|
||||||
|
from requests.exceptions import Timeout
|
||||||
|
|
||||||
# === CONFIGURATION ===
|
# === CONFIGURATION ===
|
||||||
LIDARR_URL = "http://localhost:8686" # Your Lidarr base URL
|
LIDARR_URL = "http://localhost:8686" # Your Lidarr base URL
|
||||||
@ -68,22 +69,33 @@ def yt_dlp_download(url_or_query, target_folder):
|
|||||||
url_or_query
|
url_or_query
|
||||||
])
|
])
|
||||||
|
|
||||||
def search_artist(name):
|
def search_artist(name, timeout_seconds=15):
|
||||||
resp = requests.get(
|
try:
|
||||||
f"{LIDARR_URL}/api/v1/artist/lookup",
|
resp = requests.get(
|
||||||
headers=headers,
|
f"{LIDARR_URL}/api/v1/artist/lookup",
|
||||||
params={"term": name}
|
headers=headers,
|
||||||
)
|
params={"term": name},
|
||||||
resp.raise_for_status()
|
timeout=timeout_seconds
|
||||||
results = resp.json()
|
)
|
||||||
return results[0] if results else None
|
resp.raise_for_status()
|
||||||
|
results = resp.json()
|
||||||
|
return results[0] if results else None
|
||||||
|
except Timeout:
|
||||||
|
print(f"Lidarr artist search timed out after {timeout_seconds} seconds.")
|
||||||
|
return None
|
||||||
|
except requests.RequestException as e:
|
||||||
|
print(f"Lidarr artist search failed: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
def get_existing_artist(name):
|
def get_existing_artist(name):
|
||||||
resp = requests.get(f"{LIDARR_URL}/api/v1/artist", headers=headers)
|
try:
|
||||||
resp.raise_for_status()
|
resp = requests.get(f"{LIDARR_URL}/api/v1/artist", headers=headers)
|
||||||
for artist in resp.json():
|
resp.raise_for_status()
|
||||||
if artist["artistName"].lower() == name.lower():
|
for artist in resp.json():
|
||||||
return artist
|
if artist["artistName"].lower() == name.lower():
|
||||||
|
return artist
|
||||||
|
except requests.RequestException as e:
|
||||||
|
print(f"Failed to get existing artists: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def add_artist(metadata_artist):
|
def add_artist(metadata_artist):
|
||||||
@ -156,16 +168,16 @@ def main():
|
|||||||
if is_url(input_str):
|
if is_url(input_str):
|
||||||
print("Input is a URL. Extracting metadata to find artist...")
|
print("Input is a URL. Extracting metadata to find artist...")
|
||||||
metadata = run_yt_dlp_get_metadata(input_str)
|
metadata = run_yt_dlp_get_metadata(input_str)
|
||||||
if metadata:
|
if metadata:
|
||||||
artist_name = get_artist_from_metadata(metadata)
|
artist_name = get_artist_from_metadata(metadata)
|
||||||
print(f"Extracted artist name: {artist_name}")
|
print(f"Extracted artist name: {artist_name}")
|
||||||
else:
|
else:
|
||||||
print("Failed to get metadata from URL.")
|
print("Failed to get metadata from URL.")
|
||||||
artist_name = "Unknown Artist"
|
artist_name = "Unknown Artist"
|
||||||
|
|
||||||
target_folder = os.path.join(ROOT_FOLDER, artist_name, "youtube")
|
target_folder = os.path.join(ROOT_FOLDER, artist_name, "youtube")
|
||||||
yt_dlp_download(input_str, target_folder)
|
yt_dlp_download(input_str, target_folder)
|
||||||
return
|
return
|
||||||
|
|
||||||
if " - " not in input_str:
|
if " - " not in input_str:
|
||||||
print("Input must be in 'Artist - Track' format.")
|
print("Input must be in 'Artist - Track' format.")
|
||||||
@ -179,10 +191,10 @@ def main():
|
|||||||
artist = get_existing_artist(artist_name)
|
artist = get_existing_artist(artist_name)
|
||||||
|
|
||||||
if not artist:
|
if not artist:
|
||||||
print("Artist not found. Searching Lidarr metadata...")
|
print("Artist not found. Searching Lidarr metadata (with timeout)...")
|
||||||
metadata = search_artist(artist_name)
|
metadata = search_artist(artist_name)
|
||||||
if not metadata:
|
if not metadata:
|
||||||
print("No match found in Lidarr metadata. Falling back to yt-dlp.")
|
print("No match found or search timed out. Falling back to yt-dlp.")
|
||||||
yt_dlp_download(input_str, os.path.join(ROOT_FOLDER, artist_name, "youtube"))
|
yt_dlp_download(input_str, os.path.join(ROOT_FOLDER, artist_name, "youtube"))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user