New plex implementation
This commit is contained in:
parent
bd5b3538c8
commit
56e1061325
6 changed files with 121 additions and 6 deletions
73
plex_helpers.py
Normal file
73
plex_helpers.py
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# 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, []
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue