Synology Photos Kann man eine sharing_sid über eine API Abfrage erhalten?

zeichensatz

Benutzer
Mitglied seit
27. Jan 2014
Beiträge
43
Punkte für Reaktionen
4
Punkte
8
Zur Zeit experimentiere ich mit der Synology Photos API.

ZIEL: eine Website soll direkten Zugriff auf Thumbnails von öffentlich freigegebenen Verzeichnissen und Alben erhalten.

Für Ordner im Freigegebenen Bereich [shared space], die auf Öffentlich - Jeder kann mit Link herunterladen eingestellt sind, klappt das mittels API-Aufrufen prima.

Code:
https://<IP_ADDRESS>/photo/webapi/entry.cgi?api=SYNO.FotoTeam.Browse.Item&version=1&method=list&offset=0&limit=100&folder_id=608&additional=["thumbnail"]
https://<IP_ADDRESS>/photo/mo/sharing/webapi/entry.cgi?api=SYNO.FotoTeam.Thumbnail&method=get&version=1&id=40808&cache_key=40808_1633659236&type=unit&size=sm
Ohne auf der DS angemeldet zu sein, bekommt man mit der ersten Zeile eine Liste von Bildern eines Verzeichnis (folder_id=608) ausgeben.
Mit der zweiten Zeile wird ein einzelnes Bild (id=40808; den cache_key bekommt man über die Ausgabe von additional=["thumbnail"] im vorangegangen Aufruf) im Browser angezeigt.

PROBLEM:
Für freigegebene Alben funktioniert das im Prinzip ähnlich, allerdings muss eine Authentifizierung über die Freigabe-Passphrase (z.B. "EkPUCJLDI") erfolgt sein.
Hat man z.B. einen Freigabe-Link https://<IP_ADDRESS>/photo/mo/sharing/EkPUCJLDI, dann ruft man ein Bild über die API z.B. so ab:
Code:
https://<IP_ADDRESS>/photo/mo/sharing/webapi/entry.cgi?id=25752&cache_key="25752_1633653385"&type="unit"&size="sm"&passphrase="EkPUCJLDI"&api="SYNO.Foto.Thumbnail"&method="get"&version=1&_sharing_id="EkPUCJLDI"
Das funktioniert allerdings nur, wenn man zuvor ein Cookie mit dem key sharing_sid vom Server erhalten hat. Bei Aufruf des Freigabe-Links https://<IP_ADDRESS>/photo/mo/sharing/EkPUCJLDI erhält man ein solches Cookie.
Mein Problem ist nun, wie komme ich an das Cookie mit einem API-Aufruf ran? Da komme ich nicht weiter.

Hintergrundinformation:
Von einer Website greife ich derzeit auf Bilder in öffentlich freigebenen Ordnern auf der PhotoStation (DSM6) zu. Hierzu lege ich extra Verzeichnisse an, die nur die Fotos enthalten, die auch öffentlich zugänglich sein sollen. Das ginge so ähnlich auch mit Synology Photos (leider ohne die Möglichkeit, das PhotoStation-Javascript in einen iFrame einzubinden).
Beim Umstieg auf Synology Photos würde ich aber gerne auf freigegebene Alben umstellen. In den Alben könnte ich von den Original-Verzeichnissen nur jene Fotos referenzieren, die auch öffentlich zugänglich sein sollen. Damit würde ich mir die doppelte Speicherung der Bilder sparen.
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.264
Punkte für Reaktionen
923
Punkte
174

zeichensatz

Benutzer
Mitglied seit
27. Jan 2014
Beiträge
43
Punkte für Reaktionen
4
Punkte
8
Eine Schnittstellenbeschreibung für Synology Photos wird es vermutlich auch nie geben. Viele Funktionen, welche die APIs von Synology bieten, sind aber auch ohne ausführliche Schnittstellenbeschreibung zu verwenden. Muss man nur etwas in den lib-Dateien in /usr/syno/synoman/webapi bzw. /volume1/@appstore/SynologyPhotos/usr/webapi stöbern. Ausserdem kann man ein paar Sachen von der inoffiziellen PhotoStation API Dokumentation abschauen.

Ich glaube, dass das Problem, vor dem ich stehe, weniger mit der Synology Photos API zu tun hat, sondern eher mit SYNO.API.Auth bzw. einem Äquivalent, mit dem die Freigabelinks authentifiziert werden.
Das Problem dürfte man auch haben, wenn man auf einen Freigabelink für die FileStation über einen API-Aufruf zugreifen wollte. Hab ich aber noch nicht getestet. Leider findet sich auch in der API-Dokumentation für die FileStation nichts dazu, wie die Freigabelinks authentifiziert werden.

Einen Workaround habe ich gefunden, aber zugegebenermassen nicht sehr elegant:
Wenn zunächst irgendeine Benutzeranmeldung (z.B. gast) auf der Synology vorgenommen wird:
Rich (BBCode):
https://192.168.1.177/photo/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=gast&passwd=passwort
Die Anmeldung liefert ein Json-Array zurück:
JSON:
{
   "data":{
      "did":"DBCJItFzxBLL5J8sO5oUlrL2Jsk9HMh_ZtMgpmnWzQRD36j-b9hdXUQ31OZqBjTCoheB7ZavU_lVTSOy4vl3bQ",
      "sid":"bRkkNHSArgpQa3zrgwlNgTlDLzQUttFRIVUv-BpYf-Mcgzu5SN0gqXhxeimtFllBrnVNMKhVyLQ6iotM0r-d1w"
   },
   "success":true
}
Und es werden Cookies mit dem key did und id (mit dem Wert von sid) gesetzt.

So angemeldet kann ich dann erfolgreich ein Bild anzeigen:
Code:
https://<IP_ADDRESS>/photo/mo/sharing/webapi/entry.cgi?id=25752&cache_key="25752_1633653385"&type="unit"&size="sm"&passphrase="EkPUCJLDI"&api="SYNO.Foto.Thumbnail"&method="get"&version=1
Der Parameter &_sharing_id="EkPUCJLDI" entfällt dann im Unterschied zum Aufruf in meinem ersten Posting.

Aber irgendwie bin ich sowieso auf dem Holzweg. Das bringt mich nicht weiter in der Frage, wie ich die Fotos in meiner Website zu verlinken kann. Denn das Cookie wird ja für <IP_ADDRESS> gesetzt, also für die Synology und nicht meinen Webserver.
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: Ulfhednir


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat