Script php/mysql de contrôle des échanges de liens

dadovb

WRInaute passionné
Bonjour à tous,

Actuellement en pleine campagne de netlinking, je me suis fendu d'un petit script de contrôle des échanges de liens. Parce que bon, ça a du arriver à tout le monde de mettre en place des échanges de liens qui comme par hasard disparaissent au bout de quelques semaines... :(

C'est du bon vieux php/mysql. Il faut une table ("liens") dans la BD avec les champs suivants :

reference : identifiant unique du lien
lien : page du site partenaire où est censé apparaitre le lien
pagerank : valeur de la petite barre verte de la google toolbar (à titre purement indicatif, bien sur :wink: )
site : si vous gérez plusieurs sites, vous pouvez les différencier dans ce champ

Perso, je la remplis tranquillement à la main à chaque fois qu'un nouvel échange est en place.

Côté PHP :

La fonction PHP qui détecte si au moins un lien vers le site $site est présent sur la page $url.
IMPORTANT : la fonction renvoie l'anchor text du lien s'il est trouvé
IMPORTANT : vous avez besoin du framework PEAR (http://pear.php.net/)


Code:
function controlUrl($url,$site){
	
	require_once "HTTP/Request.php";
	
	$req =& new HTTP_Request($url);
	$req->addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
	
	$response = $req->sendRequest();
	
	if (PEAR::isError($response)) {
	    return false;
	} else {
	  
	  	$reponse	= $req->getResponseBody();
	  	// supprimer les retour à la ligne d'un texte 
		$reponse	= str_replace(CHR(10)," ",$reponse); 
		// et celle là aussi : 
		$reponse	= str_replace(CHR(13)," ",$reponse); 	  	
	  
		if(preg_match('$<[Aa](.*?)[href|HREF]=["|\']http://'.$site.'(.*?)["|\'](.*?)>(.*?)</[Aa]>$',$reponse,$tab) || preg_match('$<[Aa] [href|HREF]=["|\']http://'.$site.'(.*?)["|\'](.*?)>(.*?)</[Aa]>$',$reponse,$tab)){
			
			$anchor	= $tab[count($tab)-1];
			//on test si c'est une image
			if(preg_match('[img(.*?)alt="(.*?)"]',$anchor,$t) || preg_match("[img(.*?)alt='(.*?)']",$anchor,$t)){
				$anchor	= "Image : ".$t[count($t)-1];
			}elseif(preg_match('[img]',$anchor)){
				$anchor	= "Image : pas d'attribut alt";
			}
			
			return $anchor;
		
		}
		//cas spéciaux de saut de page
	else{
			return false;
		}
	}
	
}

Ensuite le script qui est lancé en CRON une fois par semaine :

Code:
set_time_limit(5000);
require ("fonctions.php");

/*dans le cas où vous gérez plusieurs sites, on passe le site qu'on souhaite tester en paramètres (cf champ "site" dans la table)*/
$site	= $_GET['site'];

	ConnectToDatabase();
 
	$sql	= "SELECT ref, lien FROM liens WHERE site = '$site'";
	$resultats = mysql_query($sql, $_SESSION['connection']) or die(mysql_error());
	
	$ligne	= mysql_fetch_assoc($resultats);
	$txt	= '<html>';
	
	while($ligne){
		
		$trouve	= controlUrl($ligne['lien'],$site);
		
		if($trouve){
			$txt	.= "Lien trouvé sur  : <i>".$ligne['lien']."</i> || référence : ".$ligne['ref']." || <u>$trouve</u><br>";
		}else{
			$txt	.= "<strong>Pas de lien trouvé sur</strong> : <a href='".$ligne['lien']."'>".$ligne['lien']."</a> || référence : ".$ligne['ref']."<br>";
		}
		
		$ligne	= mysql_fetch_assoc($resultats);
		
	}
	echo $txt;
	
	EnvoiMailHTML('votreemail@ndd.com','','controlepartenariats@votresite.com', 'Contrôle des partenariats : '.$site, $txt."</html>");

Résultat :
Un mail se dépose dans votre boite mail et vous affiche tous les liens OK. Pour les pages où il n'a pas trouvé le lien, il met le lien dans le mail pour que vous ayez juste à cliquer dessus pour aller vérifier si effectivement, vous avez disparu du site de votre "partenaire".

A savoir : L'expression régulière utilisée pour détecter le lien et ressortir l'anchor text n'est pas parfaite, il y a des sites où elle ne fonctionne pas, mais j'ai passé déjà trop de temps à la trouver... Si y'a un expert qui passe dans le coin, il est le bienvenu pour l'améliorer.


Voilà, j'espère que ça vous servira. :D
 

webmasterlamogere

WRInaute passionné
si le lien est dans un commentaire html tu vas le détecter mais il ne sera pas valide.
Code:
<!-- <a href="http://www.tonsite.fr">ton site</a> -->
 

Discussions similaires

Haut