Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2008, 18h28   #1
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 419
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 419
Points : 546
Points : 546
Envoyer un message via MSN à amoiraud
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 :
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 :


Citation:
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2008, 22h05   #2
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
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 !
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2008, 22h18   #3
Membre éprouvé
 
Inscription : juin 2007
Messages : 350
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 350
Points : 407
Points : 407
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.
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2008, 23h42   #4
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 419
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 419
Points : 546
Points : 546
Envoyer un message via MSN à amoiraud
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h32.


 
 
 
 
Partenaires

Hébergement Web