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']), ''); } //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, ''); $VID=getTextInHtml($pageHtml, ''); $e_cookie=getTextInHtml($pageHtml, ''); $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, ''); $OBJ_GEO=getTextInHtml($pageHtml, ''); } 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, ''); $NUM_RUE=getTextInHtml($pageHtml, ''); } if ($input_image<>'') { $CODE_LOC_INFO_VILLE=getTextInHtml($pageHtml, ''); $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, '', '', 'réponse(s)')); $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', '', ''); $ligneAdresse=html_entity_decode(getTextInHtml($value, '', '', '|')); $tabligneAdresse=explode('
', $ligneAdresse); $ligneAdresse1=strip_tags($tabligneAdresse[0]); $ligneAdresse2=strip_tags($tabligneAdresse[1]); $dispoPlan =(bool)(strpos($value, 'Plan')); $dispoIti =(bool)(strpos($value, 'Itinéraire')); $dispoPhoto =(bool)(strpos($value, 'Photo')); $dispoWeb =(bool)(strpos($value, 'Site   ')); $lienWeb=getTextInHtml($value, '$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]; } ?>