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