# 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, []