Robot d'indexation

Petit nouveau ! | 9 Messages

27 sept. 2008, 16:28

Bonjour,
depuis hier j'essaye de faire un robot d'indexation de sites web en php, voici le code de la page du robot sur laquel on arrive la première fois par un formulaire tout simple :

Code : Tout sélectionner

<? if(isset($_POST['site'])){ if($_POST['site'] != ""){ $site = $_POST['site']; if(!isset($_SESSION['firstsite'])){ $_SESSION['firstsite'] = $site; } }else{ header("Location: index.php"); } }elseif(isset($_GET['site']) && $_GET['site'] != ""){ $site = $_GET['site']; }else{ include('connect.php'); $alea = rand(1, 12); $requete = mysql_query("SELECT * FROM liens_secour") or die("erreur requete"); $i=1; while($donnes = mysql_fetch_array($requete)){ $tabsite[$i] = $donnes['lien']; $i++; } $newsite = $tabsite[$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; } $code = file_get_contents($site); if(preg_match("<html>", $code)){ echo "<font color='#0000FF'>Indexation en cours ($site)</font>"; preg_match('!<title>(.+)</title>!isU', $code, $title); $titre = $title[1]; preg_match('!<meta name="description" content="(.+)"(.+)>!isU', $code, $description); $desc = $description[1]; $desc = str_replace("&ucirc;", "û", $desc); preg_match('!<meta name="keywords" content="(.+)"(.+)>!isU', $code, $clee); $keywords = $clee[1]; preg_match_all('!<a href="(.+)"(.+)!isU', $code, $lien); $nb=count($lien[1]); if($titre != '' && $desc != '' && $keywords != '' && $nb > 0){ $i = 0; foreach($lien[1] as $key => $value){ if(substr($lien[1][$key], 0, 7) == 'http://'){ $_SESSION['bonsliens'][$i] = $lien[1][$key]; $i++; } } $nbbonsliens = count($_SESSION['bonsliens']); $date=date('d/m/y H\hi'); include('connect.php'); $requete = mysql_query("SELECT * FROM bot_sites WHERE adresse_site='$site'"); $reponse = mysql_num_rows($requete); if($reponse == '0') { mysql_query("INSERT INTO bot_sites VALUES ('', '$titre', '$desc', '$site', '$keywords', '$date', '1')"); $alea = rand(0, $nbbonsliens); $newsite = $_SESSION['bonsliens'][$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; } else { echo "<font color='#CC0000'>Site déjà visité !</font>"; $alea = rand(0, $nbbonsliens); $newsite = $_SESSION['bonsliens'][$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; } }else{ if(isset($_SESSION['bonsliens'])){ $nbbonsliens = count($_SESSION['bonsliens']); $alea = rand(0, $nbbonsliens); $newsite = $_SESSION['bonsliens'][$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; }else{ include('connect.php'); $alea = rand(1, 12); $requete = mysql_query("SELECT * FROM liens_secour"); $i=1; while($donnes = mysql_fetch_array($requete)){ $tabsite[$i] = $donnes['lien']; $i++; } $newsite = $tabsite[$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; } } }else{ echo "<font color='red'>Erreur, page non html !</font><br/>"; echo "<a href='index.php'>Retour à l'index</a>"; if(isset($_SESSION['bonsliens'])){ $nbbonsliens = count($_SESSION['bonsliens']); $alea = rand(0, $nbbonsliens); $newsite = $_SESSION['bonsliens'][$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; }else{ include('connect.php'); $alea = rand(1, 12); $requete = mysql_query("SELECT * FROM liens_secour"); $i=1; while($donnes = mysql_fetch_array($requete)){ $tabsite[$i] = $donnes['lien']; $i++; } $newsite = $tabsite[$alea]; echo "<script language=\"JavaScript\"> setTimeout(\"window.location='adibot.php?site=$newsite'\",3000); </script>"; } } ?>
J'ai égallement une base SQL avec 2 tables :
- Une table 'bot_sites' dans laquelle j'enregistre les pages indexées
- Une table 'liens_secour' dans laquelle j'ai 12 sites de diver thèmes au cas ou le robot se perde sur une page ne contenant aucun lien pour le rediriger.

J'ai laissé tourné le robot quelques minutes et il marche à peu près bien, le problème c'est qu'au bout de quelques minutes il bloque :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a3379572/public_html/adibot.php on line 23

Erreur, page non html !
Retour à l'index

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a3379572/public_html/adibot.php on line 107
L'URL de la page est alors : http://www.monsite.com/adibot.php?site=
Mon script est pourtant censé aller piocher dans la table des liens de secours si la variable $_GET['site'] est vide (ce qu'il arrive à faire plusieurs fois avant de bloquer), mais la il bloque ici en rechargeant la page et en me mettant toujours cette erreur sql et je suis obligé de le relancer en retournant à l'index (et il me semble que le but d'un robot n'est pas d'être relancé à la main toute les 5 minutes :roll: )

quelqu'un à une idée du problème ?
Merci d'avance :wink:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 sept. 2008, 11:40

Faut procéder à l'envers... ton message te dis que ce n'est pas une page HTML. Ceci apparait quand le chaine "<html>" n'est pas trouvée dans $code. As-tu affiché pour ce cas la valeur de code et bien vérifié qu'elle était bien présente (et respectait bien la casse) ?

As-tu vérifié la valeur de $site pour savoir de quelle page il s'agissait ? A priori, le GET est bien géré et tu as très bien pu avoir eu recours à une page de secours.. faut juste vérifier que celle-ci fonctionne :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...