Synology Calendar API (JaveScript/Node-RED)

tfuchs1987

Benutzer
Mitglied seit
05. Jul 2023
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Hallo Forum,

ich arbeite mich gerade durch die Dokumentation der Synology Calendar API.

Es ist mir gelungen mich korrekt anzumelden und auch die Kalender des Benutzers mit der Methode "list" abzurufen.
Allerdings verstehe ich nicht wie ich einen neuen Kalender anlegen kann. Hierzu gibt es bereits einen Thread (Synology calendar api) mit dem selben Fehlercode, welchen ich erhalte. Leider wurde dort das Problem mit PHP gelöst. Ich verwende jedoch JavaScript über Node-RED und kann so nicht nachvollziehen was geschieht.

Hier nochmals das Beispiel der create-Methode aus der Dokumentation (https://global.download.synology.co...r/2.4/enu/Synology_Calendar_API_Guide_enu.pdf)
Example:
HTTP Method: POST
Path: /webapi/entry.cgi
Request Header:
Host: 192.168.1.33:5000
X-SYNO-TOKEN: iUahVw8TG.Uhc
Cookies: Id: ZU6dNe8YMIPVo15A0NJN507300
Params :
cal_description ""
cal_displayname "Untitled"
cal_color "#F94B4B"
is_hidden_in_list false
is_hidden_in_cal false
is_todo false
is_evt true
api SYNO.Cal.Cal
method create
version 2

Demnach sollte der aufzurufende Link wie folgt aussehen

POST
/webapi/entry.cgi?api=SYNO.Cal.Cal&method=create&version=2&cal_description=&cal_displayname=Untitled&cal_color=#F94B4B&is_hidden_in_list=false&is_hidden_in_cal=false&is_todo=false&is_evt=true&_sid=MEINE-ZUVOR-ERHALTENE-SID;

Leider erhalte ich den Error-Code: 119, welcher auch nicht näher in der Dokumentation erläutert wird.
Falls dies mit dem Loginaufruf zu tun hat hier auch dieser

GET
/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=ACCOUNTNAME&passwd=PASSWORT&session=FileStation&format=sid

Hoffe sehr Ihr könnt mir weiterhelfen und bedanke mich für alle Antworten im Voraus!
 
Zuletzt bearbeitet:

tfuchs1987

Benutzer
Mitglied seit
05. Jul 2023
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Ich konnte endlich eine Lösung finden. Es gibt Attribute die in Anführungszeichen gesetzt werden müssen. Hatte dies auch schon mit simplen "-Zeichen versucht, jedoch müssen diese verschlüsselt mit %22 übergeben werden. Außerdem muss das #-Zeichen für die Kalenderfarbe als %23 übermittelt werden.

POST
/webapi/entry.cgi?api=SYNO.Cal.Cal&method=create&version=2&cal_description=%22Desc%22&cal_displayname=%22Untitled%22&cal_color=%22%23F94B4B%22&is_hidden_in_list=false&is_hidden_in_cal=false&is_todo=false&is_evt=true&_sid=MY-SID;
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
8.598
Punkte für Reaktionen
1.435
Punkte
288
Die sind nicht verschlüsselt sondern kodiert. Anführungszeichen sind nämlich in URLs nicht zulässig und die Raute hat dort eine Sonderbedeutung, weshalb die hier ebenfalls kodiert werden muss.
 
  • Like
Reaktionen: its

Hessi30

Benutzer
Mitglied seit
23. Nov 2012
Beiträge
148
Punkte für Reaktionen
2
Punkte
24
Hat das bei dir geklappt?
Ich versuche via Python3 Script eine Verbindung herzustellen, aber das scheint nicht zu funktionieren.
Ich erhalte ständig den Hinweis dass ich nicht authentifiziert werden kann, obwohl Benutzer und Passwort richtig ist, die erforderlichen Rechte da sind. Wie muss denn die Url bei der Authentifizierung aussehen?

Code:
import requests
import json

# URL und Authentifizierungsparameter
auth_url = "https://MEINEADRESSE:5638/webapi/auth.cgi"
auth_params = {
    'api': 'SYNO.API.Auth',
    'version': '3',
    'method': 'login',
    'account': 'USER',
    'passwd': 'PASSWORD',
    'session': 'Calendar',
    'format': 'sid'
}

# Authentifizierungsanfrage senden
auth_response = requests.post(auth_url, params=auth_params, verify=False)  # SSL-Überprüfung deaktiviert

# Antwort überprüfen
if auth_response.status_code == 200:
    auth_data = auth_response.json()
    if auth_data['success']:
        print("Authentifizierung erfolgreich!")
        
        # SID und Cookies extrahieren
        sid = auth_data['data']['sid']
        cookies = auth_response.cookies['Id']
        
        print(f"Sitzungs-ID (SID): {sid}")
        print(f"Cookies: {cookies}")
        
    else:
        print("Authentifizierung fehlgeschlagen.")
        print("Serverantwort:", auth_data)
else:
    print(f"Fehler: {auth_response.status_code}")
    print(auth_response.text)
 


 

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