batch/1.1/old/getImportExport.php
2013-06-19 08:24:49 +00:00

794 lines
29 KiB
PHP
Raw Blame History

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
$tabDep=array( 'CORSE'=>'',
'AIN'=>'01',
'AISNE'=>'02',
'ALLIER'=>'03',
'ALPES DE HAUTE PROVENCE'=>'04',
'ALPES-MARITIMES'=>'06',
'ARDECHE'=>'07',
'ARDENNES'=>'08',
'ARIEGE'=>'09',
'AUBE'=>'10',
'AUDE'=>'11',
'AVEYRON'=>'12',
'BAS-RHIN'=>'67',
'BOUCHES-DU-RHONE'=>'13',
'CALVADOS'=>'14',
'CANTAL'=>'15',
'CHARENTE'=>'16',
'CHARENTE-MARITIME'=>'17',
'CHER'=>'18',
'CORREZE'=>'19',
'CORSE-DU-SUD'=>'2A',
'COTE-D\'OR'=>'21',
'COTES-D\'ARMOR'=>'22',
'CREUSE'=>'23',
'DEUX-SEVRES'=>'79',
'DORDOGNE'=>'24',
'DOUBS'=>'25',
'DROME'=>'26',
'ESSONNE'=>'91',
'EURE'=>'27',
'EURE-ET-LOIR'=>'28',
'FINISTERE'=>'29',
'GARD'=>'30',
'GERS'=>'32',
'GIRONDE'=>'33',
'GUADELOUPE'=>'9A',
'GUYANE'=>'9C',
'HAUT-RHIN'=>'68',
'HAUTE-CORSE'=>'2B',
'HAUTE-GARONNE'=>'31',
'HAUTE-LOIRE'=>'43',
'HAUTE-MARNE'=>'52',
'HAUTE-SAONE'=>'70',
'HAUTE-SAVOIE'=>'74',
'HAUTE-VIENNE'=>'87',
'HAUTES-ALPES'=>'05',
'HAUTES-PYRENEES'=>'65',
'HAUTS-DE-SEINE'=>'92',
'HERAULT'=>'34',
'ILLE-ET-VILAINE'=>'35',
'INDRE'=>'36',
'INDRE-ET-LOIRE'=>'37',
'ISERE'=>'38',
'JURA'=>'39',
'LA REUNION'=>'9D',
'LANDES'=>'40',
'LOIR-ET-CHER'=>'41',
'LOIRE'=>'42',
'LOIRE-ATLANTIQUE'=>'44',
'LOIRET'=>'45',
'LOT'=>'46',
'LOT-ET-GARONNE'=>'47',
'LOZERE'=>'48',
'MAINE-ET-LOIRE'=>'49',
'MANCHE'=>'50',
'MARNE'=>'51',
'MARTINIQUE'=>'9B',
'MAYENNE'=>'53',
'MAYOTTE'=>'9F',
'MEURTHE-ET-MOSELLE'=>'54',
'MEUSE'=>'55',
'MORBIHAN'=>'56',
'MOSELLE'=>'57',
'NIEVRE'=>'58',
'NORD'=>'59',
'OISE'=>'60',
'ORNE'=>'61',
'PARIS'=>'75',
'PAS-DE-CALAIS'=>'62',
'PUY-DE-DOME'=>'63',
'PYRENEES-ATLANTIQUES'=>'64',
'PYRENEES-ORIENTALES'=>'66',
'RHONE'=>'69',
'SAINT PIERRE ET MIQUELON'=>'9E',
'SAONE-ET-LOIRE'=>'71',
'SARTHE'=>'72',
'SAVOIE'=>'73',
'SEINE-ET-MARNE'=>'77',
'SEINE-MARITIME'=>'76',
'SEINE-SAINT-DENIS'=>'93',
'SOMME'=>'80',
'TARN'=>'81',
'TARN-ET-GARONNE'=>'82',
'TERRITOIRE DE BELFORT'=>'90',
'VAL D\'OISE'=>'95',
'VAL DE MARNE'=>'94',
'VAR'=>'83',
'VAUCLUSE'=>'84',
'VENDEE'=>'85',
'VIENNE'=>'86',
'VOSGES'=>'88',
'YONNE'=>'89',
'YVELINES'=>'78',
);
/*
$tabDep=array( 'CORSE',
'AIN',
'AISNE',
'ALLIER');
*/
function loadCsv($nomFichier, $db, $table='', $create=false, $reload=false) {
$iDb=new WDB($db);
//if ($modeDebug) echo date('Y/m/d - H:i:s')." - Chargement de la table $table...".EOL;
$tabTailles=$tabTypes=$champ=array();
if ($table=='') $table=basename($nomFichier);
$fp = fopen($nomFichier, 'r');
$nbLignes=$nbInsert=0;
while (($data = fgetcsv($fp, 15000, ';')) !== FALSE) {
$nbLignes++;
if ($nbLignes==1) {
// On compte le nombre de colonnes du fichier
$nbColonnes=count($data);
$sql="CREATE TABLE IF NOT EXISTS `$table` (";
for($i=0; $i<$nbColonnes; $i++) {
if ($i==($nbColonnes-1) && trim($data[$i])=='') {
$nbColonnes--;
break;
} else {
$num=0;
while (in_array($data[$i], $champ)) {
$data[$i]=$data[$i].'_'.$i;
}
$sql.='`'.$data[$i].'` LONGTEXT,';
$tabTailles[$i]=0;
$champ[$i]=$data[$i];
}
}
$sql=substr($sql,0,strlen($sql)-1); // Retrait de la derni<6E>re virgule
$sql.=") TYPE=MYISAM COMMENT='".basename($nomFichier)." du ".date('d/m/Y H:i', filemtime($nomFichier))." (".round(filesize($nomFichier)/1024)." ko)';";
if ($create) {
$sql0="DROP TABLE IF EXISTS `$table`;";
$iDb->query($sql0);
if ($iDb->query($sql))
'';//echo date ('Y/m/d - H:i:s')." - Cr<43>ation de la table $table OK...".EOL;
else {
echo $iDb->getLastError().EOL;
die(date ('Y/m/d - H:i:s')." - Impossible de cr<63>er la table $table !".EOL."Requ<EFBFBD>te SQL = $sql".EOL);
}
}
if ($reload) {
$sql="TRUNCATE TABLE `$table`;";
if ($iDb->query($sql))
'';//echo date ('Y/m/d - H:i:s')." - Cr<43>ation de la table $table OK...".EOL;
else {
echo $iDb->getLastError().EOL;
die(date ('Y/m/d - H:i:s')." - Impossible de cr<63>er la table $table !".EOL."Requ<EFBFBD>te SQL = $sql".EOL);
}
}
continue;
}
$tabDataToInsert=array();
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) {
echo date ('Y/m/d - H:i:s') . ' - ERREUR n<>'.mysql_errno()." <20> l'insertion de la ligne n<>$i : ". implode(';', $data) ." !".EOL;
echo date ('Y/m/d - H:i:s') . ' - '.mysql_error() .EOL;
}
unset($tabDataToInsert);
}
fclose($fp);
if ($create) {
// 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);
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))
echo '';//date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") pass<73>e <20> ". $tabTailles[$i] ."...".EOL;
else
echo '';//date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") <20> ". $tabTailles[$i] ." !".EOL;
}
}
}
return $nbLignes;
}
include_once(FWK_PATH.'common/curl.php');
include_once(FWK_PATH.'common/dates.php');
$strInfoScript='Usage : '.basename($argv[0]). " [OPTIONS]
T<EFBFBD>l<EFBFBD>chargement et mise <20> jour d'informations en provenance de Bases Internet.
Options:
-d Mode debug
-t Traiter tous les fichiers <20> mettre <20> jour (*)
-r Traiter les fichiers Risques (prim.net)
-x Traiter les fichiers Imports/Exports des Douanes
-p Traiter les fichiers du Registre fran<61>ais des <20>missions polluantes
-f Traiter le fichier Finess (Etablissements de Sant<6E>)
(*): Valeur par d<>faut !
";
$modeDebug=false;
$tAll=true;
$tRisks=$tXport=$tPollu=$tSante=false;
$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 'd': $modeDebug=true; break;
case 't': $tAll=true; break;
case 'r': $tAll=false; $tRisks=true; break;
case 'x': $tAll=false; $tXport=true; break;
case 'p': $tAll=false; $tPollu=true; break;
case 'f': $tAll=false; $tSante=true; break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
break;
}
} else {
$tabFichier[$j]=$argv[$i];
$j++;
}
}
}
if ($tAll) $tRisks=$tXport=$tPollu=$tSante=true;
echo date('Y/m/d - H:i:s')." - D<>but du script...".EOL;
/**
** Base GASPAR
**/
if ($tSante) {
echo date('Y/m/d - H:i:s')." - Connexion <20> la base Finess.".EOL;
$tabEtab=array(0=>'', 1=>'Etablissement',2=>'Juridique');
$tabSelect=$tabTables=array();
$url='http://finess.sante.gouv.fr/finess/jsp/rechercheSimple.jsp';
$page=getUrl($url);
if ($page['code']<>200) die('Code retour finess diff<66>rent de 200 !'.EOL);
$cookie=$page['header']['Set-Cookie'];
$referer=$url;
$iDb=new WDB('sante');
$i=-1;
foreach ($tabDep as $dep=>$depNum) {
$i++;
/*$etabMax=1;$j=0*/
$etabMax=3;
for($j=1; $j<$etabMax; $j++) {
$etab=$tabEtab[$j];
$publMax=1;
if ($j>0) $table="finess".$i."_$j";
else $table="finess".$i;
for($publ=0; $publ<$publMax; $publ++) {
if ($publ>0) $table.="_$publ";
$fichierCsv="/tmp/$table.csv";
if (!file_exists($fichierCsv) || filesize($fichierCsv)<100 || date('Ymd', filemtime($fichierCsv))<date('Ymd',mktime(0,0,0,date('m'),date('d')-5,date('Y')))) {
// On r<>cup<75>re le fichier distant
echo date('Y/m/d - H:i:s')." - D<>but de la r<>cup<75>ration du CSV pour $dep $etab,$publ...".EOL;
//echo 'Date du fichier = '.date('Ymd', filemtime($fichierCsv)).EOL;
//echo 'Date il y a 5 jours = '.date('Ymd',mktime(0,0,0,date('m'),date('d')-5,date('Y'))).EOL;
$choixLoc2=$dep.'%0D%0A';
if ($dep=='CORSE')
$choixLoc='*+CORSE%2C+%2C+%2C+%23%0D%0A';
else
$choixLoc='*+%2C+'.$dep.'+%5B'.$depNum.'%5D%2C+%2C+%23%0D%0A';
$userAgent='Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
$postData='siren=&siret=&nofiness=&rs=&ongletActuel=1&regionText=&region=&deptriorder=&dep=&commune=&rue=&choixLoc='.$choixLoc.'&chercher=Chercher';
//$url='http://finess.sante.gouv.fr/finess/jsp/actionRechercheSimple.do';//.'?'.$postData;
$url='http://finess.sante.gouv.fr/finess/jsp/actionRechercheAvancee.do';
/* publ[2]
etat[3]
dateDeb[]
chercher[Chercher] */
$post=array('siren'=>'',
'siret'=>'',
'nofiness'=>'',
'rs'=>'',
'ongletActuel'=>1,
'regionText'=>'',
'region'=>'',
'deptriorder'=>'',
'dep'=>'',
'commune'=>'',
'rue'=>'',
//'entite'=>$etab,
'choixLoc'=>$choixLoc,
'chercher'=>'Chercher');
if ($etab<>'') $post['entite']=$etab;
if ($publ>0) $post['publ']=$publ;
$page=getUrl($url, $cookie, $post, $referer);
if (preg_match('/<div class="errors"><p>Liste des erreurs<\/p><ul>(.*)<\/ul><\/div>/Uis', $page['body'], $matches)) {
if ($etab<>'') {
$publMax=4;
continue;
} else {
$etabMax=3;
continue 2;
}
}
if (preg_match('/sultat\(s\) trouv.*\(s\)\:.*<ul class="listeCriteres">.*<li>(.*)<\/li>.*<\/ul>/Uis', $page['body'], $matches))
$nbResultats=trim($matches[1]);
else
$nbResultats=false;
if ($etab=='') $post['entite']=$etab;
/*exec('wget --append-output=/tmp/wget.log --keep-session-cookies --save-headers --output-document=/tmp/wget.htm "'.$url.'"');
$str=file_get_contents('/tmp/wget.htm');
if (!preg_match_all('/Set\-Cookie\: (.*); path=\//Uis', $str, $matches))
echo date('Y/m/d - H:i:s')." - ERREUR : R<>cup<75>ration du CSV impossible (pas de cookies) !".EOL;
else
$cookie=$matches[1][0].'; '.$matches[1][1];*/
randsleep(7,21);
$referer=$url;
$tdeb=microtime(1);
$url='http://finess.sante.gouv.fr/finess/jsp/liste.do?order=CSVEQUIP&noFiness=&export=complet';
$page=getUrl($url, $cookie, '', $referer);
$tfin=microtime(1);
$duree=round($tfin-$tdeb,1);
$debit=round((strlen($page['body'])/($tfin-$tdeb))/1024,1);
/*print_r($page);
die();*/
$strCsv=preg_replace('/^=/m', '', str_replace(';=',';',$page['body']));
$strCsv=strtr($strCsv,array('SIREN'=>'SIRET'));
//if (mb_detect_encoding($strCsv, 'UTF-8', true))
// $strCsv=utf8_decode($strCsv);
file_put_contents($fichierCsv, $strCsv);
echo date('Y/m/d - H:i:s')." - Fin de la r<>cup<75>ration du CSV pour $dep $etab,$publ en $duree s ($nbResultats lignes, $debit Ko/s).".EOL;
} else
echo date('Y/m/d - H:i:s')." - R<>cup<75>ration du CSV depuis le cache pour $dep $etab,$publ.".EOL;
$tabTmp=file("/tmp/$table.csv");
$nbLignesCache=count($tabTmp)-1;
$tabTmp=$iDb->select($table, 'COUNT(*) AS nb', '1', false);
$nbLignesTable=$tabTmp[0]['nb'];
if (mysql_errno()>0 || $nbLignesTable<$nbLignesCache) {
$recreate=true;
$tdeb=microtime(1);
$nbInsert=@loadCsv("/tmp/$table.csv",'sante',$table,$recreate);
$duree=round(microtime(1)-$tdeb,1);
echo date('Y/m/d - H:i:s')." - Chargement du d<>partement $dep $etab : $nbInsert lignes en $duree s ($table)".EOL;
// die("/tmp/$table.csv".EOL);
} else
echo date('Y/m/d - H:i:s')." - Pas de rechargement du d<>partement $dep $etab : $nbLignesTable lignes d<>j<EFBFBD> en base $table.".EOL;
$tabSelect[]="SELECT NULL AS id, `Num<75>ro FINESS`, REPLACE(`SIRET`,' ','') AS SIRET, APE, `Raison sociale`, `Compl<70>ment distribution`, `Adresse`, `Lieudit/BP`, `Code postal`, `Libelle routage`, `Tel`, `Fax`, `Date ouvert`, `Code categorie`, `Lib categorie`, `Code statut`, `Lib statut`, `Code tarif`, `Lib tarif`, `Code PSPH`, `Lib PSPH`, `FINESS juridique`, 0 AS recupTel FROM `$table`";
$tabTables[]=$table;
}
}
}
// On supprime l'ancienne table
echo date('Y/m/d - H:i:s')." - Mise en place de la nouvelle table Finess...".EOL;
$tabErreur=array();
$sql="DROP TABLE IF EXISTS `finess_old`;";
if (!$iDb->query($sql)) $tabErreur[]='DROP TABLE finess_old '.mysql_errno().':'.mysql_error();
// On historise la table pr<70>c<EFBFBD>dente
$sql="RENAME TABLE `finess` TO `finess_old`;";
if (!$iDb->query($sql)) $tabErreur[]='RENAME TABLE '.mysql_errno().':'.mysql_error();
// Cr<43>ation de la nouvelle table
$sql="CREATE TABLE `finess` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Num<75>ro FINESS` char(9) NOT NULL,
`SIRET` varchar(14) DEFAULT NULL,
`APE` varchar(5) DEFAULT NULL,
`Raison sociale` varchar(38) DEFAULT NULL,
`Compl<70>ment distribution` varchar(32) DEFAULT NULL,
`Adresse` varchar(36) DEFAULT NULL,
`Lieudit/BP` varchar(32) DEFAULT NULL,
`Code postal` bigint(5) unsigned zerofill NOT NULL,
`Libelle routage` varchar(26) DEFAULT NULL,
`Tel` varchar(15) DEFAULT NULL,
`Fax` varchar(14) DEFAULT NULL,
`Date ouvert` varchar(17) DEFAULT NULL,
`Code categorie` smallint(3) unsigned zerofill DEFAULT NULL,
`Lib categorie` varchar(59) DEFAULT NULL,
`Code statut` bigint(2) DEFAULT NULL,
`Lib statut` varchar(59) DEFAULT NULL,
`Code tarif` tinyint(2) unsigned DEFAULT NULL,
`Lib tarif` varchar(59) DEFAULT NULL,
`Code PSPH` enum('','0','1','2','3','4','5','6','7','8','9') NOT NULL COMMENT 'Participation au Service Public Hospitalier (0:non, 1:Etab.public de sant<6E>, 2:PSPH int<6E>gration, 3:PSPH concession, 4:PSPH association, 5:Assoc 1901 act. Psy, 9:ind<6E>termin<69>)',
`Lib PSPH` varchar(29) DEFAULT NULL,
`FINESS juridique` char(9) DEFAULT NULL,
`recupTel` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `idxFiness` (`Num<75>ro FINESS`),
KEY `idxSiret` (`SIRET`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Ficher National des Etablissements Sanitaires et Sociaux';";
if (!$iDb->query($sql)) $tabErreur[]='CREATE TABLE '.mysql_errno().':'.mysql_error();
// Ecritures des lignes
$sql='INSERT INTO finess '.implode(EOL.' UNION ', $tabSelect).';';
if (!$iDb->query($sql)) $tabErreur[]='INSERT INTO '.mysql_errno().':'.mysql_error().EOL.$sql;
if (count($tabErreur)==0) {
foreach ($tabTables as $table) {
$sql="DROP TABLE IF EXISTS `$table`;";
if (!$iDb->query($sql)) $tabErreur[]="DROP TABLE $table ".mysql_errno().':'.mysql_error();
}
}
if (count($tabErreur)>0) print_r($tabErreur);
else
echo date('Y/m/d - H:i:s')." - Fin de la mise en place de la table Finess...".EOL;
}
/**
** Base GASPAR
**/
if ($tRisks) {
$iDb=new WDB('pollutions');
echo date('Y/m/d - H:i:s')." - T<>l<EFBFBD>chargement de la base GASPAR (risques par commune) sur prim.net.".EOL;
$tabRegions=array( '01','02','03','04','11','21','22','23','24','25','26','31','41',
'42','43','52','53','54','72','73','74','82','83','91','93','94');
$tabRisques=array( 1=>array( 'lib'=>'Information Pr<50>ventive',
'table'=>'prim_Prevent',
'struc'=>array('codeInsee','libCommune','population','datePAC','dateDICRIM','datePCS'),
),
2=>array( 'lib'=>'Atlas de Zone Inondable',
'table'=>'prim_Inond',
'struc'=>array('codeInsee','libCommune','alea','nomAZI','dateDiffusion'),
),
3=>array( 'lib'=>'Risques',
'table'=>'prim_Risques',
'struc'=>array('codeInsee','libCommune','risque'),
),
4=>array( 'lib'=>'Plan de pr<70>vention',
'table'=>'prim_PlansPrev',
'struc'=>array('codeInsee','libCommune','plan','datePrescrit','dateEnquete','dateApprouve','bassin'),
),
5=>array( 'lib'=>'Arr<72>t<EFBFBD>s de catastrophes naturelles',
'table'=>'prim_Arrets',
'struc'=>array('codeInsee','libCommune','risque','dateDeb','dateFin','dateArret','dateJO'),
),
);
for($i=1;$i<6;$i++) {
$content[$i]='';
echo date('Y/m/d - H:i:s')." - D<>but de r<>cup<75>ration des fichiers '".$tabRisques[$i]['lib']."'".EOL;
foreach ($tabRegions as $region) {
// $url="http://www.prim.net/professionnel/procedures_regl/export_gaspar/reg_C$i"."_$region.txt";
$url="http://macommune.prim.net/gaspar/export_gaspar/reg_C$i"."_$region.txt";
$cookie=$post='';
$referer='http://macommune.prim.net/gaspar/export_gaspar/download.htm';
if ($modeDebug) echo date('Y/m/d - H:i:s')." - D<>but de r<>cup<75>ration du fichier reg_C$i"."_$region.txt".EOL;
$page=getUrl($url, $cookie, $post, $referer);
if ($page['code']==200) {
$content[$i].=$page['body'];
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Fin de r<>cup<75>ration du fichier reg_C$i"."_$region.txt".EOL;
//sleep(2);
} else
echo date('Y/m/d - H:i:s')." - Erreur lors de la r<>cup<75>ration du fichier reg_C$i"."_$region.txt".EOL;
/*
Information pr<70>ventive pour la r<>gion Guadeloupe
INSEE;Commune;Population;Date transmission PAC;Date arr<72>t<EFBFBD> DICRIM;Date notification PCS
*/
}
echo date('Y/m/d - H:i:s')." - Fin de r<>cup<75>ration des fichiers '".$tabRisques[$i]['lib']."'".EOL;
file_put_contents("/tmp/risques$i.csv", $content[$i]);
// Lecture et chargement du fichier
$fp = fopen("/tmp/risques$i.csv", 'r');
$nbRows=$nbInsert=$nbInsertErr=0;
while (($data = fgetcsv($fp, 5000, ';')) !== FALSE) {
$nbRows++;
if ($data[0]*1>0) {
$tabInsert=array();
for($j=0; $j<count($tabRisques[$i]['struc']); $j++) {
if (substr($tabRisques[$i]['struc'][$j],0,4)=='date')
@$data2=Wdate::dateT('d/m/Y','Y-m-d', $data[$j]);
else
$data2=$data[$j];
$tabInsert=array_merge($tabInsert, array($tabRisques[$i]['struc'][$j]=>$data2));
}
if ($iDb->insert($tabRisques[$i]['table'], $tabInsert))
$nbInsert++;
else
$nbInsertErr++;
}
}
fclose($fp);
echo date('Y/m/d - H:i:s')." - Chargement de la table '".$tabRisques[$i]['table']."' : $nbRows lignes dont $nbInsert ins<6E>r<EFBFBD>es / $nbInsertErr erreur(s).".EOL;
}
//die();
}
/**
** Registre fran<61>ais des <20>missions polluantes.
**/
if ($tPollu) {
echo date('Y/m/d - H:i:s')." - Demande de r<>cup<75>ration du fichier du Registre fran<61>ais des <20>missions polluantes.".EOL;
$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<75>ration du fichier des <20>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('/tmp/Base_iREP.zip', 'w');
fwrite($fp, $zip);
fclose($fp);
echo date('Y/m/d - H:i:s')." - Fichier du Registre fran<61>ais des <20>missions polluantes t<>l<EFBFBD>charg<72>.".EOL;
$zip = new ZipArchive;
if ($zip->open('/tmp/Base_iREP.zip') === TRUE) {
$tabFichiersConnus=array( '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',
'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('/tmp/'.$tabIndex['name']))." (".round(filesize('/tmp/'.$tabIndex['name'])/1024,1)." ko)".EOL;
echo date('Y/m/d - H:i:s')." - Fichier dans l'archive t<>l<EFBFBD>charg<72>e datant du ".date('d/m/Y H:i:s', $tabIndex['mtime'])." (".round($tabIndex['size']/1024,1)." ko)".EOL;
}
}
$zip->extractTo('/tmp/');
$zip->close();
if ($modeDebug) echo date('Y/m/d - H:i:s')." - D<>compression des $i fichiers du Registre fran<61>ais des <20>missions polluantes OK.".EOL;
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('/tmp/'.$nomFichier, 'r');
$nbLignes=$nbInsert=0;
while (($data = fgetcsv($fp, 5000, ';')) !== FALSE) {
$nbLignes++;
if ($nbLignes==1)
{ // L'ent<6E>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<6E>re virgule
$sql.=") TYPE = MYISAM COMMENT = '".basename($nomFichier)." du ".date('d/m/Y H:i', $tabTime[$idxF])." (".round($tabSize[$idxF]/1024)." ko)'";
if ($iDb->query($sql))
echo date ('Y/m/d - H:i:s')." - Cr<43>ation de la table $table OK...".EOL;
else {
echo $iDb->getLastError().EOL;
die(date ('Y/m/d - H:i:s')." - Impossible de cr<63>er la table $table !".EOL."Requ<EFBFBD>te SQL = $sql".EOL);
}
flush();
continue;
}
$tabDataToInsert=array();
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) {
echo date ('Y/m/d - H:i:s') . " - ERREUR <20> l'insertion de la ligne n<>$i : ". implode(';', $data) ." !".EOL;
flush();
}
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);
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))
echo date ('Y/m/d - H:i:s')." - Taille du champ $i (". $champ[$i] .") pass<73>e <20> ". $tabTailles[$i] ."...".EOL;
else
echo date ('Y/m/d - H:i:s')." - Impossible de modifier la taille du champ $i (". $champ[$i] .") <20> ". $tabTailles[$i] ." !".EOL;
flush();
}
}
} else
echo date ('Y/m/d - H:i:s') . " - Fichier $nomFichier non charg<72> (1) !".EOL;
} else
echo date ('Y/m/d - H:i:s') . " - Fichier $nomFichier non charg<72> (2) !".EOL;
}
} else {
echo date('Y/m/d - H:i:s')." - ERREUR : Aucune archive d<>tect<63> dans :".EOL.print_r($page['header']).EOL;
}
}
/**
** Fichiers Classement Imports/Exports
**
** @todo V<>rifier les changements du flux RSS http://lekiosque.finances.gouv.fr/APPCHIFFRE/rss.xml
**
**/
if ($tXport) {
$url='http://lekiosque.finances.gouv.fr/Appchiffre/entreprise/Trans_palm.asp';
$referer='';
$tabCsv=array();
$tabFlux=array('export','import');
$tabRege=array( 'R01', // Nord - Pas-de-Calais
'R02', // Picardie
'R03', // Ile-de-France
'R04', // Centre
'R05', // Haute-Normandie
'R06', // Basse-Normandie
'R07', // Bretagne
'R08', // Pays de la Loire
'R09', // Poitou-Charentes
'R10', // Limousin
'R11', // Aquitaine
'R12', // Midi-Pyr<79>n<EFBFBD>es
'R13', // Champagne-Ardenne
'R14', // Lorraine
'R15', // Alsace
'R16', // Franche-Comt<6D>
'R17', // Bourgogne
'R18', // Auvergne
'R19', // Rh<52>ne-Alpes
'R20', // Languedoc-Roussillon
'R21', // Provence-Alpes-C<>te-d'Azur
'R22', // Corse
'R24', // Les d<>partements d'Outre-mer
);
/*
de 1 <20> 9 salari<72>s : micro-entreprises
de 10 <20> 49 salari<72>s : petites entreprises
de 50 <20> 249 salari<72>s : moyennes entreprises
Ces trois premi<6D>res cat<61>gories constituent les Micro entreprises et les PME.
250 et plus : grandes entreprises
Parfois la cat<61>gorie est inconnue car l'information sur la tranche d'effectif salari<72> n'est pas disponible.
*/
$iDb=new WDB();
$page=getUrl($url, '', '', $referer);
$body=$page['body'];
$cookie=$page['header']['Set-Cookie'];
$referer=$url;
if (preg_match('/Transfert du palmar<61>s national et des palmar<61>s r<>gionaux(?:.*)ann<6E>e(.*)</Uis', $page['body'], $matches)) {
$annee=trim($matches[1]);
echo (date('Y/m/d - H:i:s')." - Le palmar<61>s national Import/Export date de $annee.".EOL);
} else
die(date('Y/m/d - H:i:s')." - ERREUR : Impossible de d<>tecter l'ann<6E>e du palmar<61>s national Import/Export !".EOL);
$url='http://lekiosque.finances.gouv.fr/Appchiffre/entreprise/upload.asp';
foreach ($tabFlux as $flux) {
$importExport=strtoupper(substr($flux,0,1));
foreach ($tabRege as $rege) {
$post=array('fluc'=>$flux,
'x'=>40,
'y'=>10,
'rege'=>$rege,
);
randsleep(7,21);
$page=getUrl($url, $cookie, $post, $referer);
$zip=preg_replace('/(^HTTP.*\r\nPK)/Us','PK', $page['body']);
if (preg_match('/^HTTP.*filename=(.*)\r\n/Us', $page['body'], $matches)) {
$nomFichier=$matches[1];
$fp=fopen('/tmp/importExport.zip', 'w');
fwrite($fp, $zip);
fclose($fp);
$zip = new ZipArchive;
if ($zip->open('/tmp/importExport.zip') === TRUE) {
$zip->extractTo('/tmp/');
$zip->close();
echo date('Y/m/d - H:i:s')." - D<>compression du fichier $nomFichier OK.".EOL;
$nomFichierCsv=str_replace('.zip','.csv',$nomFichier);
$fp = fopen('/tmp/'.$nomFichierCsv, 'r');
$nbRows=$nbInsert=0;
while (($data = fgetcsv($fp, 5000, ';')) !== FALSE) {
$nbRows++;
if ($data[0]*1>0) {
$tabInsert=array( 'importExport'=>$importExport,
'annee'=>$annee,
'siren'=>$data[0],
'raisonSociale'=>$data[1],
'naf'=>$data[2],
'categorie'=>$data[3],
'adresse'=>$data[4],
'rangNational'=>$data[5],
'deptSiege'=>$data[6],
);
$iDb->insert('importExport', $tabInsert);
$nbInsert++;
}
}
fclose($fp);
echo date('Y/m/d - H:i:s')." - Fichier $nomFichierCsv contenant $nbRows lignes dont $nbInsert ins<6E>r<EFBFBD>es.".EOL;
} else {
echo date('Y/m/d - H:i:s')." - ERREUR lors de la d<>compression du fichier $nomFichier !".EOL;
die();
}
} else {
echo date('Y/m/d - H:i:s')." - ERREUR : Aucune archive d<>tect<63> dans :".EOL.print_r($page['header']).EOL;
}
}
}
}
echo date('Y/m/d - H:i:s')." - Fin du script...".EOL;
?>