Forms API liefert keine Daten auf eigener Nextcloud

Nextcloud 27.1.5
Gehostet bei Hetzner als StorageShare

Hallo zusammen,

ich möchte auf meiner Nextcloud (StorageShare, gehostet von und bei Hetzner) ein paar API Calls nutzen, um in regelmäßigen Abständen ein Formular abzufragen. Dabei möchte ich auswerten, ob neue Datensätze hinzugekommen sind und ausgewählte Nutzende über einzelne Daten in ihren Datensätzen informieren.

Dazu werde ich ein kleines Python Script schreiben, im Moment bin ich für die ersten Test jedoch noch auf dem Terminal.

Der Befehl, den ich ausführen möchte, ist der folgenden.

curl -u {user}:{app-token} -X GET '{nextcloud-url}/api/v2.4/form/{id}'

Dabei erhalte ich folgende Antwort:

{"message":""}%                                                                                                          

Im Prinzip sieht das erst mal gar nicht so schlecht aus, da es immerhin ein Json-Objekt ist, leider ist es jedoch leer.

Ein Problem könnte sein, dass die ID des Formulars nicht richtig ist. Bisher bin ich davon ausgegangen, dass es die ID ist, die sich aus der URL ergibt.

Hetzner habe ich auch schon angefragt. Die haben vorgeschlagen, dass ich den Usernamen so schreiben sollte, wie er angelegt wurde, also mit Großbuchstaben am Anfang. Dabei bekomme ich dann jedoch nur eine HTML-Seite zurück, die sagt “Seite nicht gefunden”. Das kann also auch nicht die Lösung sein, daher bin ich weiter mit kleingeschriebenem Usernamen unterwegs.

Liebe Grüße
Mario

Hallo @MarioHesse

herzlich willkommen im Forum :slight_smile:

Die ID ist nicht der Wert aus der “normalen” URL des Formulars, sondern eine Ganzzahl. Die richtige ID kannst du am besten über den /forms Endpoint herausbekommen oder auch in den Devtools des Browsers im Netzwerkverkehr, wenn du das entsprechende Formular aufrufst.

Ich möchte dir dazu auch noch einmal unsere Dokumentation (hier für die stable3) an die Hand geben, in der das auch alles beschrieben ist:

Und hier auch noch einmal die Datenstrukturen:

Die beiden Links dürftest du aber vermutlich eh schon kennen :slight_smile:

1 Like

Hallo @Chartman123,

vielen Dank für den Input, das werde ich die Tage probieren!

Liebe Grüße
Mario

Hallo @Chartman123 ,

ich habe nun die folgende Zeile versucht, um die angelegten Forms anzeigen zu lassen.

➜  curl -u {user}:{app_token} -X GET 'https://{nextcloud_url}/ocs/v2.php/apps/forms/api/v2.1/forms'

Leider bekomme ich einen Fehler zurück.

{"message":"CSRF check failed"}%  

Hast du einen heißen Tipp?

Liebe Grüße
Mario

All Requests to OCS-Endpoints require the Header OCS-APIRequest: true

Dir fehlt auf jeden Fall noch der Header hier…

1 Like

Hallo @Chartman123 ,

kannst du mir ein bisschen weiter ausführen, wo und wie ich das veranlassen kann. APIs und insbesondere die Nextcloud-API sind für mich komplett neu, daher sind viele Dinge für mich noch nicht so intuitiv.

Liebe Grüße
Mario

Ich habe nun folgendes probiert und es scheint zu funktionieren.

➜  curl -u {user}:{app_token} -X GET 'https://{nextcloud_url}/ocs/v2.php/apps/forms/api/v2.1/forms' --header 'ocs-apirequest: true'

Ausgabe:

<?xml version="1.0"?>
<ocs>
 <meta>
  <status>ok</status>
  <statuscode>200</statuscode>
  <message>OK</message>
 </meta>
 <data>
  <element>
   <id>7</id>
   <hash>E98beQzk2Zzfi7yT</hash>
   <title># Zeiterfassung</title>
   <expires>0</expires>
   <lastUpdated>1706616814</lastUpdated>
   <permissions>
    <element>edit</element>
    <element>results</element>
    <element>results_delete</element>
    <element>submit</element>
   </permissions>
   <partial>1</partial>
   <submissionCount>6</submissionCount>
  </element>
  <element>
   <id>2</id>
   <hash>dZDMp2nd5LRrW55x</hash>
   <title></title>
   <expires>0</expires>
   <lastUpdated>0</lastUpdated>
   <permissions>
    <element>edit</element>
    <element>results</element>
    <element>results_delete</element>
    <element>submit</element>
   </permissions>
   <partial>1</partial>
   <submissionCount>0</submissionCount>
  </element>
 </data>
</ocs>

Soweit schon mal vielen, vielen Dank!

Zwei Fragen hätte ich allerdings noch:

  1. Muss ich den Header immer so mitgeben oder kann man OCS-APIRequest auch default mäßig auf True setzen?
  2. Ich dachte, die API spricht JSON. Kann man zwischen JSON und XML wählen oder ist XML die einzige gesprochene Sprache der API?

Hallo @Chartman123 ,

Frage 2 hat sich erledigt, ein kurzer Blick in die Schnittstellendoku hat geholfen. Mit dem nachfolgenden Befehl funktioniert es.

➜  curl -u {user}:{app_token} -X GET 'https://{nextcloud_url}/ocs/v2.php/apps/forms/api/v2.1/forms' --header 'ocs-apirequest: true'  --header 'Accept: application/json'

Bleibt noch Frage 1:

  • Kann ich diese beiden header standardmäßig setzen?
  • Die Antwort ist wahrscheinlich eher nein, richtig?

Da müsstest du wohl am ehesten mal noch in die curl Dokumentation schauen, das ist nichts Nextcloud spezifisches…

Aber freut mich auf jeden Fall, dass du jetzt über die API schon mal an die gewünschten Daten kommst :+1:

Alles klar, dank dir! :slight_smile:

1 Like