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

372 lines
15 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;
$yDeb=2004;
$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
-a:YYYY Année à récupérer
-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 'a': $yDeb=trim(substr($argv[$i],3))*1; 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;
/*
$dt=1322953200;
$dt=1086300000;//000
echo date('Y/m/d H:i:s',$dt).EOL;
$dt=mktime(0, 0, 0, 6, 2, 2004).'000';
$url="http://www.journal-officiel.gouv.fr/calendar.php?datetime=$dt&id=0";
$page=getUrl($url, '', '', $referer);
print_r($page);
*/
//www.journal-officiel.gouv.fr/publication/2012/0704/joe_20120704_0154_p000.pdf.sig
$referer='';
$urlBase='http://www.journal-officiel.gouv.fr/publication/';
for ($y=$yDeb;$y<=date('Y');$y++) {
if ($y==2004) $num=126; else $num=1;
@mkdir("/home/data/jorf/$y");
for ($m=1; $m<=12; $m++) {
if ($y==2004 && $m<6) continue;
for ($d=1; $d<=31; $d++) {
//www.journal-officiel.gouv.fr/publication/2004/01/joe_200401_0126_p000.pdf.sig
if ($m<10) $md='0'.$m; else $md=$m;
if ($d<10) $md.='0'.$d; else $md.=$d;
if ($num<10) $num2='000'.$num;
elseif ($num<100) $num2='00'.$num;
else $num2='0'.$num;
$dateFic=($y.$md)*1;
if ($dateFic>DATE) {
echo "Dernier JORF du jour téléchargé !".EOL;
break(3);
}
$url=$urlBase."$y/$md/joe_$dateFic".'_'.$num2.'_p000.pdf.sig';
echo "URL : $url";
$tabPdf=getPdfInfo("/home/data/jorf/$y/".str_replace('_p000.pdf.sig','.pdf',basename($url)));
if ($tabPdf['pdfEOF']==1) {
echo " (en cache, ".$tabPdf['nbPages'].' pages)'.EOL;
// print_r($tabPdf);
// die();
$num++;
continue;
}
$page=getUrl($url, '', '', $referer, false);
$body=$pdeb=$pfin=false;
if ($page['code']==200) {
$num++;
$body=$page['body'];
file_put_contents('/tmp/debugJorf.xml', $body);
$pdeb=strpos($body, '<xjo:Donnee>')+12;
$pfin=strpos($body, '</xjo:Donnee>');
if ($pdeb>0 && $pfin>$pdeb) {
$fluxEnc=substr($body, $pdeb, $pfin-$pdeb);
file_put_contents('/tmp/debugJorf.tmp', $fluxEnc);
$flux=base64_decode($fluxEnc);
file_put_contents("/home/data/jorf/$y/".str_replace('_p000.pdf.sig','.pdf',basename($url)), $flux);
$tailleKo=round(strlen($flux)/1024,1);
echo " ($tailleKo ko)".EOL;
} else {
echo ' ERREUR'.EOL;
echo substr($body,-2500);
die();
}
randsleep($tempsMinEntreRequetes,$tempsMaxEntreRequetes);
}
else echo ' neant'.EOL;
}
}
}
die();
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&egrave;re parution</A>&nbsp;<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&Eacute;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);
?>