batch/bin/getPollution.php
2015-09-04 12:56:16 +00:00

247 lines
10 KiB
PHP

#!/usr/bin/php
<?php
error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE ^ E_STRICT);
include_once(__DIR__.'/../includes/auto_prepend.php');
include_once(FWK_PATH.'common/curl.php');
include_once(FWK_PATH.'common/dates.php');
include_once(FWK_PATH.'mail/sendMail.php');
$strInfoScript='Usage : '.basename($argv[0]). " [OPTIONS]
Téléchargement et mise à jour d'informations en provenance de Bases Internet.
Options:
-v Mode debug
(*): Valeur par défaut !
";
$modeDebug=false;
$strMailInfo='';
$argv=$_SERVER['argv'];
if ($_SERVER['argc']>1)
{
for ($i=1; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 'v': $modeDebug=true; break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
break;
}
} else {
$tabFichier[$j]=$argv[$i];
$j++;
}
}
}
/**
** Registre français des émissions polluantes.
**/
$message=date('Y/m/d - H:i:s')." - Demande de récupération du fichier du Registre français des émissions polluantes.".EOL;
echo $message;
$strMailInfo.=$message;
$fichierZipIREP=REP_TEMP.'Base_iREP.zip';
if (!file_exists($fichierZipIREP) || date('Ymd',filemtime($fichierZipIREP))<>date('Ymd')) {
$url='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/XML/dump.php';
$cookie=$post='';
$referer='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/';
$page=getUrl($url, $cookie, $post, $referer);
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Début de récupération du fichier des émissions polluantes...".EOL;
$url='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/downloads/Base_iREP.zip';
$referer='http://www.pollutionsindustrielles.ecologie.gouv.fr/IREP/generic.php?strType=download';
$page=getUrl($url, $cookie, $post, $referer);
$zip=preg_replace('/(^HTTP.*\r\nPK)/Us','PK', $page['body']);
$fp=fopen($fichierZipIREP, 'w');
fwrite($fp, $zip);
fclose($fp);
$message=date('Y/m/d - H:i:s')." - Fichier du Registre français des émissions polluantes téléchargé.".EOL;
} else {
$message=date('Y/m/d - H:i:s')." - Fichier du Registre français des émissions polluantes lu dans le cache.".EOL;
}
echo $message;
$strMailInfo.=$message;
$zip = new ZipArchive;
if ($zip->open($fichierZipIREP) === TRUE) {
$tabFichiersConnus=array( 'emissions.csv'=> 'emissions',
'etablissements.csv'=> 'etablissements',
'Prelevements.csv'=> 'Prelevements',
'Prod_dechets_dangereux.csv'=> 'Prod_dechets_dangereux',
'Prod_dechets_non_dangereux.csv'=> 'Prod_dechets_non_dangereux',
'Trait_dechets_dangereux.csv'=> 'Trait_dechets_dangereux',
'Trait_dechets_non_dangereux.csv'=> 'Trait_dechets_non_dangereux',
/*
'activite_gidic_etablissements.csv'=> 'activite_gidic_etablissements',
'activite_ippc_etab.csv'=> 'activite_ippc_etab',
'caracteristique_du_dechet.csv'=> 'caracteristique_du_dechet',
'dechets.csv'=> 'dechets',
'dechets_non_dangereux.csv'=> 'dechets_non_dangereux',
'emission.csv'=> 'emission',
'etablissements.csv'=> 'etablissements',
'MCD_iREP.pdf'=> '',
'polluants_liste.csv'=> 'polluants_liste',
'prelevements_en_eau.csv'=> 'prelevements_en_eau',
'proddechetnondang.csv'=> 'proddechetnondang',
'projections.csv'=> 'projections',
'rejets_etablissements.csv'=> 'rejets_etablissements',
'traitedechetdang.csv'=> 'traitedechetdang',
'traitedechetnondang.csv'=> 'traitedechetnondang',
*/
);
$iDb=new WDB('pollutions');
$tabFichiers=$tabSize=$tabTime=array();
for ($i=0; $i<$zip->numFiles;$i++) {
$tabIndex=$zip->statIndex($i);
$tabFichiers[]=$tabIndex['name'];
$tabSize[]=$tabIndex['size'];
$tabTime[]=$tabIndex['mtime'];
// print_r($tabIndex);die();
if ($modeDebug){
echo date('Y/m/d - H:i:s')." - Fichier ".basename($tabIndex['name'])."en cache datant du ".date('d/m/Y H:i:s', filectime(REP_TEMP.$tabIndex['name']))." (".round(filesize(REP_TEMP.$tabIndex['name'])/1024,1)." ko)".EOL;
echo date('Y/m/d - H:i:s')." - Fichier dans l'archive téléchargée datant du ".date('d/m/Y H:i:s', $tabIndex['mtime'])." (".round($tabIndex['size']/1024,1)." ko)".EOL;
}
}
$zip->extractTo(REP_TEMP);
$zip->close();
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Décompression des $i fichiers du Registre français des émissions polluantes OK.".EOL;
if (count($tabFichiersConnus)<>$i) {
$message=date('Y/m/d - H:i:s')." - ERREUR - Nombre de fichiers décompressés : $i fichiers dans $fichierZipIREP contre ".$tabFichiersConnus.' attendus !'.EOL;
echo $message;
$strMailInfo.=$message;
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du chargement des fichiers Pollutions (ERREUR)", $strMailInfo);
die();
}
foreach ($tabFichiers as $idxF=>$nomFichier) {
if (in_array(basename(str_replace('.csv', '', $nomFichier)),$tabFichiersConnus)) {
$table=str_replace('.csv', '', $tabFichiersConnus[basename($nomFichier)]);
if ($table<>'') {
$table='iREP_'.$table;
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Chargement de la table $table...".EOL;
$tabTailles=$tabTypes=array();
$fp = fopen(REP_TEMP.$nomFichier, 'r');
$nbLignes=$nbInsert=0;
while (($data = fgetcsv($fp, 5000, ';')) !== FALSE) {
$nbLignes++;
if ($nbLignes==1)
{ // L'entête contient la structure du fichier
// On compte le nombre de colonnes du fichier
$nbColonnes=count($data);
$sql="CREATE TABLE IF NOT EXISTS `$table` (";
for($i=0; $i<$nbColonnes; $i++) {
$sql.='`'.$data[$i].'` LONGTEXT,';
$tabTailles[$i]=0;
$champ[$i]=$data[$i];
}
$sql=substr($sql,0,strlen($sql)-1); // Retrait de la dernière virgule
$sql.=") ENGINE=MYISAM COMMENT = '".basename($nomFichier)." du ".date('d/m/Y H:i', $tabTime[$idxF])." (".round($tabSize[$idxF]/1024)." ko)'";
if ($iDb->query($sql)) {
$message=date ('Y/m/d - H:i:s')." - Création de la table $table OK...".EOL;
echo $message;
$strMailInfo.=$message;
} else {
$message=$iDb->getLastError().EOL;
echo $message;
$strMailInfo.=$message;
$message=date ('Y/m/d - H:i:s')." - Impossible de créer la table $table !".EOL."Requête SQL = $sql".EOL;
echo $message;
$strMailInfo.=$message;
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', "Fin du chargement des fichiers Pollutions (ERREUR)", $strMailInfo);
die();
}
continue;
}
$tabDataToInsert=array();
while (count($data)<$nbColonnes) {
// En cat de saut de ligne mal géré par la source
$data = array_merge($data,fgetcsv($fp, 5000, ';'));
}
for($i=0; $i<$nbColonnes; $i++) {
$tabDataToInsert=array_merge($tabDataToInsert, array($champ[$i]=>$data[$i]));
if (strlen($data[$i])>$tabTailles[$i])
$tabTailles[$i]=strlen($data[$i]);
if (@gettype($data[$i])=='string') {
if (is_numeric($data[$i])) {
if (round($data[$i]*1)<>($data[$i]*1))
$tabTypes[$i][]='double';
else
$tabTypes[$i][]='integer';
} else
$tabTypes[$i][]='string';
} else $tabTypes[$i][]=@gettype($data[$i]);
}
$ret=$iDb->insert($table, $tabDataToInsert);
if ($ret!=1) {
$message=date ('Y/m/d - H:i:s') . " - ERREUR SQL sur la table '$table', SQL no ".mysql_errno().' : '.mysql_error().EOL;
echo $message;
$strMailInfo.=$message;
$message=date ('Y/m/d - H:i:s') . " - ERREUR à l'insertion de la ligne n°$i : ". implode(';', $data) ." !".EOL;
echo $message;
$strMailInfo.=$message;
$message=print_r($tabDataToInsert,1);
echo $message;
$strMailInfo.=$message;
}
unset($tabDataToInsert);
}
fclose($fp);
// On réduit la taille des colonnes au max de chaque champ
for($i=0; $i<$nbColonnes; $i++) {
if ($tabTailles[$i]<256) {
$tabTmp=array_unique($tabTypes[$i]);
print_r($tabTmp);
$strType="VARCHAR(".$tabTailles[$i].")";
if (count($tabTmp)==1) {
reset($tabTmp);
switch (current($tabTmp)) {
case 'boolean': $strType='BOOL'; break;
case 'integer': $strType="BIGINT(".$tabTailles[$i].")"; break;
case 'double': $strType='DOUBLE'; break;
default: $strType="VARCHAR(".$tabTailles[$i].")";break;
}
}
$sql="ALTER TABLE `$table` CHANGE `".$champ[$i]."` `".$champ[$i]."` $strType NULL DEFAULT NULL ";
if ($iDb->query($sql)) {
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") passée à ". $tabTailles[$i] ."...".EOL;
} else {
$message=date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") à ". $tabTailles[$i] ." !".EOL;
echo $message;
$strMailInfo.=$message;
}
}
}
} else {
$message=date ('Y/m/d - H:i:s') . " - Fichier $nomFichier non chargé (1) !".EOL;
echo $message;
$strMailInfo.=$message;
}
} else {
$message=date ('Y/m/d - H:i:s') . " - Fichier $nomFichier non chargé (2) !".EOL;
echo $message;
$strMailInfo.=$message;
}
}
} else {
$message=date('Y/m/d - H:i:s')." - ERREUR : Aucune archive détecté dans :".EOL.print_r($page['header']).EOL;
echo $message;
$strMailInfo.=$message;
}
$message=date ('Y/m/d - H:i:s') . " - Fin de chargement du Registre français des émissions polluantes.".EOL;
echo $message;
$strMailInfo.=$message;
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com,suivi@scores-decisions.com', "Fin du chargement des fichiers Pollutions", $strMailInfo);
echo date('Y/m/d - H:i:s')." - Fin du script...".EOL;
?>