296 lines
12 KiB
PHP
296 lines
12 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(INCLUDE_PATH.'bodacc/classMBodacc.php');
|
|
include_once(INCLUDE_PATH.'insee/classMInsee.php');
|
|
include_once(INCLUDE_PATH.'partenaires/classMBourse.php');
|
|
include_once(FWK_PATH.'mail/sendMail.php');
|
|
|
|
function getNextDate($dateCour, $nbJours=7) {
|
|
$nextDate=date('Ymd', mktime(0, 0, 0, WDate::dateT('Ymd','m', $dateCour), WDate::dateT('Ymd','d', $dateCour)+$nbJours, WDate::dateT('Ymd','Y', $dateCour)));
|
|
return $nextDate;
|
|
}
|
|
|
|
function getInfosAnnonceBalo($annonceHtml) {
|
|
$tabAnnBalo=array();
|
|
//Société : <b>ARGAN</b><br/>
|
|
$tabAnnBalo['Societe_Nom']=trim(str_replace(chr(160),' ',html_entity_decode(@getTextInHtml($annonceHtml,'Société : <b>', '<b>', '</b>'))));
|
|
//if ($tabAnnBalo['Societe_Nom']=='')
|
|
// $tabAnnBalo['Societe_Nom']=str_replace(chr(160),' ',html_entity_decode(@getTextInHtml($annonceHtml,'<p>BOAMF: <b>', '<b>', '</b>')));
|
|
//<p>RCS : <b>393430608 </b>
|
|
$tabAnnBalo['Societe_Rcs']=trim(@getTextInHtml($annonceHtml, 'RCS : <b>', '<b>', '</b>'));
|
|
// Catégorie : <b><i> BULLETIN OFFICIEL DE L'AMF </i></b><br/>
|
|
$tabAnnBalo['Categorie']=trim(str_replace(chr(160), ' ', html_entity_decode(@getTextInHtml($annonceHtml, 'Catégorie : <b><i>', '<i>', '</i>'))));
|
|
// N° d'affaire : <b>0712845</b><br />
|
|
$tabAnnBalo['Num_Affaire']=@getTextInHtml($annonceHtml, 'N° d\'affaire : <b>', '<b>', '</b>');
|
|
// Paru le : <b>08-08-2007</b> (Parution n°<b>95</b>) <br />
|
|
$tmp=@getTextInHtml($annonceHtml, 'Paru le : <b>', '<b>', '</b>');
|
|
$tabAnnBalo['Date_Parution']=substr($tmp,6,4).'-'.substr($tmp,3,2).'-'.substr($tmp,0,2);
|
|
// (Parution n°<b>95</b>) <br />
|
|
$tabAnnBalo['Num_Parution']=@getTextInHtml($annonceHtml, '(Parution n°<b>', '<b>', '</b>');
|
|
/*<p>Annonce au format
|
|
<a class="grisbleu" href="http://balo.journal-officiel.gouv.fr/html/2007/0808/200708080712646.htm" target="_blank"><b>HTML</b></a> ou
|
|
<a class="grisbleu" href="https://balo.journal-officiel.gouv.fr/pdf/2007/0808/200708080712646.pdf" target="_blank"><b>PDF</b></a></p>*/
|
|
$tabAnnBalo['Url_Annonce_Html']=str_replace(chr(160), ' ', html_entity_decode(@getTextInHtml($annonceHtml, '<p>Annonce au format', 'href="', '" target="_blank"><b>HTML</b></a>')));
|
|
$tabAnnBalo['Url_Annonce_Pdf']=str_replace('https://', 'http://', str_replace(chr(160), ' ', html_entity_decode(@getTextInHtml($annonceHtml, 'target="_blank"><b>HTML</b></a> ou', 'href="', '" target="_blank"><b>PDF</b></a></p>'))));
|
|
|
|
return $tabAnnBalo;
|
|
}
|
|
|
|
|
|
$repBalo='/home/data/balo/'; // Avec slash final SVP !!!
|
|
$repBaloComp='/home/data/balo/full/'; // Avec slash final SVP !!!
|
|
|
|
$tempsMinEntreRequetes=5;
|
|
$tempsMaxEntreRequetes=30;
|
|
set_time_limit(0);
|
|
$iDb=new WDB();/*
|
|
$iInsee=new MInsee();
|
|
$iBourse=new MBourse();
|
|
*/
|
|
|
|
$cookie='';
|
|
$dateDerParution=$dateCour=$dateF=false;
|
|
|
|
$strInfoProg='Usage : '.basename($argv[0]). " [OPTION]
|
|
Recupère les dernières annonces BALO sur le site de la DJO.
|
|
|
|
Sans aucun paramètre, récupération des dernières Annonces.
|
|
Sinon:
|
|
-d:JJ/MM/AAAA Date de début de publication
|
|
-f:JJ/MM/AAAA Date de fin de publication
|
|
-l Dernière parution uniquement (*)
|
|
-n:X Intervalle MIN en secondes entre les requêtes sur le site des JO (défaut=$tempsMinEntreRequetes)
|
|
-i:X \" MAX \" \" \" \" \" \" \" \" \" \" (défaut=$tempsMaxEntreRequetes)
|
|
";
|
|
|
|
$argv=$_SERVER['argv'];
|
|
if ($_SERVER['argc']==1) $lastJO=true;
|
|
else {
|
|
for ($i=1; isset($argv[$i]); $i++) {
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
switch (substr($argv[$i],1,1)) {
|
|
case 'd':
|
|
$dateDebut=substr($argv[$i],3,10);
|
|
$dateDeb=WDate::dateT('d/m/Y', 'Ymd', $dateDebut);
|
|
$lastJO=false;
|
|
break;
|
|
case 'f':
|
|
$dateFin=substr($argv[$i],3,10);
|
|
$dateF=WDate::dateT('d/m/Y', 'Ymd', $dateFin);
|
|
$lastJO=false;
|
|
break;
|
|
case 'n':
|
|
$tempsMinEntreRequetes=trim(substr($argv[$i],3))*1;
|
|
if ($tempsMinEntreRequetes<0) $tempsMinEntreRequetes=0;
|
|
break;
|
|
case 'i':
|
|
$tempsMaxEntreRequetes=trim(substr($argv[$i],3))*1;
|
|
if ($tempsMaxEntreRequetes<5) $tempsMaxEntreRequetes=2;
|
|
break;
|
|
case 'l':
|
|
$lastJO=true;
|
|
break;
|
|
case '-':
|
|
die($strInfoProg);
|
|
break;
|
|
default: die('Option '. $argv[$i] . " inconnue !\n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($lastJO==true) {
|
|
$strLast=' dernier';
|
|
$strDates='';
|
|
}
|
|
else {
|
|
$strLast='';
|
|
if ($dateFin==false) {
|
|
$dateFin=date('d/m/Y');
|
|
$dateF=WDate::dateT('d/m/Y', 'Ymd', $dateFin);
|
|
}
|
|
if ($dateDebut==false)
|
|
die($strInfoProg);
|
|
else
|
|
$strDates=" du $dateDebut au $dateFin";
|
|
$dateCour=$dateDeb;
|
|
}
|
|
echo date('Y/m/d - H:i:s') ." - DEBUT du la récupération du$strLast JO BALO$strDates".EOL;
|
|
echo date('Y/m/d - H:i:s') .' - La durée maximum entre chaque requête est de '. $tempsMaxEntreRequetes .' secondes.'. EOL;
|
|
flush();
|
|
|
|
while ($dateCour<=$dateF || $lastJO) { // Boucle sur les dates
|
|
//for ($i_reg=0; isset($tabReg[$i_reg]) || $lastJO; $i_reg++) { // Boucle sur les régions
|
|
|
|
if ($cookie=='') {
|
|
$referer='';
|
|
$url='http://www.journal-officiel.gouv.fr/balo/';
|
|
$page=getUrl($url, '', '', $referer);
|
|
$referer=$url;
|
|
$body=$page['body'];
|
|
$cookie=$page['header']['Set-Cookie'];
|
|
echo date('Y/m/d - H:i:s') .' - Cookie = "'. trim($cookie) .'"' . EOL;
|
|
$dateDerParution=@getTextInHtml($body, 'Dernière parution</A> <span style="font-size:10px">(', '10px">(', ')</span></P>');
|
|
randsleep($tempsMinEntreRequetes,$tempsMaxEntreRequetes);
|
|
}
|
|
|
|
if ($lastJO==true) { // Cas récup dernier JO
|
|
$dateAff=$dateDerParution;
|
|
$url='http://www.journal-officiel.gouv.fr/balo/index.php?ACTION=showLast';
|
|
} else { // On est pas dans la récupération du JO Assoc Jiur
|
|
$dateAff=WDate::dateT('Ymd', 'd/m/Y',$dateCour);
|
|
$dateFmt=str_replace('/', '%2F', $dateAff);
|
|
$url="http://www.journal-officiel.gouv.fr/balo/index.php?ACTION=Rechercher&HI_PAGE=1&HI_COMPTEUR=0&original_method=get&SOCIETE_NAME=&WHAT=&RCS=&NUM_AFF=&JPA_D_D=$dateFmt&JPA_D_F=$dateFmt&ID_BALO=&rechercher.x=0&rechercher.y=0&rechercher=Rechercher";
|
|
}
|
|
|
|
$page=getUrl($url, $cookie, '', $referer);
|
|
$referer=$url;
|
|
$body=$page['body'];
|
|
$ctx=@getTextInHtml($body, '<a href="index.php?ctx=', 'ctx=', '&page=');
|
|
echo date('Y/m/d - H:i:s') .' - Clé Ctx = "'. $ctx .'"' . EOL;
|
|
|
|
$nbAnnonces=@getTextInHtml($body, '<h1>RÉSULTAT DE LA RECHERCHE :</h1>', 'recherche :', 'annonce(s) correspondent');
|
|
//die(print_r($body));
|
|
$nbPages=ceil($nbAnnonces/10);
|
|
|
|
if ($lastJO==true) echo date('Y/m/d - H:i:s') ." - Derniere parution BALO le $dateDerParution de $nbAnnonces annonces ($nbPages pages)...". EOL;
|
|
else echo date('Y/m/d - H:i:s') ." - Parution BALO du $dateAff de $nbAnnonces annonces ($nbPages pages)...". EOL;
|
|
if ($nbPages>100) {
|
|
echo date('Y/m/d - H:i:s') .' - ERREUR : Il y a plus de 100 pages d\'annonces !'. EOL;
|
|
die();
|
|
}
|
|
|
|
// On recherche si nous n'avons pas déjà toutes ces annonces en base !
|
|
$dateDb=substr($dateAff,6,4).'-'.substr($dateAff,3,2).'-'.substr($dateAff,0,2);
|
|
$AnnDb=$iDb->select('balo', 'count(*)', "Date_Parution='$dateDb'");
|
|
$nbAnnDb=$AnnDb[0][0];
|
|
|
|
if ($nbAnnDb==$nbAnnonces) {
|
|
echo date('Y/m/d - H:i:s') .' - Toutes les annonces du '. $dateAff .' sont en base !'. EOL;
|
|
if ($lastJO) {
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
|
|
die();
|
|
}
|
|
$dateCour=getNextDate($dateCour,1);
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
continue;
|
|
} elseif ($nbAnnDb>0 && $nbAnnDb<$nbAnnonces) {
|
|
$message=date('Y/m/d - H:i:s') .' - ERREUR : Il n\'y a que '. $nbAnnDb .' annonces en base sur les '. $nbAnnonces .' annonces présentes au JO BALO du '. $dateDerParution .' !'. EOL;
|
|
echo $message;
|
|
mail('ylenaour@scores-decisions.com', 'JO BALO', $message);
|
|
mail('lenaoury@gmail.com', 'JO BALO', $message);
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
|
|
die();
|
|
}
|
|
|
|
$tabAnnonces=explode('<div class="hr"><hr/></div>', $page['body']);
|
|
|
|
for ($j=1; $j<11 && isset($tabAnnonces[$j]); $j++)
|
|
$tabAnnBalo[($j-1)]=$tabAnnonces[$j];
|
|
randsleep($tempsMinEntreRequetes,$tempsMaxEntreRequetes);
|
|
|
|
for ($i=2; $i<=$nbPages; $i++)
|
|
{
|
|
$url='http://www.journal-officiel.gouv.fr/balo/index.php?ctx='.$ctx.'&page='.$i;
|
|
$page=getUrl($url, $cookie, '', $referer, false, 'www.journal-officiel.gouv.fr');
|
|
$referer=$url;
|
|
//print_r($page);
|
|
$tabAnnonces=explode('<div class="hr"><hr/></div>', $page['body']);
|
|
|
|
for ($j=1; $j<11; $j++) {
|
|
//$k=$j+(10*($i-1));
|
|
$k=10*($i-1)+($j-1);
|
|
if ($k<$nbAnnonces)
|
|
$tabAnnBalo[$k]=$tabAnnonces[$j];
|
|
}
|
|
flush();
|
|
if ($i==2)
|
|
echo date('Y/m/d - H:i:s') ." - Page $i/$nbPages";
|
|
else
|
|
echo ", $i/$nbPages";
|
|
if ($i==$nbPages)
|
|
echo '.'.EOL;
|
|
else
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
}
|
|
|
|
//print_r($tabAnnBalo[$i]);
|
|
//die();
|
|
|
|
for ($i=0; $i<$nbAnnonces; $i++){
|
|
$infoAnnBalo=getInfosAnnonceBalo($tabAnnBalo[$i]);
|
|
$anneeParution=substr($infoAnnBalo['Date_Parution'],0,4);
|
|
$i2=$i+1;
|
|
$siren=$infoAnnBalo['Societe_Rcs'];
|
|
$isin='';
|
|
|
|
if ($siren>1000000) {
|
|
/** Recherche du code ISIN / infos boursières **/
|
|
$iBourse=new MBourse($siren);
|
|
$isin=$iBourse->getCodeIsin($siren);
|
|
$strIsin="(Isin=$isin) ";
|
|
} else
|
|
$strIsin="";
|
|
echo date('Y/m/d - H:i:s') ." - Annonce n°$i2/$nbAnnonces, Siren $siren $strIsin: ".$infoAnnBalo['Societe_Nom'] .EOL;
|
|
|
|
$page=getUrl($infoAnnBalo['Url_Annonce_Html'], '', '', '', false, 'balo.journal-officiel.gouv.fr');
|
|
//echo '<table border="1"><tr><td>'. $page['body'] .'</td></tr></table><hr/>';
|
|
$infoAnnBalo['Annonce_Html']=$page['body'];
|
|
randsleep($tempsMinEntreRequetes,$tempsMaxEntreRequetes);
|
|
|
|
$tabPdf=getPdfInfo($repBalo.$anneeParution.'/'.basename($infoAnnBalo['Url_Annonce_Pdf']));
|
|
if (!$tabPdf) {
|
|
$page=getUrl($infoAnnBalo['Url_Annonce_Pdf']);
|
|
@mkdir($repBalo.$anneeParution);
|
|
$fp=@fopen($repBalo.$anneeParution.'/'.basename($infoAnnBalo['Url_Annonce_Pdf']), 'w');
|
|
if (!fwrite($fp, $page['body']) || !$fp)
|
|
echo date('Y/m/d - H:i:s') .' - ERREUR : Problème de création du PDF '. basename($infoAnnBalo['Url_Annonce_Pdf']) .' pour le SIREN '. $infoAnnBalo['Societe_Rcs'] . EOL;
|
|
@fclose($fp);
|
|
|
|
$tabPdf=getPdfInfo($repBalo.$anneeParution.'/'.basename($infoAnnBalo['Url_Annonce_Pdf']));
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
}
|
|
$infoAnnBalo['pdfSize'] = $tabPdf['pdfSize'];
|
|
$infoAnnBalo['pdfVer'] = $tabPdf['version'];
|
|
$infoAnnBalo['pdfPage'] = $tabPdf['nbPages'];
|
|
|
|
if (!$iDb->insert('balo', $infoAnnBalo)) {
|
|
print_r($infoAnnBalo);
|
|
echo date ('Y/m/d - H:i:s') .' - ERREUR : Insertion impossible de l\'annonce MySql n°'. mysql_errno() .') : '. mysql_error() . EOL;
|
|
}
|
|
$numParution=$infoAnnBalo['Num_Parution'];
|
|
}
|
|
|
|
/** Téléchargement du dernier balo complet en PDF
|
|
**/
|
|
$url = 'http://www.journal-officiel.gouv.fr/balo/'.sprintf("%03d", $numParution).'_monte_final.PDF';
|
|
if (!file_exists($repBaloComp.$anneeParution.'_'.sprintf("%03d", $numParution).'_monte_final.PDF')) {
|
|
randsleep($tempsMinEntreRequetes,$tempsMaxEntreRequetes);
|
|
$page=getUrl($url, '', '', 'http://www.journal-officiel.gouv.fr/balo/', false, 'www.journal-officiel.gouv.fr');
|
|
@mkdir($repBaloComp.$anneeParution);
|
|
$fp=fopen($repBaloComp.$anneeParution.'/'.$anneeParution.'_'.sprintf("%03d", $numParution).'_monte_final.PDF', 'w');
|
|
if (!fwrite($fp, $page['body']) || !$fp)
|
|
echo date('Y/m/d - H:i:s') .' - ERREUR : Problème de création du PDF '. $anneeParution.'_'.sprintf("%03d", $numParution).'_monte_final.PDF' .' du balo complet !' . EOL;
|
|
@fclose($fp);
|
|
echo date("Y/m/d - H:i:s") . ' - BALO complet n° '.sprintf("%03d", $numParution).'_monte_final.PDF téléchargé.'.EOL;
|
|
} else
|
|
echo date("Y/m/d - H:i:s") . ' - BALO complet n° '.sprintf("%03d", $numParution).'_monte_final.PDF déjà téléchargé.'.EOL;
|
|
$tabPdf=getPdfInfo($repBaloComp.$anneeParution.'/'.$anneeParution.'_'.sprintf("%03d", $numParution).'_monte_final.PDF');
|
|
if ($tabPdf) {
|
|
$taillePdf=$tabPdf['pdfSize']/1024;
|
|
echo date("Y/m/d - H:i:s") . ' - Fichier '.sprintf("%03d", $numParution).'_monte_final.PDF : '.$tabPdf['nbPages']." pages ($taillePdf ko, ".$tabPdf['version'].')'.EOL;
|
|
}
|
|
if ($lastJO) {
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
|
|
die();
|
|
}
|
|
|
|
$dateCour=getNextDate($dateCour,1);
|
|
}
|
|
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
|
|
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', 'JO BALO', $message);
|
|
|
|
?>
|