il faut que tu requête avec un GET et pas un POST, il faut aussi désactiver les vérifications de certificats, d’adresse, et surtout bien remplir le header. le site en question attend une requête de navigateur, il faut donc envoyer une signature de navigateur quelconque. là j’ai copié mon safari. ta chaine json est dans result.
Bonjour @OUARZA,
Ton idée de récupérer les info sur les restrictions d’eau m’intéresse aussi.
Du coup cela fait 3 soirées que je bricole de mon coté du code php avec des exemple glanés à droite et à gauche. Aujourd’hui j’ai obtenu un résultat fonctionnel avec les api que tu as partagé sur ce fil, dans un bloc code de scénario .
Je précise avant tout que mes connaissance en php sont très limitées et donc le code n’est certainement pas optimal
Néanmoins il permet de récupérer :
le nom de la commune à partir du code Isee
début et fin de arrêté
Balaye les différentes zones du département et récupère le niveau d’alerte et la légende associée
Maintenant il ne me reste plus qu’à trouver un moyen pour rechercher dans quelle zone fait parti la commune et n’afficher que celle-ci
$date = date('Y-m-d');
$codeInseeCommune = '69027';
//récupération nom commune
$url = 'https://geo.api.gouv.fr/communes?code='.$codeInseeCommune.'&fields=code,nom,contour&format=geojson&geometry=contour';
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
$nomCommune = $jsonData['features']['0']['properties']['nom'];
}
//récupération info arreté
$url = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/arretes/'.$date.'/commune/'.$codeInseeCommune;
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec()), true);
if(is_array($jsonData)){
$codeInseeDepartement = $jsonData[0]['codeInseeDepartement'];
$dateDebutValiditeArrete = $jsonData[0]['dateDebutValiditeArrete'];
$dateFinValiditeArrete = $jsonData[0]['dateFinValiditeArrete'];
//affichage info arreté
$scenario->setlog('Nom commune : '.$nomCommune);
$scenario->setlog('Code Insee département : '.$codeInseeDepartement);
$scenario->setlog('Début validité arreté : '.$dateDebutValiditeArrete);
$scenario->setlog('Fin validité arreté : '.$dateFinValiditeArrete);
//balayage des zones
foreach ($jsonData[0]['restrictions'] as $value=>$jsonKey) {
$nomNiveau = $jsonKey['nomNiveau'];
$nomZone = $jsonKey['zoneAlerte']['nomZone'];
//recupération info détaillé sur le niveau d'alerte
$url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.strtolower($nomNiveau);
$request_http_legende = new com_http($url_legende);
$request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$legende=json_decode(trim($request_http_legende->exec()), true);
//affichage résultat
$scenario->setlog('');
$scenario->setlog('----------'.strtoupper($nomZone).'----------');
$scenario->setlog('*** Niveau : '.$nomNiveau.' ***');
$scenario->setlog($legende[0]['contenuEditorial']);
}
}
J’ai une erreur, je pense que le site a du mal. https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_crise cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
désolé, je n’ai pas trop le temps de coder en détail en ce moment. C’est bien le cas, le foreach d’elmer69 sert à ça et va en plus chercher le texte complet de commentaire associé aux zones.
ps : si tu utilises les API jeedom pour surcharger la requête CURL et récupérer les textes des arrêtés, je te conseille d’augmenter le timeout de 2 secondes par défaut qui n’est clairement pas assez long et de faire un ->exec(20) ou ->exec(30).
Tu peux …
C’est mon inspecteur de la Dréal qui sera content quand je lui montrerai comment le plan Sécheresse m’impacte psychologiquement jusqu’à avoir un scénario pour connaitre dans quel seuil on se situe et pour combien de temps
Merci
$date = date('Y-m-d');
$codeInseeCommune = '63113';
$eau= '';
$secteur='';
//récupération nom commune
$url = 'https://geo.api.gouv.fr/communes?code='.$codeInseeCommune.'&fields=code,nom,contour&format=geojson&geometry=contour';
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec(20)), true);
if(is_array($jsonData)){
$nomCommune = $jsonData['features']['0']['properties']['nom'];
}
//récupération info arreté
$url = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/arretes/'.$date.'/commune/'.$codeInseeCommune;
$request_http = new com_http($url);
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$jsonData=json_decode(trim($request_http->exec(20)), true);
if(is_array($jsonData)){
$codeInseeDepartement = $jsonData[0]['codeInseeDepartement'];
$dateDebutValiditeArrete = $jsonData[0]['dateDebutValiditeArrete'];
$dateFinValiditeArrete = $jsonData[0]['dateFinValiditeArrete'];
//affichage info arreté
$scenario->setlog('Nom commune : '.$nomCommune);
$scenario->setlog('Code Insee département : '.$codeInseeDepartement);
$scenario->setlog('Début validité arreté : '.$dateDebutValiditeArrete);
$scenario->setlog('Fin validité arreté : '.$dateFinValiditeArrete);
//balayage des zones
foreach ($jsonData[0]['restrictions'] as $value=>$jsonKey) {
$nomNiveau = $jsonKey['nomNiveau'];
$nomZone = $jsonKey['zoneAlerte']['nomZone'];
}
$scenario->setlog('Debug nomNiveau : '.$nomNiveau);
if ($nomNiveau == "Crise"){
$nomNiveau2 = "crise_part";
$url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.$nomNiveau2;
$request_http_legende = new com_http($url_legende);
$request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$legende=json_decode(trim($request_http_legende->exec(20)), true);
$scenario->setlog('*** Niveau : '.$nomNiveau.' ***');
$scenario->setData('Niveau_Propluvia', $nomNiveau);
$scenario->setlog('*** Legende : '.$legende[0]['contenuEditorial'].' ***');
$scenario->setData('Legende_Propluvia', $legende[0]['contenuEditorial']);
} else {
if ($nomNiveau == "Alerte renforcée"){
$nomNiveau2 = "alerte_renforcee_part";
$url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.$nomNiveau2;
$request_http_legende = new com_http($url_legende);
$request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$legende=json_decode(trim($request_http_legende->exec(20)), true);
$scenario->setlog('*** Niveau : '.$nomNiveau.' ***');
$scenario->setData('Niveau_Propluvia', $nomNiveau);
$scenario->setlog('*** Legende : '.$legende[0]['contenuEditorial'].' ***');
$scenario->setData('Legende_Propluvia', $legende[0]['contenuEditorial']);
} else {
if ($nomNiveau == "Alerte"){
$nomNiveau2 = "alerte_part";
$url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.$nomNiveau2;
$request_http_legende = new com_http($url_legende);
$request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$legende=json_decode(trim($request_http_legende->exec(20)), true);
$scenario->setlog('*** Niveau : '.$nomNiveau.' ***');
$scenario->setData('Niveau_Propluvia', $nomNiveau);
$scenario->setlog('*** Legende : '.$legende[0]['contenuEditorial'].' ***');
$scenario->setData('Legende_Propluvia', $legende[0]['contenuEditorial']);
} else {
if ($nomNiveau == "Vigilance"){
$nomNiveau2 = "vigilance_part";
$url_legende = 'https://eau.api.agriculture.gouv.fr/apis/propluvia/editoriaux/?idEditorial=legende_'.$nomNiveau2;
$request_http_legende = new com_http($url_legende);
$request_http_legende->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
$legende=json_decode(trim($request_http_legende->exec(20)), true);
$scenario->setlog('*** Niveau : '.$nomNiveau.' ***');
$scenario->setData('Niveau_Propluvia', $nomNiveau);
$scenario->setlog('*** Legende : '.$legende[0]['contenuEditorial'].' ***');
$scenario->setData('Legende_Propluvia', $legende[0]['contenuEditorial']);
} else {
$scenario->setlog("Erreur de données");
}
}
}
}
}
Je vais continuer à chercher pour choisir entre « Eaux superficielles » et « Eaux souterainnes » mais également particulier vs profesionnel.
En effet, il y a plusieurs types de légendes:
Par contre le site est vraiment lent et merdique et j’ai l’impression que les données ne remontent pas toujours. J’ai donc modifié le code ci-dessus (pour intégrer quand il n’y a pas de données) ou alors j’ai fait une bourde dans mon code, ce qui est fort possible.
Il faudrait aussi que j’arrive à sortir ces éléments là des IF pour soulager les lignes.
$scenario->setlog('*** Niveau : '.$nomNiveau.' ***');
$scenario->setlog('*** Legende : '.$legende[0]['contenuEditorial'].' ***');
Ce sujet m’intéresse énormément et pourquoi pas en faire un plugin peut-être plus générique permettant de récupérer diverses informations d’un même site… A voir si j’ai le temps ces prochaines semaines !
Bonjour @OUARZA
je vois que tu as été prolifique depuis mon post d’hier soir
oui un peu de mal de temps en temps, j’ai vu ça hier soir
pourquoi tu t’es embêté à rajouter du code pour chaque légendes? mon exemple est générique et récupère la légende associé à nom du niveau. Je vais proposer quelque chose pour différencier pro et particulier
Dans le json tu le trouves pour une zone donnée dans « typeZone » qui prend la valeur « SUP » ou bien « SOU »
merci, c’est justement ce sur quoi je vais plancher