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

438 lines
14 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
include_once(FWK_PATH.'common/chiffres.php');
include_once(FWK_PATH.'common/dates.php');
include_once(FWK_PATH.'common/ftp.php');
include_once(INCLUDE_PATH.'insee/classMInsee.php');
include_once(INCLUDE_PATH.'partenaires/classMMarques.php');
include_once(FWK_PATH.'mail/sendMail.php');
$strInfoScript='Usage : '.basename($argv[0]). " [OPTIONS] marques1 marques2 ...
Téléchargement et mise à jour de Marques
Options:
-v Mode verbose ou debug
-f Forcer la mise à jour depuis Qualibat
-m Retourne le dernier numéro Qualibat en base
-i Les paramètres sont des numéros de marques
-r Les paramètres sont des Raisons Sociales
-d=SSAAMMJJ Récupères les dépots du SSAAMMJJ
-p Récupère les PDF non encore en base
-b Mise à jour des marques issues des PDF
-s Mise à jour intelligente des siren
-a Découpage des adresses postales non encore découpées
-t Decoupage des fichiers images
(*): Valeur par défaut !
";
$iMarque=new MMarques();
$iInsee=new MInsee();
$modeDebug=$force=$max=$annee=$majNum=$majNom=$majObj=$getPdf=$getMBopi=$majSiren=$majAdresses=$majDate=$majImages=false;
$nbMajSiren=$nbMajSiren2=$nbMajAdr=0;
$tabMarques=array();
$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': define(MODE_VERBOSE,true);
$modeDebug=true;
define('TMIN',1);
define('TMAX',2);
break;
case 'f': $force=true; break;
case 'm': $max=true;
$annee=substr($argv[$i],3); break;
case 'i': $majNum=true; break;
case 'r': $majNom=true; break;
case 'r': $majObj=true; break;
case 'd': $majDate=true; break;
case 'p': $getPdf=true; break;
case 'b': $getMBopi=true; break;
case 's': $majSiren=true; break;
case 'a': $majAdresses=true; break;
case 't': $majImages=true; break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
break;
}
} else {
$tabMarques[]=$argv[$i];
}
}
}
if (!defined('MODE_VERBOSE'))
define('MODE_VERBOSE',false);
/*
if (!defined('TMIN')) define('TMIN',31);
if (!defined('TMAX')) define('TMAX',160);
if (!defined('TMIN')) define('TMIN',21);
if (!defined('TMAX')) define('TMAX',60);
*/
if (!defined('TMIN')) define('TMIN',10);
if (!defined('TMAX')) define('TMAX',20);
$iDb=new WDB('bopi');
if ($getPdf) {
if ($annee) $strAnnee="nomPdf LIKE '%$annee%'";
else $strAnnee='1';
$ret=$iDb->select( 'infos_bopi',
'MAX(nomPdf) as nomPdf',
$strAnnee, false, MYSQL_ASSOC);
$ret=$ret[0];
$pdf=$ret['nomPdf'];
echo date('Y/m/d - H:i:s')." - Dernier BOPI Marques téléchargé : $pdf...".EOL;
$anneeMois=strtr($pdf, array('bopi_marques_'=>'', 'v1'=>'', 'v2'=>'', '.pdf'=>''));
$tabAnneeMois=explode('-', $anneeMois);
$lastAnnee=$tabAnneeMois[0];
$numFin =$tabAnneeMois[1];
//$lastAnnee=2011;
for ($annee=$lastAnnee; $annee<=date('Y'); $annee++) {
if ($annee==date('Y')) {
$numDeb=$numFin;
$numFin=date('W');
//echo 'A'.EOL;
} elseif ($numFin==52 && $annee+1==date('Y')) {
$annee++;
$numDeb=1;
$numFin=date('W');
//echo 'B'.EOL;
} else {
$numDeb=1;
$numFin=52;
//echo 'C'.EOL;
}
/*$annee=2011;
$numDeb=37;
//die($annee.EOL.$lastAnnee.EOL.date('Y').EOL.$numDeb.EOL.$numFin.EOL);*/
for ($num=$numDeb; $num<=$numFin; $num++) {
$taille=$iMarque->getEditionPdf('marques', $annee, $num);
$taille=round($taille/(1024*1024),2);
echo date('Y/m/d - H:i:s')." - BOPI $annee-$num : $taille Mo.".EOL;
}
}
}
if ($getMBopi) {
$ret=$iDb->select( 'infos_bopi_marques',
'DISTINCT numeroMarque',
'dateRecup IS NULL OR nbResults IS NULL OR nbResults<1', false, MYSQL_ASSOC);
foreach ($ret as $i=>$tabTmp)
$tabMarques[]=$tabTmp['numeroMarque'];
shuffle($tabMarques);
$majNum=true;
}
$nb=count($tabMarques);
$nbAcces=$nbCache=0;
foreach ($tabMarques as $i=>$marque) {
echo date('Y/m/d - H:i:s')." - Marque $i/$nb : n°$marque...";
if ($majNum) {
$ret=$iMarque->getMarques(0, $marque);
if (is_array($ret) && count($ret)>0) {
print_r($ret);
$nbCache++;
} else {
$majAdresses=$majSiren=true;
$res=$iMarque->getListeMarques($marque, '', '', '', true);
if ($getMBopi) {
$iDb->update( 'infos_bopi_marques',
array('dateRecup'=>date('Ymd'),
'nbResults'=>$res),
"numeroMarque=$marque", false);
$nbAcces++;
randsleep(TMIN,TMAX);
if (!$modeDebug && date('Hi')*1>1930) {
$nbTot=$nbAcces+$nbCache;
$pct=@round($nbCache/$nbTot*100,2);
@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Pompe Marques - Traitement quotidien", "$nbTot requêtes traitées dont $nbCache en cache ($pct %)");
break;
}
}
}
}
elseif ($majNom)
$iMarque->getListeMarques('', $marque, '', '', true);
elseif ($majObj)
$iMarque->getListeMarques('', '', $marque, '', true);
elseif ($majDate)
$iMarque->getListeMarques('', '', '', WDate::dateT('Ymd','Y-m-d',strtr($marque, array('-'=>'','/'=>'',))), true);
}
if ($majSiren) {
// Identifiants Textes Uniques
$nbSirened=0;
// Tableau RS>Siren
global $tabRsSiren;
$tabRsSiren=array();
$tmp=$iDb->select('marques', 'idTxtUnique, sirenDeposant', "sirenDeposant>0 AND idTxtUnique<>'' GROUP BY idTxtUnique", false, MYSQL_ASSOC);
foreach ($tmp as $nbId=>$tabTmp)
$tabRsSiren[$tabTmp['idTxtUnique']]=$tabTmp['sirenDeposant'];
echo date ('Y/m/d - H:i:s')." - La table 'bopi.marques' idTxt/Siren contient $nbId lignes...".EOL;
$tmp=$iDb->select('marques', 'id, idTxtUnique', "sirenDeposant<100 AND idTxtUnique<>'' AND (detailDeposant<>'') AND sirenValide=0", false, MYSQL_ASSOC);
$nbMaj=count($tmp);
echo date ('Y/m/d - H:i:s')." - Nombre de siren à mettre à jour : $nbMaj".EOL;
$iDb2=new WDb('jo');
foreach ($tmp as $iLot=>$tabTmp) {
$id=$tabTmp['id'];
$idTxtUnique=$tabTmp['idTxtUnique'];
if (isset($tabRsSiren[$idTxtUnique])) {
$siren=$tabRsSiren[$idTxtUnique];
if ($iDb->update('marques', array( 'sirenDeposant'=>$siren,
'sirenValide'=>3), 'id='.$id))
$nbMajSiren++;
echo mysql_error();
$iDb2->delete('bodacc_sirenage', "idTable='marques' AND idAnn=$id");
echo mysql_error();
echo date ('Y/m/d - H:i:s')." - $iLot/$nbMaj : Mise à jour de la marque id=$id avec le siren $siren...".EOL;
//die();
} /*else {
$siren2=isSimilar($idTxtUnique);
if ($siren2<>false) {
if ($iDb->update('marques', array( 'sirenDeposant'=>$siren2,
'sirenValide'=>4), 'id='.$id))
$nbMajSiren2++;
$nbMajSiren++;
echo mysql_error();
$iDb2->delete('bodacc_sirenage', "idTable='marques' AND idAnn=$id");
echo mysql_error();
echo date ('Y/m/d - H:i:s')." - $iLot/$nbMaj : Mise à jour de la marque id=$id avec le siren $siren2...".EOL;
die();
}
//else echo date ('Y/m/d - H:i:s')." - $iLot/$nbMaj : pas de similitudes pour la marque id=$id...".EOL;
}*/
}
echo date ('Y/m/d - H:i:s')." - $nbMajSiren siren ont été mis à jour sur $nbMaj (dont $nbMajSiren2 par approximation).".EOL;
}
if ($majAdresses) {
$tmp=$iDb->select('marques', "id, deposantMarque, SUBSTRING(detailDeposant, LENGTH(deposantMarque)+2, LENGTH(detailDeposant)-LENGTH(deposantMarque)) AS adresse, IF(SUBSTRING(detailDeposant,LENGTH(detailDeposant),1)=')', 'FR', TRIM(REPLACE(SUBSTRING(detailDeposant,LENGTH(detailDeposant)-2,4),')',''))) AS codPays2", "deposant_AdrCP IS NULL OR deposantPays IS NULL", false, MYSQL_ASSOC);
$iDb2=new WDb('bopi');
$nbLots=count($tmp);
foreach ($tmp as $iLot=>$tabTmp) {
$id=$tabTmp['id'];
$adr=trim(preg_replace('/\(SIREN \d\d\d\d\d\d\d\d\d\)/','',$tabTmp['adresse']));
$adr=trim(preg_replace('/, FR$/','',$adr));
$adr=trim(preg_replace('/(\d\d\d\d\d), /','$1 ',$adr));
$adr=trim(preg_replace('/ F-/','',$adr));
$adr=trim(preg_replace('/FORME JURIDIQUE|SOCI.T. ANONYME/i','',$adr));
$tabAdresse=$iInsee->structureVoie($adr);
$tabUpdate=array();
$tabUpdate['deposant_AdrNum']=@$tabAdresse['num'];
$tabUpdate['deposant_AdrIndRep']=@$tabAdresse['indRep'];
$tabUpdate['deposant_AdrTypVoie']=@$tabAdresse['typeVoie'];
$tabUpdate['deposant_AdrLibVoie']=@$tabAdresse['libVoie'];
$tabUpdate['deposant_AdrCP']=@$tabAdresse['cp'];
$tabUpdate['deposant_AdrVille']=@$tabAdresse['ville'];
$tabUpdate['deposant_AdrComp']=@trim($tabAdresse['adrComp0'].' '.$tabAdresse['adrComp1']);
$tabUpdate['deposantPays']=strtoupper($tabTmp['codPays2']);
//print_r($tabAdresse);
echo "$iLot/$nbLots\t$adr\t";
if (!$iDb2->update('marques', $tabUpdate, "id=$id", false))
echo "ERREUR !!!".EOL;
else {
$nbMajAdr++;
echo "ok".EOL;
}
}
echo date ('Y/m/d - H:i:s')." - $nbMajAdr adresses ont été mis à jour sur $nbLots.".EOL;
}
if ($majImages) {
$nbLots=$iDb->select('marques', "id, nomMarque, numeroMarque, dateDepot, YEAR(dateDepot) AS annee, dateDepot*1 AS dateDepotYMD, dateUpdate",
"urlImage<>'' AND fileName=''", false, MYSQL_ASSOC, true);
$iDb2=new WDb('bopi');
$tabExt=array('gif','png','jpg','jpeg','bmp','pcx');
$i=0;
while ($tabTmp=$iDb->fetch(MYSQL_ASSOC)) {
$id=$tabTmp['id'];
$nom=$tabTmp['nomMarque'];
$dateDepot=$tabTmp['dateDepot'];
$dateDepotYMD=$tabTmp['dateDepotYMD'];
$annee=$tabTmp['annee'];
$num=$tabTmp['numeroMarque'];
$dateUpdate=$tabTmp['dateUpdate'];
$filename=DOC_WEB_LOCAL."marques/$num";
$dossierCible=DOC_WEB_LOCAL."marques/$annee/$dateDepotYMD/";
$ext='';
echo "$i/$nbLots : $id, $num, $nom, $dateDepot";
$tabUpdate=array();
foreach ($tabExt as $ext) {
$fileNameLong=$filename.".$ext";
if (file_exists($fileNameLong)) {
$fileName=basename($fileNameLong);
$tabUpdate=array('fileName'=>$fileName, 'dateUpdate'=>$dateUpdate);
break;
}
}
if(count($tabUpdate)>0) {
@mkdir(DOC_WEB_LOCAL."marques/$annee");
@mkdir($dossierCible);
@copy($fileNameLong,$dossierCible.$fileName);
echo ", $fileName";
//@mkdir(DOC_WEB_LOCAL."marques/old");
@move($fileNameLong,DOC_WEB_LOCAL."marques/old/$fileName");
if (!@$iDb2->update('marques', $tabUpdate, "id=$id", false))
echo "\tERREUR SQL !!!".EOL;
else {
$nbMajAdr++;
echo "\tok".EOL;
}
} else {
$res=$iMarque->getListeMarques($num, '', '', '', true);
echo "\tFICHIER INEXISTANT $res !!!".EOL;
//die();
}
$i++;
}
echo date ('Y/m/d - H:i:s')." - $nbMajAdr adresses ont été mis à jour sur $nbLots.".EOL;
}
die();
$repriseIdTxt=false;
if ($repriseIdTxt) {
$iDb2=new WDB('bopi');
$ret=$iDb->select( 'marques',
'id, idTxtUnique, detailDeposant, dateUpdate',
"idTxtUnique IS NULL", false, MYSQL_ASSOC);
foreach ($ret as $i=>$tabInsert) {
$idTxtUnique=trim(strtoupper(preg_replace('/[^a-z0-9]/i', '', $tabInsert['detailDeposant'])));
if ($idTxtUnique<>'')
$tabInsert['idTxtUnique'] = $idTxtUnique;
$id=$tabInsert['id'];
unset($tabInsert['id']);
unset($tabInsert['detailDeposant']);
$iDb2->update( 'marques', $tabInsert, "id=$id", false);
//die($id);
}
}
die();
$referer=$cookie='';
$tDeb=microtime(true);
$page=getUrl($url, $cookie, $post, $referer, false, '', '', 60);
$duree=round(microtime(true)-$tDeb,3);
$body=$page['body'];
die();
if ($max) {
$idQualibat=$iQualibat->getMaxQualibat();
echo date('Y/m/d - H:i:s')." - Dernier id Qualibat : '$idQualibat'.".EOL;
die();
}
echo date('Y/m/d - H:i:s') ." - DEBUT du programme de récupération des entreprises Qualibat.".EOL;
if (count($tabQualibat)==0) {
$partiel=false;
$idQualibat=$iQualibat->getMaxQualibat();
if ($modeDebug) echo date('Y/m/d - H:i:s')." - Dernier id Qualibat : '$idQualibat'.".EOL;
for ($id=1; $id<=$idQualibat; $id++) {
$numQualibatTmp=$id;
$tabQualibat[]=$numQualibatTmp;
}
// Il faudrait rechercher le dernier numéro Orias attribué non encore en base
$iQualibat->force=$force;
while(true) {
$numQualibatTmp++;
echo date('Y/m/d - H:i:s')." - Recherche du dernier numéro Qualibat attribué : ";
if ($iQualibat->getInfosQualibat(0,$numQualibatTmp)) {
if (!$iQualibat->enCache) {
randsleep($tMin/10,$tMax/10);
$nbAcces++;
} else
$nbCache++;
echo "$numQualibatTmp ";
} else {
echo --$numQualibatTmp.' !'.EOL;
break;
}
}
shuffle($tabQualibat);
echo date('Y/m/d - H:i:s')." - Mise à jour de la base Qualibat...".EOL;
} else {
$partiel=true;
echo date('Y/m/d - H:i:s')." - Chargement de numéros Qualibat...".EOL;
}
$nb=count($tabQualibat);
$nbAcces=$nbCache=0;
foreach ($tabQualibat as $i=>$idQualibat) {
echo date('Y/m/d - H:i:s')." - $i/$nb: $idQualibat ... ";
$iQualibat->force=$force;
print_r($iQualibat->getInfosQualibat(0,$idQualibat));
echo date('Y/m/d - H:i:s')." - $i/$nb: $idQualibat ... récupéré ";
if (!$partiel && date('Hi')*1>=1930) {
//if (date('Hi')*1>=2235) {
$nbTot=$nbAcces+$nbCache;
$pct=@round($nbCache/$nbTot*100,2);
@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Pompe Qualibat - Traitement quotidien", "$nbTot requêtes traitées dont $nbCache en cache ($pct %)");
die();
}
if (!$iQualibat->enCache) {
echo "via WWW. Attente...".EOL;
if (!$partiel) randsleep($tMin,$tMax);
$nbAcces++;
} else {
echo "en cache !".EOL;
$nbCache++;
}
}
$nbTot=$nbAcces+$nbCache;
$pct=round($nbCache/$nbTot*100,2);
if (!$partiel) {
@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Pompe Qualibat - Tout est fini !", "FIN des $nbTot requêtes traitées dont $nbCache en cache ($pct %)");
}
echo date('Y/m/d - H:i:s')." - FIN des $nbTot requêtes dont $nbCache en cache ($pct %)".EOL;
function isSimilar($idTxtUnique) {
global $tabRsSiren;
$taille=strlen($idTxtUnique);
if ($taille<40) return false;
foreach ($tabRsSiren as $idTxt=>$siren) {
if (levenshtein($idTxtUnique, $idTxt)<2)
return $siren;
}
return false;
}
die();