IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Robot d'indexation en PHP


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut Robot d'indexation en PHP
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    <?
     
    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");
    	$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 )

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

  2. #2
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    le code est particulièrement indigeste, tu devrais essayer la POO !
    tu auras moins de problème pour le modifier et tu y passeras moins de temps ...


    tu aurais du montrer le code de la page "connect.php" pour pouvoir être sur de l'erreur mais a vue de nez je dirais que tu as saturé ta BD de connexion !

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut j'ai un truc à dire en rapport
    hum, c'est l'heure de digérer.

    Faire attention aussi sur quels flux, on peur faire des annuaires link.

    par exemple google, il apprécie pas qu'on tape dans la base trop régulièrement.

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Oui le code est carrément barbare car c'était juste un test que j'ai codé à l'arrache pour voir si le robot pouvait être autonome, après j'aurais affiné tout ça mais je crois que je vais laisser tomber car je n'y connais presque rien en PHP objet
    Merci quand même à vous 2

Discussions similaires

  1. Index alphabétique php
    Par Johngtrs dans le forum jQuery
    Réponses: 9
    Dernier message: 04/06/2012, 14h25
  2. Robot d'Indexation FREE
    Par Sba3Net dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 14/08/2008, 19h42
  3. Robot d'indexation ?
    Par Sba3Net dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 06/04/2008, 23h50
  4. Session et robot d'indexation
    Par Tee shot dans le forum Langage
    Réponses: 3
    Dernier message: 19/05/2007, 00h12
  5. Réponses: 10
    Dernier message: 07/12/2006, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo