Files
2026-09-02 16:32:50 +02:00

119 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Perfekt dann ist eine Subsonic-kompatible Library genau das, was du suchst 👍
Für [[Python]] gibt es z. B. [`py-sonic`](https://github.com/crustymonkey/py-sonic).
Die ist zwar nicht mehr super aktiv gepflegt, funktioniert aber mit [[IT-Know-How/Linux/Navidrome]] problemlos, weil Navidrome die [[IT-Know-How/Linux/Subsonic-API]] spricht.
---
## Installation
```bash
pip install py-sonic
```
---
## Grund-Setup
```python
from pysonic.connection import Connection
# Verbindung aufbauen
conn = Connection(
host="http://localhost:4533",
username="meinuser",
password="meinpass",
api_version="1.16.1",
client_name="pyclient"
)
```
---
## Anwendungsfälle
### 1. Playlist erstellen oder öffnen
```python
# Neue Playlist
playlist = conn.create_playlist("Importierte M3U Playlist")
# Alle Playlists abfragen
all_playlists = conn.get_playlists()
```
### 2. Tracks suchen (z. B. per Filename, Titel, Artist)
```python
search = conn.search2(query="Songtitel", songCount=5)
for song in search['song']:
print(song['id'], song['title'], song['artist'])
```
### 3. Track zur Playlist hinzufügen
```python
conn.update_playlist(
playlist_id=playlist['id'],
song_id=["12345", "67890"] # mehrere IDs möglich
)
```
### 4. Stern vergeben
```python
conn.star("12345") # Song-ID
```
### 5. Bookmark setzen
```python
conn.create_bookmark("12345", position=60000, comment="Kapitel 1")
```
---
## Workflow: M3U importieren
Du kannst einfach durch deine `.m3u`-Datei iterieren, für jede Zeile versuchen, den Track im Navidrome zu finden, und dann Aktionen ausführen:
```python
def import_m3u_to_navidrome(m3u_path, playlist_name):
# Playlist anlegen
playlist = conn.create_playlist(playlist_name)
playlist_id = playlist['id']
with open(m3u_path, encoding="utf-8") as f:
for line in f:
if line.startswith("#") or not line.strip():
continue
filename = line.strip().split("/")[-1] # nur Dateiname
# Suche im Server
search = conn.search2(query=filename, songCount=1)
if 'song' in search and search['song']:
song = search['song'][0]
song_id = song['id']
# Playlist hinzufügen
conn.update_playlist(playlist_id=playlist_id, song_id=[song_id])
# Stern setzen
conn.star(song_id)
# Bookmark bei 0 (Startpunkt)
conn.create_bookmark(song_id, position=0, comment="Importiert aus M3U")
print(f"→ {filename} gefunden und verarbeitet.")
else:
print(f"⚠ {filename} nicht gefunden.")
```
---
👉 Damit hättest du ziemlich genau deinen beschriebenen Workflow:
M3U → Tracks auflösen → Playlist + Sterne + Bookmarks automatisch setzen.
---
Soll ich dir ein **vollständiges Script** bauen, das direkt eine `.m3u` einliest, die passende Playlist erstellt und alle drei Aktionen (Playlist-Eintrag, Stern, Bookmark) in einem Durchlauf macht?