270 lines
11 KiB
PHP
270 lines
11 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.'insee/classMInsee.php');
|
|
include_once(FWK_PATH.'mail/sendMail.php');
|
|
|
|
$strInfoScript='Usage : '.basename($argv[0]). " <option>
|
|
Mise à jour des hébergements touristiques classés.
|
|
|
|
Options :
|
|
-v Mode debug (Verbosité au maximum)
|
|
-b Mise à jour de la base complète
|
|
";
|
|
$iDb=new WDB('jo');
|
|
$iInsee=new MInsee();
|
|
|
|
$argv=$_SERVER['argv'];
|
|
$tabSiren=array();
|
|
$modeDebug=$baseComplete=false;
|
|
$nbInsert=$nbUpdate=$nbUpdateSuiv=0;
|
|
$nbUpdatesMAJ=50; // Si pas MAJ complète, nombre de lignes sans ajouts avant arrêt du traitement
|
|
|
|
for ($i=1,$j=0; isset($argv[$i]); $i++) {
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
switch (substr($argv[$i],1,1)) {
|
|
case 'v': $modeDebug=true; break;
|
|
case 'b': $baseComplete=true; break;
|
|
case '-':
|
|
case '?': die($strInfoScript); break;
|
|
default: die('Option '. $argv[$i] . ' inconnue !'.EOL); break;
|
|
}
|
|
} else $tabSiren[]=$argv[$i];
|
|
}
|
|
|
|
/** Requête d'initialisation du cookie **/
|
|
$referer='';
|
|
$url='https://www.classement.atout-france.fr/liste_hebergement_classes_public';
|
|
$page=getUrl($url, '', '', $referer);
|
|
$referer=$url;
|
|
if ($page['code']<>200) {
|
|
print_r($page);
|
|
die('Erreur Code Retour <> 200 !');
|
|
}
|
|
$cookie=$page['header']['Set-Cookie'];
|
|
randsleep(1,2);
|
|
|
|
$resultsPerPage=100;
|
|
if ($baseComplete)
|
|
$tabTypeEtab=array( 'VILLAGE%20R%C3%89SIDENTIEL%20DE%20TOURISME'=>'Village résidentiel de tourisme',
|
|
'PARC%20R%C3%89SIDENTIEL%20DE%20LOISIRS'=>'Parcs résidentiel de loisirs',
|
|
'VILLAGE%20DE%20VACANCES'=>'Villages de vacances',
|
|
'H%C3%94TEL'=>'Hotels',
|
|
'R%C3%89SIDENCE%20DE%20TOURISME'=>'Résidences de tourisme',
|
|
'CAMPING'=>'Campings',
|
|
'MEUBL%C3%89%20DE%20TOURISME'=>'Meublés de tourisme',
|
|
);
|
|
else
|
|
$tabTypeEtab=array(' '=>'Derniers établissements classés');
|
|
|
|
foreach ($tabTypeEtab as $typeEtab=>$libTypeEtab) {
|
|
|
|
$iPage=$nbPages=0;
|
|
$tabHotels=array();
|
|
|
|
while($iPage==0 || $iPage<$nbPages) {
|
|
$iPage++;
|
|
/** Boucle de lecture**/
|
|
$post=array('page'=>$iPage,
|
|
'resultsPerPage'=>$resultsPerPage,
|
|
'typeEtablissement'=>trim($typeEtab),
|
|
'nom'=>'',
|
|
'codePostal'=>'',
|
|
'commune'=>'',
|
|
'nbEtoiles'=>'',//5%20%C3%A9toiles',
|
|
);
|
|
$url='https://www.classement.atout-france.fr/public/hebergements/recherche';
|
|
$page=getUrl($url, $cookie, $post, $referer);
|
|
$referer=$url;
|
|
if ($page['code']<>200) die('Erreur Code Retour <> 200 !');
|
|
if (preg_match('/UTF-8/i', $page['header']['Content-Type']))
|
|
$body=utf8_decode($page['body']);
|
|
else
|
|
$body=$page['body'];
|
|
//print_r($page);
|
|
//die($body);
|
|
if ($nbPages==0 && preg_match('/<div class="ow\-pagination">(?:\s+)<span>Eléments (\d+) à (\d+) sur ([0-9,]{1,})</Uis', $body, $matches)) {
|
|
$nbTot=strtr($matches[3],array(','=>'',' '=>'','.'=>''));
|
|
$nbPages=ceil($nbTot/$resultsPerPage);
|
|
echo date('Y/m/d - H:i:s') ." - $libTypeEtab : $nbPages page(s) pour un total de $nbTot résultats".EOL;
|
|
echo date('Y/m/d - H:i:s') ." - $libTypeEtab : page $iPage, ";
|
|
//die();
|
|
} elseif ($nbPages==0) {
|
|
if (preg_match('/(\d+) hébergements concernés(?:\s+)<\/div>/Uis', $body, $matches)) {
|
|
$nbTot=strtr($matches[1],array(','=>'',' '=>'','.'=>''));
|
|
$nbPages=ceil($nbTot/$resultsPerPage);
|
|
echo date('Y/m/d - H:i:s') ." - $libTypeEtab : $nbPages page(s) pour un total de $nbTot résultats".EOL;
|
|
} elseif (preg_match('/Aucun résultat pour les critères saisis/Uis', $body, $matches)) {
|
|
echo date('Y/m/d - H:i:s') ." - $libTypeEtab : 0 page pour un total de 0 résultat".EOL;
|
|
break;
|
|
} else {
|
|
echo $body.EOL;
|
|
die(date('Y/m/d - H:i:s') ." - $libTypeEtab : ERREUR, lecture impossible du nombre de pages !".EOL);
|
|
}
|
|
} elseif ($nbPages>0) {
|
|
if ($iPage==$nbPages) echo "$iPage.".EOL;
|
|
else echo "$iPage, ";
|
|
}
|
|
|
|
if (preg_match_all( '/<div><strong>(.*)<\/strong><\/div>(?:\s+)'.
|
|
'(.*)<\/div>(?:\s+)<\/div>/Uis'
|
|
/* '<div>(.*)(\d) ÉTOILES?<\/div>(?:\s+)'.
|
|
'<div>Classement attribué le (.*)<\/div>(?:\s+)'.
|
|
'<div>(.*) - (\d\d\d\d\d) (.*)<\/div>(?:\s+)'.
|
|
'<div>Tél\. \: (.*)Fax \: (.*)Courriel \: <a href="mailto\:(.*)">(?:.*)'.
|
|
'<div>Site internet \: <a href="(.*)" target="_blank">(?:.*)<\/div>(?:\s+)'.
|
|
'<div>Types de chambre \: (.*)<\/div>(?:\s+)'.
|
|
'((\d+) chambres)?/Uis'*/
|
|
, $body, $matches)) {
|
|
//print_r($matches);die();
|
|
foreach ($matches[1] as $i=>$nom) {
|
|
$tabHotel=array('nom'=>trim($nom));
|
|
// echo "$i:$nom".EOL;
|
|
$strHotel=$matches[2][$i];
|
|
if (preg_match('/<div>(.*)(\d) ÉTOILES?<\/div>/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['nbEtoiles']=$matches2[2];
|
|
$tabHotel['typeClasse']=trim($matches2[1]);
|
|
} elseif (preg_match('/<div>(.*)(\d) ÉTOILES? - CATÉGORIE(.*)<\/div>/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['nbEtoiles']=$matches2[2];
|
|
$tabHotel['typeClasse']=trim($matches2[1]);
|
|
$tabHotel['categorie']=trim(strtr($matches2[3],array('«'=>'','»'=>'')));
|
|
} elseif (preg_match('/<div>(.*)(\d) ÉTOILES?(?:\s+)- (.*)<\/div>/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['nbEtoiles']=$matches2[2];
|
|
$tabHotel['typeClasse']=trim($matches2[1]);
|
|
$tabHotel['categorie']=trim(strtr($matches2[3],array('«'=>'','»'=>'')));
|
|
}
|
|
if (preg_match('/<div>Classement attribué le (.*)<\/div>/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['dateClasse']=WDate::dateT('d/m/Y', 'Y-m-d', $matches2[1]);
|
|
}
|
|
if (preg_match('/\d\d\d\d<\/div>(?:\s+)<div>(.*) - (\d\d\d\d\d) (.*)<\/div>/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['adresse']=trim($matches2[1]);
|
|
$tabHotel['adrCp']=$matches2[2];
|
|
$tabHotel['adrVille']=trim($matches2[3]);
|
|
}
|
|
if (preg_match('/Tél\. \: ([0-9\s\+\-\.\(\)]{14,20})/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['tel']=trim($matches2[1]);
|
|
}
|
|
if (preg_match('/Fax \: ([0-9\s\+\-\.\(\)]{14,20})/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['fax']=trim($matches2[1]);
|
|
}
|
|
if (preg_match('/Courriel \: <a href="mailto\:(.*)">/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['mail']=trim($matches2[1]);
|
|
}
|
|
if (preg_match('/<div>Site internet \: <a href="(.*)" target="_blank">/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['web']=trim($matches2[1]);
|
|
}
|
|
if (preg_match('/<div>Types de chambre \: (.*)<\/div>/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['typeChambres']=trim($matches2[1]);
|
|
}
|
|
if (preg_match('/([0-9,]{1,}) chambres?/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['capacite']=strtr($matches2[1],array(','=>'',' '=>'','.'=>''));
|
|
} elseif (preg_match('/([0-9,]{1,}) emplacements?/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['capacite']=strtr($matches2[1],array(','=>'',' '=>'','.'=>''));
|
|
} elseif (preg_match('/([0-9,]{1,}) personnes?/Uis',$strHotel,$matches2)) {
|
|
$tabHotel['capacite']=strtr($matches2[1],array(','=>'',' '=>'','.'=>''));
|
|
}
|
|
//print_r($tabHotel);
|
|
|
|
$deb=0;$nbRep=20;$maxRep=20;$actif=1;
|
|
$siege='';
|
|
$pertinence=true;
|
|
|
|
if ($modeDebug) {
|
|
echo "RECHERCHE DE :";
|
|
print_r($tabHotel);
|
|
}
|
|
$nom=strtr($nom, array( 'MEUBLÉ DE MONSIEUR '=>'',
|
|
'MEUBLÉ DE MADAME '=>'',
|
|
));
|
|
$tabTmp=@$iInsee->rechercheEtab($nom, $tabHotel['adresse'], $tabHotel['adrCp'], $tabHotel['adrVille'], $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, true);
|
|
$tabTrouve=@$tabTmp['reponses'];
|
|
if ($modeDebug) {
|
|
echo EOL."On trouve :";
|
|
print_r($tabTrouve);
|
|
echo '-------------------------------'.EOL;
|
|
}
|
|
if (count($tabTrouve)==1) {
|
|
$tabHotel['siren']=$tabTrouve[0]['Siren'];
|
|
$tabHotel['nic']=$tabTrouve[0]['Nic'];
|
|
$tabHotel['nafEn']=$tabTrouve[0]['NafEnt'];
|
|
$tabHotel['nafEt']=$tabTrouve[0]['NafEtab'];
|
|
}
|
|
/*
|
|
5510Z Hôtels et hébergement similaire
|
|
702A Location de logements
|
|
6820A Location de logements
|
|
5530Z Terrains de camping et parcs pour caravanes ou véh
|
|
5520Z Hébergement touristique et autre hébergement de co
|
|
6820B Location de terrains et d'autres biens immobiliers
|
|
551A Hôtels touristiques avec restaurant
|
|
5610A Restauration traditionnelle
|
|
741J Administration d'entreprises
|
|
7010Z Activités des sièges sociaux
|
|
552C Exploitation de terrains de camping
|
|
702C Location d'autres biens immobiliers
|
|
551C Hôtels touristiques sans restaurant
|
|
553A Restauration de type traditionnel
|
|
*/
|
|
$nom=@addslashes($tabHotel['nom']);
|
|
$adresse=@addslashes($tabHotel['adresse']);
|
|
$adrVille=@addslashes($tabHotel['adrVille']);
|
|
$typeClasse=@addslashes($tabHotel['typeClasse']);
|
|
$categorie=@addslashes($tabHotel['categorie']);
|
|
$typeChambres=@addslashes($tabHotel['typeChambres']);
|
|
$capacite=@$tabHotel['capacite']*1;
|
|
$where="nom='$nom'
|
|
AND adresse ='$adresse'
|
|
AND adrCp =".@$tabHotel['adrCp']."
|
|
AND adrVille ='$adrVille'
|
|
AND nbEtoiles =".@$tabHotel['nbEtoiles']."
|
|
AND typeClasse ='$typeClasse'
|
|
AND categorie ='$categorie'
|
|
AND dateClasse ='".@$tabHotel['dateClasse']."'
|
|
AND tel ='".@$tabHotel['tel']."'
|
|
AND fax ='".@$tabHotel['fax']."'
|
|
AND mail ='".@$tabHotel['mail']."'
|
|
AND web ='".@$tabHotel['web']."'
|
|
AND typeChambres='$typeChambres'
|
|
AND capacite =".$capacite;
|
|
$ret=$iDb->select('tourisme', 'id', $where, false);
|
|
if (mysql_errno()>0) die("SELECT id FROM tourisme WHERE $where;".EOL.mysql_error().EOL);
|
|
if (count($ret)==0) {
|
|
//print_r($ret);
|
|
$tabInsert=array_merge($tabHotel,array( 'actif'=>1,
|
|
'dateInsert'=>date('YmdHis')));
|
|
if (!$iDb->insert('tourisme', $tabInsert))
|
|
die(print_r($tabInsert,true).EOL.mysql_error().EOL);
|
|
else {
|
|
$nbInsert++;
|
|
$updatePre=false;
|
|
}
|
|
} else {
|
|
$id=$ret[0][0];
|
|
$tabUpdate=array_merge($tabHotel,array('actif'=>1));
|
|
if (!$iDb->update('tourisme', $tabUpdate, "id=$id"))
|
|
die(print_r($tabUpdate,true).EOL.mysql_error().EOL);
|
|
else {
|
|
$nbUpdate++;
|
|
$updatePre=true;
|
|
}
|
|
}
|
|
if (!$updatePre) $nbUpdateSuiv=0;
|
|
else $nbUpdateSuiv++;
|
|
//$tabHotels[]=$tabHotel;
|
|
}
|
|
//die();
|
|
} else
|
|
print_r($page);
|
|
//randsleep(1,2);
|
|
if (!$baseComplete && $nbUpdateSuiv>($nbUpdatesMAJ/2)) break(2);
|
|
}
|
|
}
|
|
//print_r($tabHotels);
|
|
echo date('Y/m/d - H:i:s') ." - $libTypeEtab : $nbInsert ajouts et $nbUpdate mises à jours.".EOL;
|
|
die();
|
|
|
|
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', 'Chargement des informations Greffes', $message);
|
|
die();
|
|
?>
|