Ankündigung

Einklappen
Keine Ankündigung bisher.

JSON abfragen und in MYSQL übertragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JSON abfragen und in MYSQL übertragen

    Hallo zusammen,

    ich würde gerne automatische (zum Beispiel per Cronjob) eine JSON Datei abrufen, welche im Netz öffentlich zugänglich ist.
    Die Werte der JSON sollen dann in eine MYSQL Datenbank geschrieben werden.

    Hat jemand einen Ansatz, wie ich sowas lösen kann?

    Grüße

  • #2
    Woran scheitert es? Beim Cronjob? Bei der Abfrage der JSON-Daten? Beim Speichern in die Datenbank?

    Den Ansatz hast du ja schon selber genannt. Mehr gibts dazu eigentlich auch nicht mehr zu sagen.

    Kommentar


    • #3
      Aktuell scheitert es noch an fast allem.

      den Cronjob kann ich anlegen.

      aber mit welchem Befehl frag ich die JSON am besten ab und wie übertrage ich es dann in die Datenbank

      Kommentar


      • #4
        Zitat von marcusfuerth Beitrag anzeigen
        aber mit welchem Befehl frag ich die JSON am besten ab
        Das wirkt so, als hättest du selber nach gar keine Recherche betrieben. Einen HTTP-Request machen und den Response auslesen kann man z.B. mit file_get_contents(). JSON dekodieren mit json_decode().

        Zitat von marcusfuerth Beitrag anzeigen
        und wie übertrage ich es dann in die Datenbank
        Naja, man überlegt sich eine Tabellenstruktur und speichert dann die Werte aus dem JSON rein. Da es sehr auf die Datenstruktur ankommt und was du genau damit machen willst, gibts dazu keine pauschal gültige Antwort.

        Kommentar


        • #5
          Dann weiß ich jetzt schon mal, wo nach ich suchen muss und werde mal testen

          Kommentar


          • #6
            Zitat von marcusfuerth Beitrag anzeigen
            wie übertrage ich es dann in die Datenbank
            ich würde dazu PostgreSQL nehmen und die Daten als JSONB abspeichern. Darauf kannst Du dann für Deine Abfragen passende Indexe anlegen und somit sehr schnell drin suchen etc.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von marcusfuerth Beitrag anzeigen
              ich würde gerne automatische (zum Beispiel per Cronjob) eine JSON Datei abrufen, welche im Netz öffentlich zugänglich ist.
              Na, wenn es öffentlich ist, könntest du ja mal die URL zur Verfügung stellen, dann kann man sich das zumindest mal ansehen. Und ein Cronjob hat damit erst mal nichts zu tun, der ruft ja nur das Script auf, aber dieses hast du ja noch nicht.

              Kommentar


              • #8
                Zitat von akretschmer Beitrag anzeigen

                ich würde dazu PostgreSQL nehmen und die Daten als JSONB abspeichern. Darauf kannst Du dann für Deine Abfragen passende Indexe anlegen und somit sehr schnell drin suchen etc.
                Ich würde dafür MongoDB nehmen, da es eine Dokumenten basierte Datenbank ist, welche intern auch auf Json/bson basiert und entsprechende Indexe etc. Ebenfalls unterstützt.

                Kommentar


                • #9
                  Zitat von protestix Beitrag anzeigen
                  Na, wenn es öffentlich ist, könntest du ja mal die URL zur Verfügung stellen, dann kann man sich das zumindest mal ansehen. Und ein Cronjob hat damit erst mal nichts zu tun, der ruft ja nur das Script auf, aber dieses hast du ja noch nicht.
                  Na klar, hier die URL

                  https://services7.arcgis.com/mOBPykO...SR=4326&f=json

                  Kommentar


                  • #10
                    Du holst dir erst mal die Daten und schaust dir die Struktur an. Dann entscheidest du was du davon brauchst.
                    PHP-Code:
                    $json file_get_contents($deineURL);

                    $data json_decode($jsontrue);

                    echo 
                    "<pre>";
                    print_r($data);
                    echo 
                    "</pre>"
                    Da stehen sogar im ersten Teil die Feldtytpen drin: [type] => esriFieldTypeSmallInteger
                    einfacher geht es nimmer.

                    Wie du auf ein Array zugreifst weisst du ja. Du holst also ab ...['features'] deine Daten und speicherst mit einem prepared statement in deine DB-Tabelle.
                    Mysqli unter https://www.php.net/manual/de/mysqli...bind-param.php
                    PDO unter https://www.php.net/manual/de/pdo.pr...statements.php
                    nachlesen.

                    Wenn das einwandfrei funktioniert kannst du das Script ein mal am Tag ab 0 UHR MESZ laufen lassen, da die Daten wohl nur alle 24 Stunden aktualisiert werden, steht unter ['last_update'].

                    N.B. Anstatt Fehlermeldungen auszugeben, die keiner sieht, schreibst du diese zum Beispiel in eine logdatei oder lässt dir eine E-Mail zukommen. Kann ja sein das der Service umzieht oder eingestellt wird, das solltest du berücksichtigen und nicht blind darauf vertrauen, das URLs ewig erreichbar sind.

                    Kommentar


                    • #11
                      [selbst gelöscht]

                      Kommentar


                      • #12
                        Zitat von protestix Beitrag anzeigen
                        Du holst dir erst mal die Daten und schaust dir die Struktur an. Dann entscheidest du was du davon brauchst.
                        PHP-Code:
                        $json file_get_contents($deineURL);

                        $data json_decode($jsontrue);

                        echo 
                        "<pre>";
                        print_r($data);
                        echo 
                        "</pre>"
                        Da stehen sogar im ersten Teil die Feldtytpen drin: [type] => esriFieldTypeSmallInteger
                        einfacher geht es nimmer.

                        Wie du auf ein Array zugreifst weisst du ja. Du holst also ab ...['features'] deine Daten und speicherst mit einem prepared statement in deine DB-Tabelle.
                        Mysqli unter https://www.php.net/manual/de/mysqli...bind-param.php
                        PDO unter https://www.php.net/manual/de/pdo.pr...statements.php
                        nachlesen.

                        Wenn das einwandfrei funktioniert kannst du das Script ein mal am Tag ab 0 UHR MESZ laufen lassen, da die Daten wohl nur alle 24 Stunden aktualisiert werden, steht unter ['last_update'].

                        N.B. Anstatt Fehlermeldungen auszugeben, die keiner sieht, schreibst du diese zum Beispiel in eine logdatei oder lässt dir eine E-Mail zukommen. Kann ja sein das der Service umzieht oder eingestellt wird, das solltest du berücksichtigen und nicht blind darauf vertrauen, das URLs ewig erreichbar sind.
                        Danke, für deine Hilfe bis hierher. Ich habe in der Zwischenzeit eine SQL Tabelle mit den entsprechenden Feldern angelegt.

                        Bin jedoch ein wenig überfordert, was die Arrays angeht. Die Arrays werden OBJECTID, ADE, GF, etc. genannt oder?
                        Die Verbindung zur Datenbank wurde hergestellt, wie es hier aber weitergeht (übergeben der Arrays), bin ich mal wieder überfragt.

                        Kommentar


                        • #13
                          Zeige doch mal die Struktur deiner Datenbanktabelle, die du bis jetzt hast. Ob du alle Felder brauchst, musst du wissen, ich kann mit diesen Kürzeln nichts anfangen und würde sie daher übergehen.
                          Hast du dir denn mal die verlinkten Beiträge angesehen und auch mal ausprobiert. Du musst auch mal Aufgaben in kleinere Schritte unterteilen und testen, sonst ist der Lernerfolg nicht gegeben.

                          Erstelle dir also ein einfaches Array und eine Testtabelle in deiner DB und versuche mal die Einträge zu speichern. Wenn du das hast, dann mit einem zweidimensionalem Array, so tastet man sich ran.
                          Natürlich kannst du hier so lange nachfragen bis du alles zusammen hast, aber dann hätten wir ja gleich alles für dich schreiben können und lernen tust du nichts dabei.

                          Kommentar


                          • #14
                            hier mal ein Beispiel, wie schön einfach das alles gehen kann. Als Beispiel folgende JSON-Daten:

                            Code:
                            {"age": 31, "city": "New York", "name": "John"}
                            Nehmen wir mal an, wir haben immer ein Feld namens 'name' und möchten, um besser drauf zugreifen zu können, den Wert dessen in einer extra Spalte speichern. Hier der SQL-Teil:

                            Code:
                            -- zuerst einmal Tabelle erstellen
                            edb=*# create table marcusfuerth(id int generated always as identity primary key, data jsonb, name text generated always as (data ->> 'name') stored);
                            CREATE TABLE
                            -- jetzt das INSERT
                            edb=*# insert into marcusfuerth (data) values ('{"age": 31, "city": "New York", "name": "John"}');
                            INSERT 0 1
                            -- was haben wir nun?
                            edb=*# select * from marcusfuerth;
                             id |                      data                       | name
                            ----+-------------------------------------------------+------
                              1 | {"age": 31, "city": "New York", "name": "John"} | John
                            (1 row)
                            
                            edb=*#
                            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                            Kommentar


                            • #15
                              Zitat von protestix Beitrag anzeigen
                              Zeige doch mal die Struktur deiner Datenbanktabelle, die du bis jetzt hast. Ob du alle Felder brauchst, musst du wissen, ich kann mit diesen Kürzeln nichts anfangen und würde sie daher übergehen.
                              Hast du dir denn mal die verlinkten Beiträge angesehen und auch mal ausprobiert. Du musst auch mal Aufgaben in kleinere Schritte unterteilen und testen, sonst ist der Lernerfolg nicht gegeben.

                              Erstelle dir also ein einfaches Array und eine Testtabelle in deiner DB und versuche mal die Einträge zu speichern. Wenn du das hast, dann mit einem zweidimensionalem Array, so tastet man sich ran.
                              Natürlich kannst du hier so lange nachfragen bis du alles zusammen hast, aber dann hätten wir ja gleich alles für dich schreiben können und lernen tust du nichts dabei.
                              Ich würde anfangs gerne alle Informationen an die Datenbank übergeben und dann im Nachgang ggf. nur teilweise die Daten ausgeben, die notwendig sind.
                              Die Struktur habe ich als Bild angehängt.

                              Ich hab das Prinzip soweit verstanden. Aber wie sage ich meinem Skript, welches Array übergeben werden soll.

                              Mein Code zum testen sah so aus:
                              PHP-Code:
                              $stmt $pdo->prepare("INSERT INTO test (name, vorname) VALUES (:name, :vorname)");
                              $stmt->bindParam(':name'$name);
                              $stmt->bindParam(':vorname'$vorname);
                              $name 'Mustermann';
                              $vorname 'Max';
                              $stmt->execute(); 
                              Angehängte Dateien

                              Kommentar

                              Lädt...
                              X