339 lines
13 KiB
PHP
339 lines
13 KiB
PHP
<?
|
|
/** Parse une page Html et retourne son contenu dans un tableau :
|
|
** "code" => Code réponse Serveur
|
|
** "header" => Headers du serveur
|
|
** "body" => Page HTML
|
|
**/
|
|
function parse_response($this_response) {
|
|
|
|
|
|
// Split response into header and body sections
|
|
list($response_headers, $response_body) = explode("\r\n\r\n", $this_response, 2);
|
|
$response_header_lines = explode("\r\n", $response_headers);
|
|
|
|
// First line of headers is the HTTP response code
|
|
$http_response_line = array_shift($response_header_lines);
|
|
if(preg_match('@^HTTP/[0-9]\.[0-9] ([0-9]{3})@',$http_response_line, $matches)) { $response_code = $matches[1]; }
|
|
|
|
// put the rest of the headers in an array
|
|
$response_header_array = array();
|
|
$nbRMID=0;
|
|
foreach($response_header_lines as $header_line)
|
|
{
|
|
list($header,$value) = explode(': ', $header_line, 2);
|
|
|
|
if ($header=='Set-cookie' && substr($value,0,5)=='RMID=' && $nbRMID<5)//{
|
|
$nbRMID++;
|
|
// echo ("Je gicle le RMID n°$nbRMID\r\n");}
|
|
else
|
|
$response_header_array[$header] .= $value."\n";
|
|
}
|
|
return array('code' => $response_code, 'header' => $response_header_array, 'body' => $response_body);
|
|
}
|
|
|
|
/** Récupère une page HTML en fonction des paramètres :
|
|
** $url Url distante de la page à récupérer
|
|
** $strCookies Chaine de caractère contenant les cookies
|
|
** $postData Tableau des données à passer en POST uniquement
|
|
** $referer Referer à indiquer lors de l'appel de la page
|
|
** $debug Activer le débogage (True/False)
|
|
**
|
|
** ... et retourne son contenu dans un tableau :
|
|
** "code" => Code réponse Serveur
|
|
** "header" => Headers du serveur
|
|
** "body" => Page HTML
|
|
**/
|
|
function getUrl($url, $strCookies='', $postData='', $referer='', $debug=false, $host='') {
|
|
|
|
|
|
$ch = curl_init();
|
|
|
|
if ($host=='')
|
|
$this_header = array('Host: '. HOST_INSEE);
|
|
else
|
|
$this_header = array('Host: '. $host);
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_HEADER, 1);
|
|
//curl_setopt($ch, CURLOPT_PROXY, '10.142.10.254:80');
|
|
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password'); // Pas nécessaire en authentification NT
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
|
//curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
|
|
|
|
$user_agent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
|
|
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
|
|
curl_setopt($ch, CURLOPT_REFERER, $referer);
|
|
|
|
// Add each cookie that has been returned in the response
|
|
// If cookies need to be added/deleted or value changed, then add code here
|
|
if ($strCookies!='') {
|
|
//die('"'.$strCookies.'"');
|
|
//echo $strCookies."\r\n";
|
|
$cookies = explode("\n", $strCookies);
|
|
// Create the basic header
|
|
foreach($cookies as $this_cookie) {
|
|
if (trim($this_cookie)<>'')
|
|
array_push($this_header, 'Cookie: '.$this_cookie);
|
|
}
|
|
}
|
|
|
|
if ($postData!='') {
|
|
if (is_array($postData))
|
|
$post_data=$postData;
|
|
|
|
$o="";
|
|
foreach ($post_data as $k=>$v)
|
|
{
|
|
$o.= "$k=".utf8_encode($v)."&";
|
|
}
|
|
$post_data=substr($o,0,-1);
|
|
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
|
|
//if in_array('',$this_header
|
|
/*array_push($this_header, "Content-type: application/x-www-form-urlencoded");
|
|
array_push($this_header, "Content-Length: 44");*/
|
|
}
|
|
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $this_header);
|
|
//print_r($this_header);
|
|
|
|
$page=curl_exec($ch);
|
|
$response = parse_response($page);
|
|
if ($debug){
|
|
$url2=str_replace('http://', '', $url);
|
|
$url2=str_replace('/', '_', $url2);
|
|
$url2=str_replace('?', '(param)', $url2);
|
|
$url2=str_replace('&', '(et)', $url2);
|
|
|
|
|
|
$fp=fopen('/var/www/_includes/partenaires/insee/'. date('Ymd-His') .'-'. microtime_float(true) .'-'. $url2 . '.html', 'a');
|
|
fwrite($fp, $url."\r\n");
|
|
fwrite($fp, $page);
|
|
fclose($fp);
|
|
//echo strip_tags(html_entity_decode($response['body']), '<td>');
|
|
}
|
|
//print_r(curl_getinfo($ch));
|
|
curl_close($ch);
|
|
return $response;
|
|
}
|
|
|
|
|
|
function rechercheTelephone($raisonSociale='', $adresse='', $localite='', $departement='', $activite='') {
|
|
|
|
$response1=getUrl(SITE_PJ.'pj.cgi?', '', '', '', true, HOST_PJ);
|
|
//print_r($response1['header']['Set-cookie']);
|
|
$pageHtml=$response1['body'];
|
|
$SESSION_ID=getTextInHtml($pageHtml, '<input type="hidden" name="SESSION_ID" value="', ' value="', '">');
|
|
$VID=getTextInHtml($pageHtml, '<input type="hidden" name="VID" value="', ' value="', '">');
|
|
$e_cookie=getTextInHtml($pageHtml, '<noscript><img ALT="" src="http://e.pagesjaunes.fr/m/web/', 'src="', '" BORDER=0 width=1 height=1></noscript>');
|
|
|
|
$response=getUrl(SITE_PJ.'files/look2002/FR/commun/pji.css', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl(SITE_PJ.'files/look2002/FR/commun/pji_PJ.css', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl(SITE_PJ.'files/look2002/FR/commun/script_open.js', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl(SITE_PJ.'files/look2002/FR/commun/alerte.js', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl(SITE_PJ.'files/look2002/FR/commun/script_VED.js', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl(SITE_PJ.'sitecrm/popup.js', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://sbx.pagesjaunes.fr/RealMedia/ads/Creatives/OasDefault/AUTOPROMO_PJ_banniere_activite/hotel_pj.swf?clickTAG=http://sbx.pagesjaunes.fr/RealMedia/ads/click_lx.ads/www.pagesjaunes.fr/GENERAL/GENERAL/PJ/1238513556/Top/OasDefault/AUTOPROMO_PJ_banniere_activite/hotel_pj.html/61633130323433353434346339306330?', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl(SITE_PJ.'files/look2002/FR/commun/script_VED.js', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://sbx.pagesjaunes.fr/RealMedia/ads/Creatives/OasDefault/EDITO_HOME_RIGHT/anim_HP_v2-04-2006.swf', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://sbx.pagesjaunes.fr/RealMedia/ads/Creatives/OasDefault/EDITO_HOME_RIGHT/visuels_webcam.swf', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://sbx.pagesjaunes.fr/RealMedia/ads/Creatives/OasDefault/EDITO_HOME_RIGHT/visuels_photo.swf', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://sbx.pagesjaunes.fr/RealMedia/ads/Creatives/OasDefault/EDITO_HOME_RIGHT/visuels_trafic.swf', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://sbx.pagesjaunes.fr/RealMedia/ads/Creatives/OasDefault/Edito_webcams/new_04-2006.jpg', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
$response=getUrl('http://e.pagesjaunes.fr/js/m.js', '', '', SITE_PJ.'pj.cgi?', false, HOST_PJ);
|
|
|
|
$response2=getUrl($e_cookie, $response1['header']['Set-cookie'], '', SITE_PJ, true, HOST_PJ);
|
|
|
|
$cookies=$response1['header']['Set-cookie'] . $response2['header']['Set-Cookie'];
|
|
|
|
$input_image=$VALID_ARR=$NUM_RUE=$NEW_DEPARTEMENT=$OBJ_GEO='';
|
|
|
|
// Requête d'interrogation
|
|
$postData=array(
|
|
'ACTIVITE_VALIDATED_ASCII'=>'',
|
|
'ID_THEME_SDE'=>'',
|
|
'LISTE_RUB_AVEC_THEME'=>'',
|
|
'input_image'=>$input_image,
|
|
|
|
'FRM_ACTIVITE'=>$activite,
|
|
'FRM_NOM'=>$raisonSociale,
|
|
'FRM_ADRESSE'=>$adresse,
|
|
'FRM_LOCALITE'=>$localite,
|
|
'FRM_DEPARTEMENT'=>$departement,
|
|
|
|
'JF_INSCRIPTIONS_REQ.x'=>'25',
|
|
'JF_INSCRIPTIONS_REQ.y'=>'4',
|
|
'faire'=>'decode_input_image',
|
|
'DEFAULT_ACTION'=>'jf_inscriptions_req',
|
|
'SESSION_ID'=>$SESSION_ID,
|
|
'VID'=>$VID,
|
|
'INFO_VILLE'=>'non',
|
|
'CODE_LOC_INFO_VILLE'=>'00000000',
|
|
'IV_ACTIVATION'=>'oui',
|
|
'lang'=>'FR',
|
|
'pays'=>'FR',
|
|
'srv'=>'PJ',
|
|
'TYPE_RECHERCHE'=>'ZZZ');
|
|
//print_r($postData);//die();
|
|
sleep(1);
|
|
$response=getUrl(SITE_PJ, $cookies, $postData, SITE_PJ, true, HOST_PJ);
|
|
$pageHtml=$response['body'];
|
|
|
|
if (count($tabNT=getTabListeNonTrouve($pageHtml))>0)
|
|
{
|
|
// Pas de réponses pour ces critères
|
|
// Il faut élargir la recherche !
|
|
$tabNTk=array_keys($tabNT);
|
|
$input_image=$tabNT[0];
|
|
$DEFAULT_ACTION='inscriptions_req';
|
|
$NEW_DEPARTEMENT=getTextInHtml($pageHtml, '<input type="hidden" name="NEW_DEPARTEMENT" value="', 'value="', '">');
|
|
$OBJ_GEO=getTextInHtml($pageHtml, '<input type=hidden name=OBJ_GEO value="', 'value="', '">');
|
|
}
|
|
elseif (count($tabGU=getTabListeGU($pageHtml))>0)
|
|
{
|
|
// Plusieurs Adresses possibles pour l'adresse donnée
|
|
// print_r($tabGU);
|
|
$input_image=getBonneAdresse($adresse, $tabGU);
|
|
$DEFAULT_ACTION='jf_inscriptions_req';
|
|
$VALID_ARR=getTextInHtml($pageHtml, '<input type=hidden name=VALID_ARR value="', 'value="', '">');
|
|
$NUM_RUE=getTextInHtml($pageHtml, '<input type=hidden name=NUM_RUE value="', 'value="', '">');
|
|
}
|
|
|
|
if ($input_image<>'') {
|
|
$CODE_LOC_INFO_VILLE=getTextInHtml($pageHtml, '<input type="hidden" name="CODE_LOC_INFO_VILLE" value="', 'value="', '">');
|
|
|
|
$postData=array(
|
|
'GEO_DEP'=>'', // New
|
|
'faire'=>'decode_input_image',
|
|
'DEFAULT_ACTION'=>$DEFAULT_ACTION,
|
|
'input_image'=>$input_image,// diff
|
|
'SESSION_ID'=>$SESSION_ID,
|
|
'VID'=>$VID,
|
|
'INFO_VILLE'=>'oui', // non dans la recherche préc.
|
|
'CODE_LOC_INFO_VILLE'=>$CODE_LOC_INFO_VILLE, // diff
|
|
'IV_ACTIVATION'=>'oui',
|
|
'lang'=>'FR',
|
|
'pays'=>'FR',
|
|
'srv'=>'PJ',
|
|
'TYPE_RECHERCHE'=>'CLOC', // ZZZ
|
|
'SAV_ADRESSE'=>$adresse, //
|
|
'SAV_LOCALITE'=>$localite, // New
|
|
'SAV_DEPARTEMENT'=>$departement, //
|
|
'FRM_NOM'=>$raisonSociale,
|
|
'FRM_ADRESSE'=>$adresse,
|
|
'FRM_LOCALITE'=>$localite,
|
|
'FRM_DEPARTEMENT'=>$departement,
|
|
|
|
'FRM_TYPE_PUB'=>'TOUS',
|
|
'RP_FORM'=>'',
|
|
'VALID_LOC'=>$CODE_LOC_INFO_VILLE,
|
|
'VALID_ARR'=>$VALID_ARR,
|
|
'NUM_RUE'=>$NUM_RUE,
|
|
'test_flash'=>'',
|
|
'ESPLUS'=>'',
|
|
'NEW_DEPARTEMENT'=>$NEW_DEPARTEMENT,
|
|
'OBJ_GEO'=>$OBJ_GEO,
|
|
);
|
|
print_r($postData);
|
|
sleep(1);
|
|
$response=getUrl(SITE_PJ, $cookies, $postData, SITE_PJ, true, HOST_PJ);
|
|
$pageHtml=$response['body'];
|
|
}
|
|
|
|
$nbReponses=trim(getTextInHtml($pageHtml, '<tr><td align="left" class=txtrequetetotal valign=middle nowrap><b>', '<b>', 'réponse(s)</b></td>'));
|
|
$tabRep=getTabResponses($pageHtml);
|
|
|
|
if (count($tabRep)==$nbReponses)
|
|
return $tabRep;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function getTabResponses($pageHtml) {
|
|
|
|
$tabRepTmp=explode ('class=fdinscr', $pageHtml);
|
|
$tabRep=array();
|
|
foreach($tabRepTmp as $key => $value)
|
|
{
|
|
if ($key>0) {
|
|
$raisonSociale=getTextInHtml($value, 'class=fdrsinscr', '<b>', '</b>');
|
|
$ligneAdresse=html_entity_decode(getTextInHtml($value, '<td align="left" class=txtinscr ><b>', '<b>', '|'));
|
|
$tabligneAdresse=explode('<br>', $ligneAdresse);
|
|
$ligneAdresse1=strip_tags($tabligneAdresse[0]);
|
|
$ligneAdresse2=strip_tags($tabligneAdresse[1]);
|
|
$dispoPlan =(bool)(strpos($value, '<b>Plan</b>'));
|
|
$dispoIti =(bool)(strpos($value, '<b>Itinéraire</b>'));
|
|
$dispoPhoto =(bool)(strpos($value, '<b>Photo</b>'));
|
|
$dispoWeb =(bool)(strpos($value, '<b>Site</b></a> '));
|
|
$lienWeb=getTextInHtml($value, '<a target="_blank" href="http://www.pagesjaunes.fr/CGI/MOD?', 'href="', '" ');
|
|
$page=getUrl($lienWeb, '', '', '', true);
|
|
$lienWeb=$page['header']['Location'];
|
|
|
|
/*echo "Enreg n°$key : RS='$raisonSociale'\r\n";
|
|
echo "Enreg n°$key : Adresse1='$ligneAdresse1'\r\n";
|
|
echo "Enreg n°$key : Adresse2='$ligneAdresse2'\r\n";
|
|
echo "Enreg n°$key : Plan ?='$dispoPlan'\r\n";
|
|
echo "Enreg n°$key : Itineraire ?='$dispoIti'\r\n";
|
|
echo "Enreg n°$key : Photo ?='$dispoPhoto'\r\n";
|
|
echo "Enreg n°$key : Web ?='$dispoWeb'\r\n";
|
|
echo "Enreg n°$key : Site WEB='$lienWeb'\r\n\r\n";*/
|
|
array_push($tabRep, array( 'raisonSociale' =>$raisonSociale,
|
|
'AdresseLigne1' =>$ligneAdresse1,
|
|
'AdresseLigne2' =>$ligneAdresse2,
|
|
'Dispo_Plan' =>$dispoPlan,
|
|
'Dispo_Iti' =>$dispoIti,
|
|
'Dispo_Photo' =>$dispoPhoto,
|
|
'Dispo_Web' =>$dispoWeb,
|
|
'LienWeb' =>$lienWeb));
|
|
}
|
|
}
|
|
return $tabRep;
|
|
}
|
|
|
|
function getBonneAdresse($adresse, $tabGU) {
|
|
|
|
// tableau de mots à vérifier
|
|
$words = array_keys($tabGU);
|
|
|
|
// aucune distance de trouvée pour le moment
|
|
$shortest = -1;
|
|
|
|
// boucle sur les des mots pour trouver le plus près
|
|
foreach ($words as $word) {
|
|
|
|
// calcule la distance avec le mot mis en entrée,
|
|
// et le mot courant
|
|
$lev = levenshtein($adresse, $word);
|
|
|
|
// cherche une correspondance exacte
|
|
if ($lev == 0) {
|
|
|
|
// le mot le plus près est celui-ci (correspondance exacte)
|
|
$closest = $word;
|
|
$shortest = 0;
|
|
|
|
// on sort de la boucle ; nous avons trouvé une correspondance exacte
|
|
break;
|
|
}
|
|
|
|
// Si la distance est plus petite que la prochaine distance trouvée
|
|
// OU, si le prochain mot le plus près n'a pas encore été trouvé
|
|
if ($lev <= $shortest || $shortest < 0) {
|
|
// définission du mot le plus près ainsi que la distance
|
|
$closest = $word;
|
|
$shortest = $lev;
|
|
}
|
|
}
|
|
/*
|
|
echo "Mot entré : $adresse\n";
|
|
if ($shortest == 0) {
|
|
echo "Correspondance exacte trouvée : $closest\n";
|
|
} else {
|
|
echo "Vous voulez dire : $closest ?\n";
|
|
}*/
|
|
return $tabGU[$closest];
|
|
}
|
|
?>
|