Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

Ignore whitespace Rev 297 → Rev 298

/trunk/applications/jrest/scripts/Maintenance.php
New file
0,0 → 1,141
<?php
 
class Maintenance extends JRestService {
/**
* Méthode appelée avec une requête de type GET.
*
*/
function executer($param = array()) {
$debut = microtime(true);
echo "Recherche des stations ayant des coordonnées mais aucune commune associee ...";
$requete = "SELECT * FROM `ods_stations` WHERE os_ce_commune NOT REGEXP '^-?[0-9]+$' AND os_ce_commune NOT IN (SELECT oc_code_insee FROM ods_communes)";
$liste_stations = $this->executerRequete($requete);
echo " ".count($liste_stations)." stations trouvées \n";
echo "Début de la recherche des communes associées \n";
$recherche_infos = new OdsCommune($this->config);
$communes_inconnues = array();
$infos_stations_completees = array();
foreach($liste_stations as $station) {
$infos_code_insee = $this->effectuerRechercheCommune($station['os_latitude'], $station['os_longitude']);
$infos_code_insee['ancien_nom'] = $station['os_ce_commune'];
$infos_code_insee['lat'] = $station['os_latitude'];
$infos_code_insee['lon'] = $station['os_longitude'];
if($infos_code_insee['certitude'] == "ok") {
$infos_stations_completees[$station['os_id_station']] = $infos_code_insee;
} else {
$communes_inconnues[$station['os_id_station']] = $infos_code_insee;
}
}
echo "Fin de la recherche : \n";
echo " - ".count($infos_stations_completees)." stations se verront affecter un code insee \n";
echo " - ".count($communes_inconnues)." stations ne correspondent à aucune commune connue \n";
file_put_contents($this->config["appli"]["chemin_fichiers_temp"]."/communes_inconnues.txt", print_r($communes_inconnues, true));
file_put_contents($this->config["appli"]["chemin_fichiers_temp"]."/communes_localisees.txt", print_r($infos_stations_completees, true));
$fin = microtime(true) - $debut;
echo "La recherche à pris ".$fin." secondes \n";
echo "Modification des stations dont la certitude est ok \n";
$suite = microtime(true);
 
foreach($infos_stations_completees as $id_station => $infos_station) {
$requete = "UPDATE ods_stations SET os_ce_commune = ".$this->proteger($infos_station['codeINSEE'])." WHERE os_id_station = ".$this->proteger($id_station);
$this->executerRequeteSimple($requete);
}
$suite_et_fin = microtime(true) - $suite;
echo "Fin de modification des stations concernées \n";
echo "La mise à jour de la base a pris ".$suite_et_fin." secondes \n";
echo "Les stations non modifiées sont disponibles dans le fichier situé dans ".$this->config["appli"]["chemin_fichiers_temp"]."/communes_inconnues.txt \n";
}
function effectuerRechercheCommune($lat, $lon) {
$url_commune = "http://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon=".urlencode($lon)."&lat=".urlencode($lat);
$infos_commune_json = @file_get_contents($url_commune);
$infos = null;
if($infos_commune_json != null) {
$infos_d = json_decode($infos_commune_json, true);
if(isset($infos_d['codeINSEE']) && trim($infos_d['codeINSEE']) != "") {
$infos_d['source'] = 'osm';
$infos = $infos_d;
$infos['certitude'] = 'ok';
} else {
$infos = $this->rechercherParGoogleMaps($lat, $lon);
}
} else {
$infos = $this->rechercherParGoogleMaps($lat, $lon);
}
return $infos;
}
private function rechercherParGoogleMaps($lat, $lon) {
$url_commune_fallback = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".urlencode($lat).",".urlencode($lon)."&sensor=false";
$infos = $this->decoderRetourGoogleMaps(@file_get_contents($url_commune_fallback));
return $infos;
}
private function decoderRetourGoogleMaps($retour) {
$nom = null;
$code_postal = null;
$retour_infos_tpl = array("certitude" => "bof", "source" => "google", "nom" => "", "codeINSEE" => "");
if($retour != null) {
$retour = json_decode($retour, true);
if(isset($retour['results']) && count($retour['results']) != 0) {
$infos_commune = $retour['results'][0];
foreach($infos_commune['address_components'] as $tranche) {
if(isset($tranche['types'])) {
if(in_array('locality',$tranche['types'])) {
$nom = $tranche['long_name'];
}
if(in_array('postal_code',$tranche['types'])) {
$code_postal = $tranche['long_name'];
}
if($nom != null && $code_postal != null) {
break;
}
}
}
}
}
if($nom != null && $code_postal != null) {
$dpt = substr($code_postal, 0, 2);
$dpt = $dpt."___";
// le retour de google maps est un code postal et pas un code insee
$requete = "SELECT oc_code_insee FROM ods_communes WHERE oc_nom LIKE ".$this->proteger($nom."%")." AND oc_code_insee LIKE ".$this->proteger($dpt);
$resultat = $this->executerRequete($requete);
if(!empty($resultat)) {
$retour_infos[1] = $resultat[0]['oc_code_insee'];
$retour_infos_tpl = array(
"certitude" => "ok",
"source" => "google",
"nom" => $nom,
"codeINSEE" => $resultat[0]['oc_code_insee']);
} else {
$retour_infos_tpl = array(
"certitude" => "douteux",
"source" => "google",
"nom" => $nom,
"codeINSEE" => $code_postal);
}
}
return $retour_infos_tpl;
}
}
?>
/trunk/applications/jrest/cli.php
New file
0,0 → 1,80
<?php
/**
* Script principal d'appel aux script de jrest par ligne de commande.
* Pour le moment ne supporte pas correctement les méthodes ayant des paramètres.
*/
 
/**
* La fonction __autoload() charge dynamiquement les classes trouvées dans le code.
*
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
*
*@param string le nom de la classe appelée.
*@return void le fichier contenant la classe doit être inclu par la fonction.
*/
function __autoload($classe) {
if (class_exists($classe)) {
return null;
}
 
$chemins = array('', 'scripts/', 'lib/', 'services/');
foreach ($chemins as $chemin) {
$chemin = $chemin.$classe.'.php';
if (file_exists($chemin)) {
require_once $chemin;
}
}
}
 
/**
* Configure PHP en fonction des paramètres du fichier de config.
* @param array $config le tableau de paramètres extraits du fichier ini.
*/
function parametrer($config) {
// Réglages de PHP
setlocale(LC_ALL, $config['settings']['locale']);
date_default_timezone_set($config['settings']['fuseauHoraire']);
}
 
try {
if (php_sapi_name() == 'cli') {
if ($_SERVER['argc'] < 2){
$message = "Erreur: vous n'avez pas indiqué le nom du script à appeler.";
throw new Exception($message, E_USER_ERROR);
}
 
// suppression du premier paramètre qui est le nom de ce fichier
array_shift($argv);
 
if ($_SERVER['argc'] == 0){
$message = "Erreur: vous n'avez pas indiqué le nom du script à lancer";
throw new Exception($message, E_USER_ERROR);
}
 
// récupération du nom du script à lancer
$nomScript = array_shift($argv);
 
$params = $argv;
$_SERVER['SERVER_NAME'] = 'localhost';
 
$config = parse_ini_file('jrest.ini.php', TRUE);
parametrer($config);
 
$script = new $nomScript($config);
if (!is_callable(array($script, 'executer'))) {
$message = "Erreur: la méthode 'executer' du script '$nomScript' n'existe pas ou n'est pas accessible";
throw new Exception($message, E_USER_ERROR);
}
$script->executer($params);
} else {
$message = "Erreur: ce fichier est destiné a être appelé en ligne de commande.";
throw new Exception($message, E_USER_ERROR);
}
} catch (Exception $e) {
$tps = date('Y-m-j H:i:s');
$message = $e->getMessage();
$code = $e->getCode();
echo "$tps - $code : $message\n";
}
exit(0);
?>