Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte aus einer Rest API in Datenbank speichern.

Einklappen

Neue Werbung 2019

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

  • Werte aus einer Rest API in Datenbank speichern.

    Hallo zusammen,



    ich stehe gerade vor folgendem Problem.


    Habe mir einen Temperaturmesser gekauft. Dieser soll in regelmäßigen Abständen die Werte in eine Datenbank eintragen.


    Dieser integrierte Sensor speichert automatisch über eine REST API auf einen Server, die Frage ist jetzt nur - wie auslesen (JSON) und in eine Datenbank speichern.


    Link zur Dokumentation der API Schnittstelle: http://www.mobile-alerts.eu/images/p...umentation.pdf



    Ich bin bereits soweit, dass ich die Werte übergebe und es in einer Textdatei speichern lasse, aber das ist eben nicht so schick, wie ich mir das wünsche.
    Plus wird es bei einer steigenden Zahl von Einträgen eben irgendwann sehr sehr unübersichtlich und langsam.



    Im Anschluss geht es um eine Visualisierung der gleichen.



    Jetzt erstmal zum CODE:

    PHP-Code:
    <?php


    //API Url
    $url 'https://www.data199.com/api/pv1/device/lastmeasurement';

    //Initiate cURL.
    $ch curl_init($url);

    //The JSON data.
    $jsonData = array(
        
    'deviceids' => '0E7EA4A71203',
        
    'phoneid' => '880071013613'
    );

    //Encode the array into JSON.
    $jsonDataEncoded json_encode($jsonData);

    //Tell cURL that we want to send a POST request.
    curl_setopt($chCURLOPT_POST1);

    //Attach our encoded JSON string to the POST fields.
    curl_setopt($chCURLOPT_POSTFIELDS$jsonDataEncoded);

    //Set the content type to application/json
    curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8'));

    curl_setopt($chCURLOPT_RETURNTRANSFER1);

    //Execute the request
    $result curl_exec($ch);


    print 
    $result;

    $database "database.txt";
    $file fopen($database"a");
    fwrite($file$result);  
    fwrite ($file,"\r\n");
    curl_close ($ch);

    Code:
    {
      "phoneid": "880071013613",
      "devices": [
        {
          "deviceid": "0E7EA4A71203",
          "lastseen": 1522299052,
          "lowbattery": false,
          "measurement": {
            "idx": 418324,
            "ts": 1528799045,
            "c": 1522299052,
            "t1": 26.2,
            "t2": 25.6,
            "t1hi": false,
            "t1hise": false,
            "t1hiee": false,
            "t1his": 40.0,
            "t1lo": false,
            "t1lose": false,
            "t1loee": false,
            "t1los": -10.0,
            "t2hi": true,
            "t2hise": false,
            "t2hiee": false,
            "t2his": 25.0,
            "t2lo": false,
            "t2lose": false,
            "t2loee": false,
            "t2los": 2.0
          }
        }
      ],
      "success": true
    }

  • #2
    Und was möchtest du jetzt?
    Soll dir das jemand schreiben, dann ist das hier das falsche Forum, ansonsten musst du eine Datenbank haben, eine Tabelle anlegen und die Daten darin speichern.

    Woran scheiterst du?

    Kommentar


    • #3
      Nein ich habe schon das soweit geschrieben..

      PHP-Code:
      $servername "localhost";
      $username "root";
      $password "password";
      $dbname "temperatur";

      // Create connection
      $conn = new mysqli($servername$username$password$dbname);
      // Check connection
      if ($conn->connect_error) {
          die(
      "Connection failed: " $conn->connect_error);
      }

      $sql "INSERT INTO table_name ($array)
      VALUES ('1', '2', '3', '4', '5')"
      ;

      if (
      $conn->query($sql) === TRUE) {
          echo 
      "New record created successfully";
      } else {
          echo 
      "Error: " $sql "<br>" $conn->error;
      }

      $conn->close(); 
      Aber die Werte, die er mir so schön in die Textdatei schreibt, bekomme ich nicht in die Datenbank bzw. die Tabelle.

      Vielen Dank für deine Antwort

      Gruß

      Kommentar


      • #4
        $array ist nicht definiert. Lass dir $sql ausgeben und teste es in PHPMyAdmin. Was heisst "bekomme ich nicht in die Datenbank", welcher Fehler wird ausgegeben? Du versuchst da ja auch nur 1,2,3,4,5 einzutragen - Pseudocode ist hier nicht hilfreich. Dein Datenbankschema ist nicht ersichtlich, das kannst du mit PDO und sqlite "inmemory" ganz leicht bauen und hier posten.
        [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

        Kommentar


        • #5
          Guten Morgen,
          chorn

          es geht darum, dass die Werte nicht so ausgegeben werden, dass ich sie in der Datenbank speichern kann. Das liegt mMn. daran, dass die JSON Werte (siehe CODE) eben mal in Anführungszeichen, dann wieder leer und so kann ich nicht durch entfernen der "" diese in die DB eintragen.

          Also kommt es gar nicht bis VALUES, da die Zeichenkette vorher schon fehler aufweist.

          Variable ist $result nicht $array, stimmt danke. War schon spät gestern.

          INSERT INTO table_name ({ "phoneid":

          Da bekomme ich schon die ersten Fehler.

          Code:
          • Unerwartetes Zeichen. (near "{" at position 24)
          • Variablenname wurde erwartet. (near " " at position 36)
          • Variablenname wurde erwartet. (near " " at position 63)
          • Unerwartetes Zeichen. (near "[" at position 64)
          • Unerwartetes Zeichen. (near "{" at position 66)
          • .....


          Wenn es da eine einfachere Lösung als die obrige gibt, wäre ich über einen Link sehr dankbar.

          Ich habe schon gefühlt 50 Tabs offen und suche nach einer guten und einfachen Lösung, alle 7 Minuten den Wert abzuspeichern und in die DB zu werfen.

          Aber fürs erste reicht es mir wenn das abspeichern des aktuellen Wertes!



          Kommentar


          • #6
            http://php.net/manual/de/function.json-decode.php

            Kommentar


            • #7
              Strings gehören ja auch in Anführungszeichen. Oder halt PDO nehmen:

              https://www.php-einfach.de/mysql-tut...crashkurs-pdo/
              [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

              Kommentar


              • #8
                PHP-Code:
                $ergebnis json_decode($resulttrue);

                echo 
                $ergebnis
                und
                Code:
                $sql = "INSERT INTO table_name
                VALUES ('".$ergebnis['phoneid']."','".$ergebnis['devices']."');
                Den ersten Wert speichert er mir in die Datenbank, beim zweiten gehts nicht mehr.

                Kommentar


                • #9
                  Ja, da steht dann "Array", weil ein PHP-Array durch Verkettung zu einer Zeichenkette umgewandelt wird in die Zeichenkette "Array".
                  [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

                  Kommentar


                  • #10
                    Mach

                    PHP-Code:
                    var_dump($ergebnis); 
                    Dann siehst du wie der Array aufgebaut ist. $ergebnis['devices'] ist ein Array.

                    Kommentar


                    • #11
                      var_dump habe ich mir doch schon ausgeben lassen:
                      PHP-Code:
                      array(3) { ["phoneid"]=> string(12"880071013613" ["devices"]=> array(1) { [0]=> array(4) { ["deviceid"]=> string(12"0E7EA4A71203" ["lastseen"]=> int(1522299052) ["lowbattery"]=> bool(false) ["measurement"]=> array(5) { ["idx"]=> int(419269) ["ts"]=> int(1528883591) ["c"]=> int(1528883593) ["t1"]=> float(23.9) ["t2"]=> float(24.1) } } } ["success"]=> bool(true) } 

                      Kommentar


                      • #12
                        Na dann hast du bestimmt auch schon gesehen, was bereits auch erwähnt wurde:

                        Zitat von jonas3344 Beitrag anzeigen
                        $ergebnis['devices'] ist ein Array.
                        Was fehlt dir noch?
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Wenn du einen JSON-String zu einem PHP-Arrays auseinander nimmst, musst du das PHP-Array wieder zu einem JSON-String zusammenpacken bevor du es in die Datenbank schreibst, z.B. mit json_encode().
                          [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

                          Kommentar


                          • #14
                            Hey Leute, vielen Dank für eure Mühen mir die nötigen Hilfestellungen zu geben.

                            Ich hab es doch oben schon encoded, das muss ich doch kein zweites mal machen, oder?

                            der Aufruf über

                            $ergebnis['devices']['deviceid'] gibt mir auch nicht den richtigen Wert zurück. Notice: Undefined index: deviceid


                            Bin ja in diesem Forum, weil ich eben nicht der Experte bin, deswegen entschuldigt die Fragen, die für euch sicherlich in 1 Minute zu lösen sind.


                            Habe eher einen technischen, als einen Programmierhintergrund

                            Kommentar


                            • #15
                              Code:
                              ["devices"]=> array(1) { [0]=> array(4) { ["deviceid"]
                              PHP-Code:
                              $a['devices'][0]['deviceid'
                              The string "()()" is not palindrom but the String "())(" is.

                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X