0

OPEN API - Problem

Hallo an alle,

bin in der API-Welt ein totaler Neuling. Ich habe mich bei OPEN-API eingeschrieben.

Ich möchte einen API-Kode in Ninox erstellen, der mir über die MwSt-Nummer die Firmen-Daten über API von OPEN-API importiert.

do as server
    let url := "https://imprese.openapi.it/advance/" + 'Partita Iva';
    let APIKey := "Bearer API-NUMBER";
    let response := http("GET", url, {
            Authorization: APIKey,
            'content-type': "application/json"
        }, {
            fields: {
                topo: data.toponimo
                società: data.denominazione
            }
end

 

Copy

 

Laut diesen Kodex oben, möchte ich dass z.B. die Ninox-Felder "Topo" und "Società" die werte die ich als Resultat von hier aus bekomme,  "Toponimo" und "Denominazione", ergänzt werden. Allerdings ist dieses Resultat nur ein Beispiel von dem was ich bekommen sollte. Ich bekomme natürlich kein Resultat und nicht ma eine Fehlermeldung.

{
  "data": {
    "cf": "12485671007",
    "denominazione": "OPENAPI S.R.L.",
    "piva": "12485671007",
    "toponimo": "VIALE",
    "via": "F TOMMASO MARINETTI",
    "civico": "221",
    "indirizzo": "VIALE F TOMMASO MARINETTI 221",
    "comune": "ROMA",
    "frazione": null,
    "provincia": "RM",
    "stato_attivita": "ATTIVA",
    "timestamp": 1622452306,
    "timestamp_creation": 1622452306,
    "timestamp_last_update": 1622452306,
    "dettaglio": {
      "rea": "1378273",
      "cciaa": "RM",
      "pec": "openapi@legalmail.it",
      "codice_natura_giuridica": "SR",
      "descrizione_ateco": "Produzione di software non connesso all'edizione",
      "codice_ateco": "6201",
      "data_inizio_attivita": "2013-10-20",
      "bilanci": {
        "2017": {
          "data_chiusura_bilancio": "2017-12-31",
          "fatturato": 1120176,
          "utile": 2928
        },
        "2018": {
          "data_chiusura_bilancio": "2018-12-31",
          "fatturato": 1325358,
          "utile": 826
        },
        "2019": {
          "data_chiusura_bilancio": "2019-12-31",
          "fatturato": 1799587,
          "utile": 11309,
          "dipendenti": 14,
          "capitale_sociale": 10000
        }
      },
      "gruppo_iva": {
        "partecipazione": false,
        "piva_capogruppo": false,
        "anagrafica_ok": true
      },
      "cessata": false,
      "soci": [
        {
          "denominazione": "OPEN HOLDING S.R.L.",
          "nome": null,
          "cognome": null,
          "cf_socio": "16935371001",
          "quota": 100
        }
      ]
    },
    "cap": "00143",
    "codice_destinatario": "MJ1OYNU",
    "id": "60b4f9c914e27c27d12a9d67",
    "gps": {
      "coordinates": [
        12.47843,
        41.8071
      ]
    },
    "data_iscrizione": "2013-07-19"
  },
  "success": true,
  "message": "",
  "error": null
} (empty) (empty)

 

So habe ich den Kodex geändert und folgendes geschrieben um zu verstehen ob dieser überhaupt funktioniert:

let myURL := "https://imprese.openapi.it/advance/" + 'Partita Iva';
let APIKey := "Bearer 28049ec81f6d96a3aed43f3181047a4e";
let response := http("GET", myURL, {
        Authorization: APIKey,
        'content-type': "application/json"
    });
if response.error then
    alert("Error: " + text(response))
else
    alert("OK: " + text(response))
end

 

Hier bekomme ich dien Fehlermeldung: " Request has failed: error - "

 

Ich weiss dass der Kodex falsch ist, kann mir da bitte jemand weiterhelfen und mir sagen wie ich den schrieben sollte?

 

Hier der Link zur API-Seite:

https://developers.openapi.it/categories/business_information/imprese#/Company%20Information/get_advance__piva_cf_or_id_

Danke

12 Antworten

null
    • T_Bartzsch
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Also, mit folgendem Script bekomme ich schonmal eine Verbindung zur API... Allerdings stimmt bei mir der Token natürlich nicht ... Lege dir am besten ein mehrzeiliges Textfeld "API_Response" an, das befüllst Du dann mit deiner Rückmeldung:

    let auth := {
            Authorization: "Bearer 28049ec81f6d96a3aed43f3181047a4e",
            'Content-Type': "application/json"
        };
    let myURL := "https://imprese.openapi.it/advance/" + 12485671007;
    let response := do as server
            http("GET", myURL, auth)
        end;
    API_Response := text(response)

      • Walcher_Messebau
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Ok habe jetzt das mehrzeilige Textfeld angelegt. Nur ist jetzt meine Frage: wo soll die Token-Nummer eingefügt werden?? Da kommt schon wahrscheinlich mein Hauptfehler aber wie gesagt, ich kenne mich mit API leider noch nicht gut aus 😅

      • Walcher_Messebau
      • vor 1 Jahr
      • Gemeldet - anzeigen

      T. Bartzsch Ok ich habe mich schlau gemacht und so versucht 😅  

      Formel sieht jetzt so aus:

      let auth := {
              Authorization: "Bearer TOKEN",
              'Content-Type': "application/json",
              'API-NUMBER': "API"
          };
      let myURL := "https://imprese.openapi.it/advance/" + 'Partita Iva';
      let myURL := "https://imprese.openapi.it/advance/" + 'Partita Iva';
      let response := do as server
              http("GET", myURL, auth)
          end;
      API_Response := text(response)

       

      Die Antwort unter API_Response ist: 

      {"result":{"success":false,"message":"Missing token","error":125.18,"data":null,"trace":"WyJjbGFzcy5BdldzLnBocEAxNTkiLCJpbmRleC5waHBAMTM4OSJd"}}
      • Walcher_Messebau
      • vor 1 Jahr
      • Gemeldet - anzeigen

       habe jetzt auch folgendes probiert

      let auth := {
              Authorization: "Bearer TOKEN-NR",
              'Content-Type': "application/json",
              'API-NUMBER': "API_NUMBER",
              expire: "DATE-TIME",
              scopes: "GET:imprese.openapi.it/advance"
          };
      let myURL := "https://imprese.openapi.it/advance/" + 'Partita Iva';
      let response := do as server
              http("GET", myURL, {
                  headers: auth
              })
          end;
      API_Response := text(response)
      

      aber die Antwort ist immer die gleiche:

      {"result":{"success":false,"message":"Missing token","error":125.18,"data":null,"trace":"WyJjbGFzcy5BdldzLnBocEAxNTkiLCJpbmRleC5waHBAMTM4OSJd"}}
      
      • T_Bartzsch
      • vor 1 Jahr
      • Gemeldet - anzeigen

       ich registriere mich da mal....

    • T_Bartzsch
    • vor 1 Jahr
    • Gemeldet - anzeigen

    So.... du brauchst neben deiner Basic Authentication (email:Apikey) einen OAuth Token.

    Diesen Token kannst Du entweder über einen API call aus der NINOX generieren (dann über den oauth Endpunkt https://test.oauth.openapi.it/token mit "Basic email:Apikey") - oder fürs Erste auf der Openapi Seite unter WEB SERVICES / OAuth / My Token List. Die Token gelten für 1 Jahr, da kann man auch auf der Openapi Seite einen generieren... Manche Token (Microsoft zb) halten nur ca 30 Min., da macht es Sinn den über einen API Call aus der Ninox zu holen...

    Es gibt zum experimentieren die Sandbox ... diese hat eigene Token / Scopes und Endpunkte.
    Dort generierst Du dir einen Sandbox Token und wählst erstmal alle Scopes (Berechtigungen) aus...

    Dann läuft folgendes Script in der Ninox auf einem Button:

    let auth := {
            Authorization: "Bearer 6464484f2cb0ce504b15c912",
            'Content-Type': "application/json"
        };
    let myURL := "https://test.imprese.openapi.it/advance/" + 12485671007;
    let response := do as server
            http("GET", myURL, auth, {})
        end;
    API_Response := text(response)

    An die Antwortdaten der API kommst Du dann über die "Punkt-Navigation" (jede geschwungene Klammer ist eine Ebene)... damit kannst Du dann deine Ninoxfelder befüllen. Z.B.:

    Firmenname := text(response.result.data.denominazione) 

    Ich hoffe Du kommst damit weiter... Beste Grüße

    Tobias

      • Walcher_Messebau
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hallo Tobias, du wirst es nicht glauben aber es funktioniert 🎉

      Dein Script gab mir als Antwort dass mein Token falsch war. Da laut mir etwas im Header fehlte, habe ich gewisse Daten hinzugefügt und jetzt funktioniert es endlich.

      Hier der funktionierende Script:

      let auth := {
              Authorization: "Bearer TOKEN-NR",
              'Content-Type': "application/json",
              'API-NUMBER': "API-NR",
              Expire: "15-05-24 10:06:33",
              Scopes: "GET:imprese.openapi.it/advance/"
          };
      let piva := 'Partita Iva';
      let myURL := "https://imprese.openapi.it/advance/" + piva;
      let response := do as server
              let response := do as server
                      http("GET", myURL, auth, {})
                  end;
              API_Response := text(response);
              'Company Name' := text(response.result.data.denominazione);
              topo := text(response.result.data.toponimo)
          end;
      

      Vielen Dank für deine Hilfe!!! 

      • T_Bartzsch
      • vor 1 Jahr
      • Gemeldet - anzeigen

       das freut mich! Mein Script oben funktionierte allerdings auch. Ich habe den Token für die Sandbox über die Webseite erstellt und dann im Aufruf benutzt. Der Sandbox Token gehört natürlich zum test.imprese...usw... Wenn Du den Production Server nutzen willst, muss du einen Production Token generieren. 

      Nur zum Verständnis: eigentlich macht das Script bei dir keinen Sinn, du übergibst Expire und Scope im Autentifizierungs Header - so als würdest Du einen Token anfordern, mit Ablaufdatum (expire) und Berechtigung (scope)... der müsste allerdings vom Endpunkt https://oauth.openapi.it/token via POST kommen.... aber egal, wenn es jetzt läuft, dann läuft es :)

      • Walcher_Messebau
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Es hat jetzt auch ohne Expire und Scores funktioniert. Keine Ahnung warum es vorher nicht funktioniere. Allerdings ist nicht mir eins nicht klar. Wenn ich versuche die Daten (siehe *) anzufordern, kann ich diese nicht in Ninox importieren.

       

      {
        "data": {
          "cf": "12485671007",
          "denominazione": "OPENAPI S.R.L.",
          "piva": "12485671007",
          "toponimo": "VIALE",
          "via": "F TOMMASO MARINETTI",
          "civico": "221",
          "indirizzo": "VIALE F TOMMASO MARINETTI 221",
          "comune": "ROMA",
          "frazione": null,
          "provincia": "RM",
          "stato_attivita": "ATTIVA",
          "timestamp": 1622452306,
          "timestamp_creation": 1622452306,
          "timestamp_last_update": 1622452306,
          "dettaglio": {
            "rea": "1378273",
            "cciaa": "RM",
            "pec": "openapi@legalmail.it",
            "codice_natura_giuridica": "SR",
            "descrizione_ateco": "Produzione di software non connesso all'edizione",
            "codice_ateco": "6201",
            "data_inizio_attivita": "2013-10-20",
            "bilanci": {
              "2017": {
                "data_chiusura_bilancio": "2017-12-31",
                "fatturato": 1120176,
                "utile": 2928
              },
              "2018": {
                "data_chiusura_bilancio": "2018-12-31",
                "fatturato": 1325358,
                "utile": 826
              },
              "2019": {
                "data_chiusura_bilancio": "2019-12-31",
                "fatturato": 1799587,
                "utile": 11309,
                "dipendenti": 14,
                "capitale_sociale": 10000
              }
            },
            "gruppo_iva": {
              "partecipazione": false,
              "piva_capogruppo": false,
              "anagrafica_ok": true
            },
            "cessata": false,
            "soci": [
              {
       *         "denominazione": "OPEN HOLDING S.R.L.",
       *         "nome": null,
       *         "cognome": null,
       *         "cf_socio": "16935371001",
                "quota": 100
              }
            ]
          },
          "cap": "00143",
          "codice_destinatario": "MJ1OYNU",
          "id": "60b4f9c914e27c27d12a9d67",
          "gps": {
            "coordinates": [
              12.47843,
              41.8071
            ]
          },
          "data_iscrizione": "2013-07-19"
        },
        "success": true,
        "message": "",
        "error": null
      } (empty)

      Sollte z.B. "nome" nicht mit folgenden Kode aufgerufen werden?

      text(response.result.data.dettaglio.soci.nome)
      

      Nur hier hängt es, ansonsten funktioniert alles 🙄

      • T_Bartzsch
      • vor 1 Jahr
      • Gemeldet - anzeigen

       soci hat ein weiteres Array als Inhalt, zu erkennen an den eckigen Klammern. Daher musst du zunächst festlegen, welches Array item du ansprechen möchtest. Das ginge über item(soci, 0) oder - weil es nur ein item ist - mit first(soci).nome 

      text(response.result.data.dettaglio.first(soci).nome

      • Walcher_Messebau
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielen Dank! Dieser script funktioniert. Allerdings wie soll ich z.B.  das zweite Array ansprechen? Mit (soci, 1)? 

      text(response.result.data.dettaglio.(soci, 1).nome

      funktioniert leider nicht

      • T_Bartzsch
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      text(response.result.data.dettaglio.item(soci, 1).nome