794 lines
29 KiB
PHP
794 lines
29 KiB
PHP
#!/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®ionText=®ion=&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;
|
||
|
||
?>
|