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

345 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(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');
$tabReg=array( 'Aquitaine',
'Alsace',
'Auvergne',
'Basse-Normandie',
'Bourgogne',
'Bretagne',
'Centre',
'Champagne-Ardenne',
'Corse',
'Franche-Comté',
'Haute-Normandie',
'Île-de-France',
'Languedoc-Roussillon',
'Limousin',
'Lorraine',
'Midi Pyrénées',
'Nord-Pas-de-Calais',
'Outre-Mer',
'Pays-de-la-Loire',
'Picardie',
'Poitou-Charentes',
'Provence-Alpes-Côte-d\'Azur',
'Rhône-Alpes',
'Etranger');
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;
}
$repPdf='/home/data/infosreg/djo_infos_fi/'; // Avec slash final SVP !!!
echo date('Y/m/d - H:i:s') .' - DEBUT du script'. EOL;
flush();
function getInfosAnnonce($annonceHtml) {
$tabRet=array();
$tabRet['raisonSociale']=trim(str_replace(chr(160),' ',html_entity_decode(@getTextInHtml($annonceHtml,'<dd><label>Société : </label><strong>', '<strong>', '</strong></dd>'))));
$tabRet['isin']=strtoupper(trim(strtr(@getTextInHtml($annonceHtml, '<dd><label>ISIN : </label>', '</label>', '</dd>'), array(':'=>'',' '=>''))));
$tabRet['docDesc']=trim(@getTextInHtml($annonceHtml, '<div class="r_desc">', 'class="r_desc">', '</div>'));
$tabRet['docDate']=WDate::DateT('d/m/Y','Y-m-d', trim(@getTextInHtml($annonceHtml, '<span class="date">', 'class="date">', '</span>'))).' '.trim(@getTextInHtml($annonceHtml, '<span class="heure">', 'class="heure">', '</span>')).':00';
$tabRet['docCategorie']=utf8_decode(strip_tags('<a href="'.trim(str_replace(chr(160), ' ', html_entity_decode(@getTextInHtml($annonceHtml, '<div class="resultat_HitGroup">', '<a href="', '</div>'))))));
$tabRet['docTitre']=utf8_decode(trim(str_replace(chr(160),' ',html_entity_decode(@getTextInHtml($annonceHtml, '<dd><label>Titre du document : </label>', '"> ', '</a></dd>')))));
$tabRet['docLangue']=trim(@getTextInHtml($annonceHtml, '<dd><label>Langue : </label>', '</label>', '</dd>'));
$tabRet['pdfLink']=str_replace('https://', 'http://', str_replace(chr(160), ' ', html_entity_decode(@getTextInHtml($annonceHtml, '<a href="http://www.info-financiere.fr/', 'href="', '">'))));
return $tabRet;
}
$tempsMinEntreRequetes=5;
$tempsMaxEntreRequetes=30;
set_time_limit(0);
$lastJO=$dateDebut=$dateFin=$dateF=$dateCour=false;
$iDb=new WDB();
$iInsee=new MInsee();
$iBourse=new MBourse();
$strInfoProg='Usage : '.basename($argv[0]). " [OPTION]
Recupère les dernières annonces BOAMP 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ères parutions 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) {
// Voir pour callibrer correctement les dates
$dateDeb=getNextDate(date('Ymd'), -4);
$dateF =getNextDate(date('Ymd'), 0);
} else {
if ($dateFin==false) {
$dateFin=date('d/m/Y');
$dateF=WDate::dateT('d/m/Y', 'Ymd', $dateFin);
}
if ($dateDebut==false)
die($strInfoProg);
}
$dateCour=$dateDeb;
echo date('Y/m/d - H:i:s') ." - DEBUT du la récupération des BOAMP du $dateDebut au $dateFin...".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
$dateDebut = WDate::dateT('Ymd', 'd/m/Y', $dateCour);
$dateFrom = str_replace('/','%2F', $dateDebut);
$dateFin = WDate::dateT('Ymd', 'd/m/Y', getNextDate($dateCour,1));
$dateTo = str_replace('/','%2F', $dateFin);
echo date('Y/m/d - H:i:s') ." - Traitement des annonces d'informations financières du $dateDebut au $dateFin...".EOL;
$userAgent='Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
/** Cookie de session **
$url='http://www.boamp.fr/index.php?action=afficherFormRechAvancee';
$referer='';
$page=getUrl($url, '', '', $referer, false);
$body=$page['body'];
$cookie=@$page['header']['Set-Cookie'];
$referer=$url;
echo date('Y/m/d - H:i:s') .' - Cookie = "'. trim($cookie) .'"' . EOL;
*/
foreach ($tabReg as $region) {
$tabPost=array( 'action'=>'rechercher',
'type_recherche'=>'March%E9s+en+cours',
'dep'=>'',
'mots'=>'',
'ref_ann'=>'',
'seuil%5B%5D'=>'',
'date_pub_min='=>str_replace('/20','/', $dateFrom),
'date_pub_max='=>str_replace('/20','/', $dateTo),
'date_reponse_min'=>'jj%2Fmm%2Faa',
'date_reponse_max'=>'jj%2Fmm%2Faa',
'dep%5B%5D'=>urlencode($region),
);
$strPost=implode('&', $tabPost);
exec('wget --save-cookies cookies.txt http://www.boamp.fr/index.php?action=afficherFormRechAvancee');
exec('wget --load-cookies cookies.txt --append-output=/tmp/wget2.log --keep-session-cookies --save-headers --output-document=/tmp/wget2.htm --post-data \''.$strPost.'\' "http://www.boamp.fr/index.php"');
$str=file_get_contents('/tmp/wget2.htm');
die($str);
//print_r($tabPost);
//die();
// $cookie=str_replace('; path=/', 'xtvrn=$397545$', $cookie);
// Cookie[PHPSESSID=f64cf6d8cebcf0cf4a55a176b61dba3d; xtvrn=$397545$]
$url="http://www.boamp.fr/index.php";
$page=getUrl($url, '',/*$cookie, */$tabPost, $referer);
$body=$page['body'];
print_r($page);
die();
}
die();
if (preg_match('/<div class="nb_resultats">(?:.*)\:(.*)<\/div>/Uim', $body, $matches))
$nbAnnonces=trim($matches[1]);
else
die('Erreur : Aucun résultat trouvé'.EOL);
$nbPages=round($nbAnnonces/10);
echo date('Y/m/d - H:i:s') . " - Nombre du publication du $dateDebut au $dateFin : $nbAnnonces soit $nbPages page(s)...". EOL;
if ($nbPages>100) {
echo date('Y/m/d - H:i:s') . " - ERREUR : Arrêt du traitement car il y a plus de 100 pages d'annonces !". EOL;
die();
}
if ($nbAnnonces>0) {
if (preg_match('/ href="search\.php\?action=changepage&c=(.*)&page=/mUis', $body, $matches)) {
$c=$matches[1];
echo date('Y/m/d - H:i:s') . " - Identifiant Sesssion = $c". EOL;
}
elseif ($nbAnnonces<=10)
// - de 10 annonces, pas de multipage
$c='...';
else {
print_r($page);
die('Erreur : Aucun numéro de session trouvé'.EOL);
}
$dateDb=WDate::DateT('Ymd','Y-m-d',$dateCour);
$AnnDb=$iDb->select('balo_ireg', 'count(*) AS nb', "docDate BETWEEN '$dateDb 00:00:00' AND '$dateDb 23:59:59'", false, MYSQL_ASSOC);
$nbAnnDb=$AnnDb[0]['nb'];
if ($nbAnnDb>=$nbAnnonces) {
echo date('Y/m/d - H:i:s') ." - Les $nbAnnonces annonces DJO infos financières du $dateDebut ($dateDb) sont en base ($nbAnnDb) !". EOL;
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
$dateCour=getNextDate($dateCour,1);
continue;
}
elseif ($nbAnnDb>0 && $nbAnnDb<$nbAnnonces) {
$message=date('Y/m/d - H:i:s') ." - ATTENTION : Il n'y a que $nbAnnDb annonce(s) DJO infos financières en base sur les $nbAnnonces annonces présentes au JO du $dateDebut !". EOL;
echo $message;
/*
mail('ylenaour@scores-decisions.com', 'JO Association', $message);
mail('lenaoury@gmail.com', 'JO Association', $message);
*/
echo date('Y/m/d - H:i:s') .' - Tentative de récupération des annonces...'. EOL;
}
else
echo date('Y/m/d - H:i:s') ." - Il y a $nbAnnDb annonce(s) DJO infos financières en base sur les $nbAnnonces annonces présentes au JO du $dateDebut !". EOL;
$tabAnnonces=explode('<div class="r_title">', $page['body']);
for ($j=1; $j<11 && isset($tabAnnonces[$j]); $j++)
$tabAnnBalo[($j-1)]=$tabAnnonces[$j];
if ($nbPages>=2)
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
/** Traitement des pages suivantes
**/
for ($i=2; $i<=$nbPages; $i++)
{
$url='http://www.info-financiere.fr/search.php?action=changepage&c='. $c .'&page='.$i;
$page=getUrl($url, $cookie, '', $referer);
$referer=$url;
$tabAnnonces=explode('<div class="r_title">', $page['body']);
for ($j=1; $j<11; $j++) {
$k=10*($i-1)+($j-1);
if ($k<$nbAnnonces)
$tabAnnBalo[$k]=$tabAnnonces[$j];
}
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);
}
/** On parse les annonces et on les stocks **/
for ($i=0; $i<$nbAnnonces; $i++){
$infoAnnBalo=getInfosAnnonce($tabAnnBalo[$i]);
$i2=$i+1;
$AnnDb=$iDb->select('balo_ireg', 'count(*) AS nb', "isin='".$infoAnnBalo['isin']."' AND docDate='".$infoAnnBalo['docDate']."' AND docLangue='".$infoAnnBalo['docLangue']."' AND pdfLink='".$infoAnnBalo['pdfLink']."'", false, MYSQL_ASSOC);
$nbAnnDb=$AnnDb[0]['nb'];
$tabPdf=getPdfInfo($repPdf.basename($infoAnnBalo['pdfLink']));
if (!$tabPdf) {
$page=getUrl($infoAnnBalo['pdfLink'], '', '', '', false);
@mkdir($repPdf);
$fp=@fopen($repPdf.basename($infoAnnBalo['pdfLink']), 'w');
if (!fwrite($fp, $page['body']) || !$fp) {
print_r($infoAnnBalo);
echo date('Y/m/d - H:i:s') .' - ERREUR : Problème de création du PDF '. basename($infoAnnBalo['pdfLink']) ." pour la parution du $dateAff, annonce n°$i2/$nbAnnonces, Isin = ". $infoAnnBalo['isin']." : \"". $infoAnnBalo['raisonSociale'] .'" !'.EOL;
}
@fclose($fp);
$tabPdf=getPdfInfo($repPdf.basename($infoAnnBalo['pdfLink']));
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
}
$infoAnnBalo['pdfSize'] = $tabPdf['pdfSize'];
$infoAnnBalo['pdfVer'] = $tabPdf['version'];
$infoAnnBalo['pdfPage'] = $tabPdf['nbPages'];
// Infos de debug
$infoAnnBalo['sitePage']= round($i2/10);
$infoAnnBalo['siteId'] = $i2;
if (strlen($infoAnnBalo['isin'])==12)
$infoAnnBalo['siren'] = @$iBourse->getCodeSiren($infoAnnBalo['isin']);
elseif (strlen($infoAnnBalo['isin'])==11) {
for($iIsin=0;$iIsin<10;$iIsin++) {
$siren=@$iBourse->getCodeSiren($infoAnnBalo['isin'].$iIsin);
if ($siren>0) {
$infoAnnBalo['siren'] = $siren;
break;
}
}
}
$dateAff=WDate::dateT('Y-m-d H:i:s', 'd/m/Y', $infoAnnBalo['docDate']);
if ($nbAnnDb==1) {
echo date('Y/m/d - H:i:s') ." - Parution du $dateAff, annonce n°$i2/$nbAnnonces, ". $infoAnnBalo['isin']."/".$infoAnnBalo['siren']." : \"". $infoAnnBalo['raisonSociale'] .'" déjà en base ('.$infoAnnBalo['docLangue'].') !'.EOL;
// L'annonce est déjà en base !
continue;
} else
echo date('Y/m/d - H:i:s') ." - Parution du $dateAff, annonce n°$i2/$nbAnnonces, ". $infoAnnBalo['isin']."/".$infoAnnBalo['siren']." : \"". $infoAnnBalo['raisonSociale'] .'"... enregistrement ('.$infoAnnBalo['docLangue'].') !'.EOL;
if (!$iDb->insert('balo_ireg', $infoAnnBalo) && mysql_error()<>1062)
echo date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .') : '. mysql_error() . EOL;
}
}
$dateCour=getNextDate($dateCour,1);
}
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
die();
/** 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();
$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;
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
?>