Probablement un problème de regexp....? (extraction d'URL)

Probablement un problème de regexp....? (extraction d'URL) - PHP - Programmation

Marsh Posté le 16-07-2008 à 23:38:17    

Bonjoir à tous !

 

Je rencontre un problème avec un script d'extraction de liens extrait depuis:http://www.sunyday.net/article-PHP [...] -page.html (il y a aussi les explications techniques concernant le script)

 

Ce script fonctionne bien sur certaines pages web mais pas sur les miennes, voici un extrait du code HTML d'une de mes pages:

 

                                     

Code :
  1. <tr><td><a class="ad_headline hover_red" href="/encrypt.php?ps=538427a7d0&dn=monsite.com.com&vu=eCa_W-5b-p-yALMj4%26num%3D4%26adurl%3Dhttp%3A%2F%2Fwww.tf1.fr%2Fe%2F%3Dca-dp_3ph_xml&cc=0.1&bc=0.1&sk=2945+4&qt=main&tg=5&ld=20">Liens1</a></td></tr>
  2.                                             <a href="/encrypt.php?ps=538427a7d0&dn=monsite.com.com&vu=eCa_W-5b-p-yALMj4%26num%3D4%26adurl%3Dhttp%3A%2F%2Fwww.tf1.fr%2Fe%2F%3Dca-dp_3ph_xml&cc=0.1&bc=0.1&sk=2945+4&qt=main&tg=5&ld=20";<a>blabla</a>
 

Le problème (je pense), est que la forme des URL n'est pas http://....du coup, le script ne les prend pas et je n'arrive pas à le modifier (mes connaissances sont assez limites).
Et voici le code que j'utilise pour capturer les URLs:

Code :
  1. $URL = 'http://www.monsite.com/'; 
  2.      
  3.     // Retrieve URL informations 
  4.     $RegEx='(http:\/\/|HTTP:\/\/|https:\/\/|HTTPS:\/\/)([a-zA-Z.0-9-]*)([\/a-zA-Z.-_]*\/)'; 
  5.     ereg($RegEx,$URL,$Values); 
  6.     $URL_Proto  = $Values[1]; 
  7.     $URL_Server = $Values[2]; 
  8.     $URL_Folder = $Values[3]; 
  9.  
  10.    // Retrieve document & search for URLs 
  11.    $Document = file_get_contents($URL); 
  12.    
  13.    $RegEx    = '#<[aA](\s)*(href|HREF)(\s)*=(\s)*[\"|\'](.*?)[\"|\'](.*?)>#is'; 
  14.    preg_match_all($RegEx,$Document,$Results,PREG_PATTERN_ORDER); 
  15.    foreach ($Results[5] as $Link) 
  16.     { 
  17.      if ( ereg(":",$Link) )
  18.       {
  19.        $RegEx = "#([a-zA-Z]*):#is";
  20.        preg_match_all($RegEx,$Link,$ResultsProto,PREG_PATTERN_ORDER);
  21.        $Protocol = strtoupper($ResultsProto[1][0]);
  22.        if ( $Protocol == "HTTP" || $Protocol == "HTTPS" )
  23.         echo $Link."\r\n";
  24.     }
  25.     else
  26.     echo $URL_Proto.$URL_Server.$URL_Folder.$Link."\r\n"; 
  27. }
 


Que puis je faire pour que ça fonctionne ?

 

Merci à tous !
RedVivi


Message édité par redvivi le 16-07-2008 à 23:47:50
Reply

Marsh Posté le 16-07-2008 à 23:38:17   

Reply

Marsh Posté le 17-07-2008 à 16:31:39    

essaye pour ta première parenthèse ceci :  
 

Code :
  1. ([http:\/\/|HTTP:\/\/|https:\/\/|HTTPS:\/\/]{0,1})


 
*edit*  plus de problème de duplicité de protocole
 
btw tes regexp sont un peu crado ... genre par de ^, pas de $ , pas de slash, etc.  ça marche peut-être comme tu les écris mais c'est pas le plus clean...


Message édité par ZeBix le 17-07-2008 à 16:47:20
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed