Daten RestAPI in verschiedene Felder schreiben (Script ausführen nach veränderung)
Hi,
ich würde gerne Daten aus einer API abrufen und die einzelnen Werte in bestimmte Felder schreiben.
Der API Aufruf ansich funktioniert.
Bspw:
let response := do as server
http("GET", "https://de.openfoodfacts.org/api/v0/product/" + Ean + ".json")
end;
if response.error then
alert(text(response.error))
else
response.result.product.product_name_de
end
Ich könnte jetzt jedes Feld seperat mit einem eigenen Script ausstatten, jedoch würde ich es lieber in einem Script haben.
Ich habe das Feld Ean. Bei einer Veränderung dieses Feldes würde ich jetzt gerne einen API Aufruf machen und das ungefähr so machen:
let response := do as server
http("GET", "https://de.openfoodfacts.org/api/v0/product/" + Ean + ".json")
end;
Name := response.result.product.product_name_de
kcal :=number(text(response.result.product.nutriments.'energy-kcal_100g'))
ETC
Aber irgendwie geht das nicht, auch das hier funktioniert schon als Test nicht:
let response := do as server
http("GET", "https://de.openfoodfacts.org/api/v0/product/" + Ean + ".json")
end;
Name := "TestString"
Könnte mir da bitte jmd helfen?(Beispiel EAN:4388840218080)
10 Antworten
-
Hallo, ich würde es mal nach folgendem Schema versuchen:
let response := http("GET", "https://de.openfoodfacts.org/api/v0/product/" + Ean + ".json");
if response.error then
alert(text(response.error))
else
Name := response.result.product.product_name_de;
... usw.
end
In der Cloud funktioniert alert() übrigens nur in Buttons, nicht in Triggern. Um zu schauen, ob und welche Ergebnisse zurückgegeben werden, kann man sie testweise auch in ein mehrzeiliges Textfeld schreiben, z. B.: Responsewert := text(response.result)
-
Hi,
vielen Dank für den VErsuch, aber das Textfeld bleibt leer.
auch Wenn ich einen festen String vergebe bleibt es leer.Woran könnte das liegen?
let response := http("GET", "https://de.openfoodfacts.org/api/v0/product/" + Ean + ".json");
if response.error then
alert(text(response.error))
else
Text := "ihih"
end -
Hallo w.felix,
ich habe jetzt folgende Formel in Web und Mac App ausprobiert:
---if Ean then
let myEAN := Ean;
let response := do as server
http("GET", "https://de.openfoodfacts.org/api/v0/product/" + myEAN + ".json")
end;
Text := formatJSON(response.result)
else
Text := null
end
---Funktioniert ohne Probleme. Du kannst jetzt die einzelnen Felder statt Text nehmen und JSON auseinander nehmen
Leo
-
Hallo
Ich habe es mal in der Ninox-Cloud nachgebaut. Da funktioniert es.
Dann habe ich es in der APP probiert, wenn die Datenbank in 'Meine Datenbanken' liegt
Dort funktioniert es im Trigger "Nach Änderung..." nicht. Die API-Anfrage wird nicht ausgeführt.
Weshalb es dort nicht funktioniert, musst du beim Support erfragen, ich weiß es nicht.
Was funktioniert, ist die Abfrage auf einen Button in der App zu legen. Damit klappt es mit Einschränkungen.
Weshalb mit Einschränkungen?
Du wirst niemals ein alert erhalten, da immer ein 'result' zurück gegeben wird und kein error.
{"result":{"code":"DEINE EINGEGEBENE EAN","status":0,"status_verbose":"product not found"}}
Mit folgendem Code im Button sollte es in der App funktionieren:
let response := http("GET", "https://de.openfoodfacts.org/api/v0/product/" + EAN + ".json");
if item(response, "result").status = 0 then
alert("Nicht gefunden")
else
'Text (mehrzeilig)' := formatJSON(response)
endFür die nächste Anfrage bei Problemen wäre es hilfreich, wenn du angibst mit welcher Ninox-Version (MacApp/iPhone(iPad/Android/Cloud/On Premise etc) du das Problem hast.
-
Moin Leo
Du warst schneller.
Ich habe deinen Code in der App auf dem Trigger probiert aber da funktioniert es nicht.
Ich habe die MacApp 3.3.4 als letzte Version. -
Hallo Leo
Habe die Datenbank geladen.
Wenn du nur die MacApp hast und kein Abo, wird dir in der App als Team nur 'Meine Datenbanken' angezeigt.
Wenn du es dort rein lädst, funktioniert der Trigger nicht.
Jedenfalls nicht bei mir und scheinbar auch nicht bei w.felix.
Funktioniert es denn bei Dir in der Mac-App, wenn die Datenbank inm Team 'Meine Datenbanken' liegt? -
Ok, jetzt verstehe ich die Verwirrung,
die API Aufrufe sind eigentlich nur für Cloud-Abo verfügbar. Meine Datenbanken liegen lokal (teamId heißt auch "local") und für lokale Datenbanken gibt es auch keinen API key.
Dass das ganze im Lokal mit Button funktioniert, ist eher Ausnahme, weil hier GET Aufruf auch ohne Headers und Body geht und eigentlich den Inhalt der Webseite ausliest.
Ich vermute, dass die http Methode für UI noch ohne Sperre ist und alle server trigger einfach gesperrt werden
Leo
-
Hallo Leo
Klar, ohne ABO kein API-Key.
Den benötigst du aber nur, wenn du über REST auf deine eigene Ninox-Datenbank zugreifen willst.
Man kann die API dennoch in der APP nutzen, wenn einem der response der Abfrage ausreicht um Daten darüber zu empfangen.
Was mich verwundert, dass es nur per aktiven Klick funktioniert und nicht über einen Trigger.
Ist doch eigentlich egal, wie ich die Anfrage auslöse.
Im übrigen funktioniert es, wenn ein ABO vorhanden ist, aus der App eine API-Anfrage mit Header und Body zu starten.
Ich habe mal sowas für die IOS-App geschrieben um von einer Ninox-Cloud Datenbank die Daten in die lokale IOS-Datenbank zu schreiben. Hatte unterwegs nicht immer Internetverbindung und deshalb der Zwang die Daten aktuell lokal vorzuhalten. Bei lokalen Änderungen wurden diese dann an die Cloud-Datenbank gesendet und dort verarbeitet.
Das eignet sich jedoch nicht für MultiUser-Betrieb.
Der Response gibt dir ja das Ergebnis zurück und damit kann man weiterarbeiten. -
Hi,
vielen Dank für die Nachbauten.
Hier die Zusatzinfos:
Ich verwende Ninox als MacApp, ohne Abo
Mac OS:11.1
Ninox Version habe ich nicht gefunden, sollte aber die aktuellste sein.
Das scheint ja so als wäre das ein Bug, oder?
Ich schreibe mal den Support an.
Danke an alle!
Content aside
- vor 3 JahrenZuletzt aktiv
- 10Antworten
- 775Ansichten