0

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

null
    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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)

    • wfelix
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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)
    end

    Fü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.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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.

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen
    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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?

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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.

    • wfelix
    • vor 2 Jahren
    • Gemeldet - anzeigen

    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 2 JahrenZuletzt aktiv
  • 10Antworten
  • 765Ansichten