noursane Posté(e) 23 mars 2017 Partager Posté(e) 23 mars 2017 Salut ! mon objective est crée un site météo pour ma ville. je trouve quelque difficulté je crée quelque exemple de code php pour lire l'url de fichier xml: http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1 Achaque fois Aucun erreur dans le code php mais aucun insertion dans la base de données voici l'affichage: voici l'exemple des code php: exemple1: <?php try { $bdd = new PDO('mysql:host=localhost; dbname=pf; charset=utf8', 'root', ''); $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; $xml =simplexml_load_file($url); foreach($xml->location as $location) { foreach($location->day as $day) { echo($day[0]['name'])."</br>"; foreach($day->symbol as $symbol) { echo($symbol[0]['value'])."</br>"; } foreach($day->tempmin as $tempmin) { echo($tempmin[0]['value'])."</br>"; } foreach($day->tempmax as $tempmax) { echo($tempmax[0]['value'])."</br>"; } foreach($day->wind as $wind) { echo($wind[0]['value'])."</br>"; } foreach($day->rain as $rain) { echo($rain[0]['value'])."</br>"; } foreach($day->humidity as $humidity) { echo($humidity[0]['value'])."</br>"; } foreach($day->pressure as $pressure) { echo($pressure[0]['value'])."</br>"; } foreach($day->snowline as $snow) { echo($snow[0]['value'])."</br>"; } foreach($day->sun as $sun) { echo($sun[0]['value'])."</br>"; } foreach($day->moon as $moon) { echo($moon[0]['value'])."</br>"; } foreach($day->local_info as $info) { echo($info[0]['value'])."</br>"; } $sql=$bdd->prepare('INSERT INTO jour1(nomj1,symbolej1,tempminj1,tempmaxj1,windj1,windgustsj1,rainj1,humidityj1,pressurej1,snowlinej1,sun,moonj1, localinfoj1,"") values("'.$day[0]['name'].'","'.$symbol[0]['value'].'","'.$tempmin[0]['value'].'",,"'.$tempmax[0]['value'].'",,"'.$wind[0]['value'].'","","'.$rain[0]['value'].'",,"'.$humidity[0]['value'].'",,"'.$pressure[0]['value'].'",,"'.$snow[0]['value'].'",,"'.$sun[0]['value'].'",,"'.$moon[0]['value'].'",,"'.$info[0]['value'].'",,"",)'); $sql->execute(); } } } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } ?> exemple2: <?php try { $bdd = new PDO('mysql:host=localhost; dbname=bd; charset=utf8', 'root', ''); $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; $xml =simplexml_load_file($url); $tableau=array(14); foreach($xml->location as $location){ $city=$location['city']."<br />"; $nom=$location->day['name']; $symb=$location->day->symbol['value']; $tempmin=$location->day->tempmin['value']; $tempmax=$location->day->tempmax['value']; $wind=$location->day->wind['value']; //$windgust=$location->day->windgusts['value']; $rain=$location->day->rain['value']; $humidite=$location->day->humidity['value']; $pressur=$location->day->pressure['value']; $snowline=$location->day->snowline['value']; $sun=$location->day->sun['value']; $moon=$location->day->moon['value']; $info=$location->day->local_info['value']; $hour=$location->day->hour['value']; /* $city=$xml->location['city']."<br />"; $nom=$xml->location->day['name']; $symb=$xml->location->day->symbol['value']; $tempmin=$xml->location->day->tempmin['value']; $tempmax=$xml->location->day->tempmax['value']; $wind=$xml->location->day->wind['value']; $windgust=$xml->location->day->wind_gusts['value']; $rain=$xml->location->day->rain['value']; $humidite=$xml->location->day->humidity['value']; $pressur=$xml->location->day->pressure['value']; $snowline=$xml->location->day->snowline['value']; $sun=$xml->location->day->sun['value']; $moon=$xml->location->day->moon['value']; $info=$xml->location->day->local_info['value']; $hour=$xml->location->day->hour['value'];*/ $sql=$bdd->prepare('INSERT INTO jour(nom,symbole,tempmin,tempmax,wind,wind-gusts,rain,humidite,pressure,snowline,sun,moon,localinfo,hour) values(:nom, :symbol, :tempmin, :tempmax, :wind, "", :rain, :humidite, :pressure, :snowline, :sun, :moon, :info, :hour,)'); $sql->execute(array ('nom'=>$nom, 'symbol' => $symb, 'tempmin' => $tempmin, 'tempmax' => $tempmax, 'wind' => $wind, //'windgusts' => $tableau[5], 'rain' => $rain, 'humidite' => $humidite, 'pressure' => $pressur, 'snowline' => $snowline, 'sun' => $sun, 'moon' => $moon, 'info' => $info, 'hour' => $hour, )); } echo 'le chargement de fichier xml météo est terminé'; } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } ?> exemple3: <?php try { $bdd = new PDO('mysql:host=localhost; dbname=bd; charset=utf8', 'root', ''); $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; $xml =simplexml_load_file($url); //declartion des variables /*$maxid=0; $tableau=array(13); $a=0; // selectionne tout ce qui est enfante de Balise foreach($xml->children() as $day) // selectionne tout ce qui est enfante de Balise { $incrementation_ID=$maxid++; $a=0; foreach($day->children() as $child) { //foreach($day->children() as $child) // { // Crée un tableau pour ranger les enfants de Balise ensemble $tableau[$a]=$child; $a++; // } } //implémente le tableau dans la base de données $rep2 = $bdd->prepare('INSERT INTO jour1(nomj1,symbolej1,tempminj1,tempmaxj1,windj1,windgustsj1,rainj1,humidityj1,pressurej1,snowlinej1,sun,moonj1, localinfoj1,hourj1) VALUES("", :symbol, :tempmin, :tempmax, :wind, :wind-gusts, :rain, :humidity, :pressure, :snowline, :sun, :moon, :local_info, :hour)'); $rep2->execute(array( 'symbol' => $tableau[0], 'tempmin' => $tableau[1], 'tempmax' => $tableau[2], 'wind' => $tableau[3], 'wind-gusts' => $tableau[4], 'rain' => $tableau[5], 'humidity' => $tableau[6], 'pressure' => $tableau[7], 'snowline' => $tableau[8], 'sun' => $tableau[9], 'moon' => $tableau[10], 'local_info' => $tableau[11], 'hour' => $tableau[12], )); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } ?> voici partie de l'exemple 4: <?php $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; //$xml =simplexml_load_file($url); //echo "<pre>".print_r($xml,1)."</pre>"; /*$doc_AL = new DomDocument(); $doc_AL->load('http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'); //fichier en local pour les tests mais au final se sera une URL externe $res= $doc_AL->getElementsByTagName("day"); foreach($res as $day){ echo($day->getAttribute("name"))."<br />"; } ?> voici la structure de la base de données: nom base de donnees:bd nom table1: jour1 jour1(nomj1,symbolej1,tempminj1,tempmaxj1,windj1,windgustsj1,rainj1,humidityj1,pressurej1,snowlinej1,sunj1,moonj1, localinfoj1,hourj1) nom table2:jour jour(nom,symbole,tempmin,tempmax,wind,wind-gusts,rain,humidite,pressure,snowline,sun,moon,localinfo,hour) Je cherche une solution parfaite pour insérer tous les données dans fichier XML(remplir tous les tables) de l’URL : http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1 Nom des tables:jour,tempmin,tempmax,rain,humidité,rain,rain_gusts,sun,snowline,pressure,moon.............. vous pouvez vous donner un exemple pour lire le ficher et insérer tous les données dans ma base de données. Merci d'avance. Lien à poster Partager sur d’autres sites More sharing options...
jackT Posté(e) 25 mars 2017 Sciez Partager Posté(e) 25 mars 2017 (modifié) Le 23/03/2017 à 22:49, noursane a dit : vous pouvez vous donner un exemple pour lire le ficher et insérer tous les données dans ma base de données... Bonjour, Voici un code qui fonctionne chez moi, en reprenant ton exemple 1. Pour accéder à la base de donnée, je n'utilise pas PDO, mais mysqli, qui est une extension qui est le plus souvent installée avec php. A verifier pour toi. <?php $host="localhost"; $base="pf"; $login="root"; $pwd=""; $bdd=mysqli_connect($host, $login, $pwd); mysqli_select_db($bdd,$base) ; $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; $xml =simplexml_load_file($url); foreach($xml->location as $location) { foreach($location->day as $day) { $name=$day['name']; $symbol=$day->symbol['value']; $tempmin=$day->tempmin['value']; $tempmax=$day->tempmax['value']; $wind=$day->wind['value']; $rain=$day->rain['value']; $humidity=$day->humidity['value']; $pressure=$day->pressure['value']; $snow=$day->snow['value']; $sunrise=$day->sun['in']; $moonrise=$day->moon['in']; $info=$day->local_info['local_time']; $requete='INSERT INTO jour1 (nomj1,symbolej1,tempminj1,tempmaxj1,windj1,rainj1,humidityj1,pressurej1,snowlinej1,sunj1,moonj1,localinfoj1) values("'.$name.'","'.$symbol.'","'.$tempmin.'","'.$tempmax.'","'.$wind.'","'.$rain.'","'.$humidity.'","'.$pressure.'","'.$snow.'","'.$sunrise.'","'.$moonrise.'","'.$info.'");'; if ( ! mysqli_query($bdd, $requete)) echo 'Erreur : '.mysqli_error($bdd).'<br>'.$requete.'<br>'; } } ?> En ce qui concerne le soleil ou la lune, il n'existe pas de champs "value" comme tu l'avais mis dans ton code., mais il y a d'autres champs (in, mid, out, ...etc). J'ai pris ici dans l'exemple l'heure du lever ('in'). Enfin, comme il n'y a qu'une valeur de chaque paramètre (symbol, tempmin, tempsmax...etc) pour chaque jour, il n'est pas nécessaire de faire une boucle "foreach" pour ces paramètres. Cordialement Modifié 25 mars 2017 par jackT 1 Lien à poster Partager sur d’autres sites More sharing options...
clodmu Posté(e) 26 mars 2017 Île Maurice Partager Posté(e) 26 mars 2017 Bonjour Noursane, Je ne t'aiderai pas en programmation mais pourquoi ne pas utiliser un programme tout fait que tu peux ensuite arranger à ta façon ? ! Quelques uns sont gratuits et tournent très bien avec la majorité des serveurs classiques. Lien à poster Partager sur d’autres sites More sharing options...
noursane Posté(e) 26 mars 2017 Auteur Partager Posté(e) 26 mars 2017 Le 25/03/2017 à 08:21, jackT a dit : Bonjour, Voici un code qui fonctionne chez moi, en reprenant ton exemple 1. Pour accéder à la base de donnée, je n'utilise pas PDO, mais mysqli, qui est une extension qui est le plus souvent installée avec php. A verifier pour toi. <?php $host="localhost"; $base="pf"; $login="root"; $pwd=""; $bdd=mysqli_connect($host, $login, $pwd); mysqli_select_db($bdd,$base) ; $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; $xml =simplexml_load_file($url); foreach($xml->location as $location) { foreach($location->day as $day) { $name=$day['name']; $symbol=$day->symbol['value']; $tempmin=$day->tempmin['value']; $tempmax=$day->tempmax['value']; $wind=$day->wind['value']; $rain=$day->rain['value']; $humidity=$day->humidity['value']; $pressure=$day->pressure['value']; $snow=$day->snow['value']; $sunrise=$day->sun['in']; $moonrise=$day->moon['in']; $info=$day->local_info['local_time']; $requete='INSERT INTO jour1 (nomj1,symbolej1,tempminj1,tempmaxj1,windj1,rainj1,humidityj1,pressurej1,snowlinej1,sunj1,moonj1,localinfoj1) values("'.$name.'","'.$symbol.'","'.$tempmin.'","'.$tempmax.'","'.$wind.'","'.$rain.'","'.$humidity.'","'.$pressure.'","'.$snow.'","'.$sunrise.'","'.$moonrise.'","'.$info.'");'; if ( ! mysqli_query($bdd, $requete)) echo 'Erreur : '.mysqli_error($bdd).'<br>'.$requete.'<br>'; } } ?> En ce qui concerne le soleil ou la lune, il n'existe pas de champs "value" comme tu l'avais mis dans ton code., mais il y a d'autres champs (in, mid, out, ...etc). J'ai pris ici dans l'exemple l'heure du lever ('in'). Enfin, comme il n'y a qu'une valeur de chaque paramètre (symbol, tempmin, tempsmax...etc) pour chaque jour, il n'est pas nécessaire de faire une boucle "foreach" pour ces paramètres. Cordialement Salut, Merci jackT pour votre réponse . ton code est fonctionne chez moi encore , mais mon besoin de voir comme ça(les tables) dans ma base de donnée selon les données dans le lien: http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1 nom table: jour1 nom symbol tempmin tempmax wind rain humidity pressure snowline Dimanche 3 12 22 29 0 72 1019 3200 nom table: jour2 nom symbol tempmin tempmax wind rain humidity pressure snowline Lundi 2 9 22 29 0 66 1020 2900 nom table:jour3 nom symbol tempmin tempmax wind rain humidity pressure snowline Mardi 1 10 20 28 0 66 1025 2700 nom table: jour4 nom symbol tempmin tempmax wind rain humidity pressure snowline Mercredi 1 8 20 18 0 73 1026 2000 nom table: jour5 nom symbol tempmin tempmax wind rain humidity pressure snowline jeudi 1 9 21 17 0 69 1028 2300 nom table: hour(un table comme ça pour chaque jour) Dimanche 1 :00 2 :00 3 :00 4 :00 5 :00 6 :00 7 :00 24 :00 temp 15 symbol 3 wind 29 rain 0 humidity 87 pressure 1021 clouds 39% snowline 3500 windchill 15 Est-il trouve un possibilite d'exemple de code donner le résultat ce dessus Merci d'avance. Lien à poster Partager sur d’autres sites More sharing options...
noursane Posté(e) 29 mars 2017 Auteur Partager Posté(e) 29 mars 2017 Le 25/03/2017 à 08:21, jackT a dit : Bonjour, Voici un code qui fonctionne chez moi, en reprenant ton exemple 1. Pour accéder à la base de donnée, je n'utilise pas PDO, mais mysqli, qui est une extension qui est le plus souvent installée avec php. A verifier pour toi. <?php $host="localhost"; $base="pf"; $login="root"; $pwd=""; $bdd=mysqli_connect($host, $login, $pwd); mysqli_select_db($bdd,$base) ; $url='http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1'; $xml =simplexml_load_file($url); foreach($xml->location as $location) { foreach($location->day as $day) { $name=$day['name']; $symbol=$day->symbol['value']; $tempmin=$day->tempmin['value']; $tempmax=$day->tempmax['value']; $wind=$day->wind['value']; $rain=$day->rain['value']; $humidity=$day->humidity['value']; $pressure=$day->pressure['value']; $snow=$day->snow['value']; $sunrise=$day->sun['in']; $moonrise=$day->moon['in']; $info=$day->local_info['local_time']; $requete='INSERT INTO jour1 (nomj1,symbolej1,tempminj1,tempmaxj1,windj1,rainj1,humidityj1,pressurej1,snowlinej1,sunj1,moonj1,localinfoj1) values("'.$name.'","'.$symbol.'","'.$tempmin.'","'.$tempmax.'","'.$wind.'","'.$rain.'","'.$humidity.'","'.$pressure.'","'.$snow.'","'.$sunrise.'","'.$moonrise.'","'.$info.'");'; if ( ! mysqli_query($bdd, $requete)) echo 'Erreur : '.mysqli_error($bdd).'<br>'.$requete.'<br>'; } } ?> En ce qui concerne le soleil ou la lune, il n'existe pas de champs "value" comme tu l'avais mis dans ton code., mais il y a d'autres champs (in, mid, out, ...etc). J'ai pris ici dans l'exemple l'heure du lever ('in'). Enfin, comme il n'y a qu'une valeur de chaque paramètre (symbol, tempmin, tempsmax...etc) pour chaque jour, il n'est pas nécessaire de faire une boucle "foreach" pour ces paramètres. Cordialement Salut, avec le L'URL:http://'http://api.tameteo.com/index.php?api_lang=fr&localidad=8963&affiliate_id=wf7toya165cq&v=2&h=1' (le mise à jour sera réalise automatiquement à chaque jour supprime un jour avant et ajoute un jour après)et le code que écrit par jackT est correcte , Est-il trouve un possibilité d'exemple de code(html dans php) donner le résultat ce dessous(afficher dans un site). nom symbol tempmin tempmax wind rain humidity pressure snowline Dimanche 3 12 22 29 0 72 1019 3200 nom symbol tempmin tempmax wind rain humidity pressure snowline Lundi 2 9 22 29 0 66 1020 2900 nom symbol tempmin tempmax wind rain humidity pressure snowline Mardi 1 10 20 28 0 66 1025 2700 nom symbol tempmin tempmax wind rain humidity pressure snowline Mercredi 1 8 20 18 0 73 1026 2000 nom symbol tempmin tempmax wind rain humidity pressure snowline jeudi 1 9 21 17 0 69 1028 2300 (un table comme ça pour chaque jour) Dimanche 1 :00 2 :00 3 :00 4 :00 5 :00 6 :00 7 :00 24 :00 temp 15 symbol 3 wind 29 rain 0 humidity 87 pressure 1021 clouds 39% snowline 3500 windchill 15 Qui a une solution? Merci , Lien à poster Partager sur d’autres sites More sharing options...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant