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

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

zeichensatz

Benutzer
Registriert
27. Jan. 2014
Beiträge
54
Reaktionspunkte
6
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.
 
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
Status
Für weitere Antworten geschlossen.
 

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