Partage
  • Partager sur Facebook
  • Partager sur Twitter

Enregistrer requête API en JSON en BDD MySQL

Script PHP

    12 mars 2020 à 18:13:47

    Bonjour,

    Je cherche à enregistrer toutes les 24h le retour d'une requête une API au format JSON dans une BDD.

    Exemple de retour à la requête :

    { "success": 1, "body": { "history": [ ["Fermé","2020-03-12 10:09:27"], ["Ouvert","2020-03-12 10:09:14"], ["Fermé","2020-03-12 10:00:56"], ["Ouvert","2020-03-12 09:58:38"], ["Fermé","2020-03-12 08:46:44"], ["Ouvert","2020-03-12 08:45:37"], ["Fermé","2020-03-12 08:44:50"], ["Ouvert","2020-03-12 08:43:44"], ["Fermé","2020-03-12 08:28:13"], ["Ouvert","2020-03-12 08:27:27"], ["Fermé","2020-03-12 08:17:29"], ["Ouvert","2020-03-12 08:16:48"], ["Fermé","2020-03-11 20:17:30"], ["Ouvert","2020-03-11 20:13:54"], ["Fermé","2020-03-11 19:25:30"], ["Ouvert","2020-03-11 19:24:58"], ["Fermé","2020-03-11 19:12:00"], ["Ouvert","2020-03-11 19:11:55"], ["Fermé","2020-03-11 18:43:19"], ["Ouvert","2020-03-11 18:42:04"], ["Fermé","2020-03-11 18:41:34"], ["Ouvert","2020-03-11 18:41:15"], ["Fermé","2020-03-11 18:36:58"], ["Ouvert","2020-03-11 18:36:30"], ["Fermé","2020-03-11 18:31:21"], ["Ouvert","2020-03-11 18:18:52"], ["Fermé","2020-03-11 18:17:26"], ["Ouvert","2020-03-11 18:12:54"], ["Fermé","2020-03-11 18:11:25"], ["Ouvert","2020-03-11 18:10:29"]] } }

    J'ai récupéré un script PHP que j'ai réussi à paramétrer mais je ne comprend pas où placer ces 3 fichiers php sur mon serveur Raspbian (LAMP installé et fonctionnel).

    Ci-joint script 

    https://drive.google.com/open?id=18hkzoF7JQPBThOWLUFtJXzvj1Citni0L

    Par avance merci pour votre aide, 

    • Partager sur Facebook
    • Partager sur Twitter
      18 mars 2020 à 22:27:27

      Bonjour,

      J'ai trouvé où placer ce script pour que celui-ci s'exécute.

      J'obtiens l'erreur suivante à l'exécution :

      Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/script/Eedomus.php on line 58
      
      Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/script/Eedomus.php on line 58
      0 exportation des données de l'Eedomus. Fini.

      la ligne 58 de mon code est :

      	$maxReq=count($json['body']['history']);

      Avez-vous une idée de l'origine de l'erreur ?

      Merci,

      • Partager sur Facebook
      • Partager sur Twitter
        19 mars 2020 à 5:18:02

        Bonjour.

        Comment sommes-nous censé pouvoir t'aider si tu ne nous montres pas plus de code, comme par exemple comment est définie la variable json ?

        Il faudrait donc que tu nous montres plus de code.

        • Partager sur Facebook
        • Partager sur Twitter

        Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

          30 mars 2020 à 15:28:38

          <?php
          
          // Créer par Fredy017
          
          include ('parametre.php');
          include ('fonction.php');
          $nombreExportation = 0;
          
          // nombres maxi d'API
          $maxPeriphs = count($periphs);
          
          
          // on se connecte à MySQL et on sélectionne la base
          try {
          	$conn=new PDO('mysql:host=' .$phpIpServeur. ';port=' .$phpIpPort. ';dbname=' .$phpBaseD. ';charset=utf8', $phpUser, $phpPassword);
          	$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          	
          }
           catch (PDOException $e) {
          	echo 'Echec connection : ' .$e->getmessage();
          }
          
          // boucle pour les différents API
          for ($i=0; $i<$maxPeriphs ; $i++) 
          { 	
          	$type=$periphs[$i]['type'];
          	$piece=$periphs[$i]['piece'];
          	$api=$periphs[$i]['api'];
          	$unite=unite($type);
          	$nomPeriphs=FNOMTable($type,$piece);
          		
          	// Création des tables
          	$sql="CREATE table IF NOT EXISTS $nomPeriphs(
               ID INT( 11 ) AUTO_INCREMENT PRIMARY KEY,
               Nom VARCHAR( 250 ) NOT NULL, 
               Value VARCHAR(5) NOT NULL,
               Unite VARCHAR( 50 ) NOT NULL,
               Date_Heure DATETIME  NOT NULL);" ;
               $conn->exec($sql);
          
          	// Create a stream
          	$opts1=array('http' => 
          				array(
          				'method' =>"GET"
          				)
          	);
          
          	$context=stream_context_create($opts1);
          
          	// Récupére la derniere valeur du périphérique dans EEDOMUS
          	$req="https://api.eedomus.com/get?api_user=" .$eedomusUser. "&api_secret=" .$eedomusMDP. "&action=periph.history&periph_id=" .$api;
          
          	$file=file_get_contents($req, false, $context);
          	$json=json_decode($file,true);
          	//$jsonE = array_reverse($json['body']['history']);
          	//$json = $jsonE;
          	$maxReq=count($json['body']['history']);
              
          	// Dernière ligne de phpmyadmin
          	$reqPrepare = 'SELECT * FROM ' .$nomPeriphs. ' WHERE id=(SELECT max(id) FROM ' .$nomPeriphs. ')';
          	$reqSelect = $conn->prepare($reqPrepare);
          	$reqSelect->execute();
          	$dernier = $reqSelect->fetch(PDO::FETCH_ASSOC);
          	// modification pour la gestion de la date
          	$dernierDate= new DATETIME();
          	$dernierDate=$dernier['Date_Heure'];
          
          
          	// Boucle d'insertion de données
          	for ($j=$maxReq-1; $j>-1   ; --$j) 
          	{ 
          
          		$periValue=$json['body']['history'][$j][0];
          
          		// Date et heure
          		$periDateHeure= new DateTime();
          		$periDateHeure=$json['body']['history'][$j][1];
          
          		// condition de gestion des dates pour les doublons
          		if ( $dernierDate < $periDateHeure)
          		{
          	
          			// Insertion dans la base de données
          			$req=$conn->prepare('INSERT INTO '.$nomPeriphs.'(Nom, Value, Unite, Date_Heure)VALUES(:Nom, :Value, :Unite, :Dates)');
          			$req->execute(array(
          			 	'Nom' => $nomPeriphs,
          			 	'Value' => $periValue,
          			 	'Unite' => $unite,
          			 	'Dates' => $periDateHeure 	
          			 	));
          			$nombreExportation++;
          		}
          	}
          }
          
          // Envois info sur le nombre d'exportation de données sur un état sur Eedomus
          $reqRetour = "https://api.eedomus.com/set?api_user=" .$eedomusUser. "&api_secret=" .$eedomusMDP. "&action=periph.value&periph_id=" .$periphsRetour. "&value=" .$nombreExportation;
          file_get_contents($reqRetour);
          
          Echo $nombreExportation. ' exportation des données de l\'Eedomus. Fini.';
          $conn = NULL;
          ?>

          Bonjour,

          Ci-dessous le code complet.

          Par avance merci pour votre aide,

          • Partager sur Facebook
          • Partager sur Twitter
            13 novembre 2021 à 10:27:46

            Bonjour, as-tu toujours le même problème?

            • Partager sur Facebook
            • Partager sur Twitter

            Enregistrer requête API en JSON en BDD MySQL

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown