discoverylidarr/plex_helpers.py

74 lines
2.2 KiB
Python
Raw Normal View History

2025-06-25 15:03:26 +02:00
# plex_helpers.py
import requests
from config import PLEX_URL, PLEX_TOKEN
from lastfm_helpers import get_top_tracks, lf_request
HEADERS = {
"X-Plex-Token": PLEX_TOKEN
}
def get_artist_name_from_mbid(mbid):
js = lf_request("artist.getInfo", mbid=mbid)
if js and "artist" in js:
return js["artist"]["name"]
return None
def search_track(artist, track):
query = f"{artist} {track}"
params = {
"type": "10", # track
"query": query
}
res = requests.get(f"{PLEX_URL}/search", params=params, headers=HEADERS)
res.raise_for_status()
return res.json()
def get_top_tracks_keys(artist_names, top_n=3, already_added=None):
if already_added is None:
already_added = []
keys = []
for artist in artist_names:
top_tracks = get_top_tracks(artist, limit=top_n)
for track in top_tracks:
try:
result = search_track(artist, track)
items = result.get("MediaContainer", {}).get("Metadata", [])
for item in items:
key = item.get("ratingKey")
if key and key not in already_added:
keys.append(key)
except Exception:
continue
return keys
def create_or_update_playlist(name, mbid_list, top_n=3, already_added=None):
artist_names = []
for mbid in mbid_list:
name = get_artist_name_from_mbid(mbid)
if name:
artist_names.append(name)
track_keys = get_top_tracks_keys(artist_names, top_n=top_n, already_added=already_added)
if not track_keys:
print("[PLEX] Inga nya spår hittades för de angivna artisterna.")
return False, []
keys_csv = ",".join(track_keys)
url = f"{PLEX_URL}/playlists"
payload = {
"type": "audio",
"title": name,
"smart": "0",
"uri": f"server://{PLEX_TOKEN}/com.plexapp.plugins.library/library/metadata/{keys_csv}"
}
r = requests.post(url, headers=HEADERS, params=payload)
if r.status_code == 201:
print(f"[PLEX] ✅ Spellistan '{name}' skapades med {len(track_keys)} spår.")
return True, track_keys
else:
print(f"[PLEX] ❌ Misslyckades med att skapa spellista: {r.text}")
return False, []