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

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();
?>