petit code pour controle de partenariat

WRInaute discret
Slt à tous,

Voilà, j'ai vu ici que certains cherchaient à vérifier si leurs partenaires tenaient leurs promesses dans le temps, à savoir si nos liens étaient tjrs présents sur leur site. 8)

Je vous propose en attendant d'avoir mieux (y' a tjrs mieux) ce script .

Il nécessite (malheureusement pour certains) de pouvoir exécuter php5, mais pas mal d'hébergeurs maintenant le proposent.
Il teste par groupe de 10 url car je me suis rendu compte en le testant que certains sites étaient lent, et on a vite dépassé le temps autorisé pour un script chez certains hébergeurs (à modifier selon votre cas).

Il demande une base de données avec une table de trois champs.
Le champ url est celui qui stocke l'url de la page où est censé être notre lien
Le champ lien est celui qui stocke l'url qu'on a fournie à notre partenaire.
Si vous ne voulez pas de l'id, penser à changer $tab[1] par $tab[0] et $tab[2] par $tab[1].
Si certains d'entre vous désire l'adapter à un fichier texte je ferai un bout de code en plus.

Certains trouverons que je suis un peu lourd, mais j'ai essayé d'être le plus simple et précis possible pour que les tout-débutants s'en sortent.

Faites moi savoir ce que vous en pensez.

A copier et coller dans un fichier d'extension .php5, après avoir créé la table table_url.
Comme champ pour la table: id (numérique et incrémentation), url (varchar 250 -on ne sait jamais-) et lien (varchar).
Placez l'url de vos partenaires dans la table (champ url) et l'url de votre site tel que vous leur avez fourni (champ lien).

Voici le code:

Code:
<html>
<body>

<?php

// fonction pour se connecter à la base
// il est préférable de mettre cette fonction dans un autre fichier protégé
// et de l'inclure ( include('chemin_du_fichier'); )

function connexion(){

	$link = mysql_connect("hote_de_la_base","pseudo_de_la_base","mot_de_passe_de_la_base")or die("connexion hote failed1");
	$result = mysql_select_db("nom_de_la_base") or die("connexion base failed");
	return $link;

}

// renvoie les urls et les liens stockée dans la base de données table_url
// la table contient 3 champs: id, url (la page du partenaire) et
// lien (celui que vous avez placez chez le partenaire)

function trouve_url($limit){

	$result = mysql_query("select * from table_url LIMIT $limit,10")or die("requete trouve_url failed");
	return $result;

}

// ouvre une url et teste si le lien est présent
// renvoie 0 si absent, 1 si présent, 2 si présent en nofollow

function test_url($url, $lien){

	$trouve = "Absent";
	$trouve_nofollow = "";

	$doc = @DOMDocument::loadHTMLFile($url);
	
	if(!empty($doc)){
	$tags_recherche = $doc->getElementsByTagName("a");
	$meta_recherche = $doc->getElementsByTagName("meta");
	
	foreach ($meta_recherche as $meta){// cherche dans les metas la présence de nofollow, ou noindex
		$content = $meta->getAttribute("content");
		if( eregi( "nofollow", strtolower($content) ) ){$trouve_nofollow = " META nofollow";}
		elseif( eregi( "noindex", strtolower($content) ) ){$trouve_nofollow = " META noindex";}
	}
		
	foreach ($tags_recherche  as $tag){
		$r = $tag->getAttribute("href");
		if( trim($r) == $lien || trim($r) == $lien."/"){
			$trouve = "Pr&eacute;sent";
			$follow = $tag->getAttribute("rel");
			if( strtolower(trim($follow)) == "nofollow"){$trouve = "Pr&eacute;sent avec nofollow";}
			$onclick = $tag->getAttribute("onclick");
			if( $onclick!=""){$trouve = "Pr&eacute;sent avec onclick='".$onclick."'";}
			break;
		}
	}

	}
	else{ $trouve = "erreur ouverture";}
	return $trouve." ".$trouve_nofollow;

}

// la recherche se limite à 10 url à partir de $limit
// (pour ne pas dépasser le temps d'exécution du script si un serveur ne répond pas).
// Au premier passage, $limit est fixé à 0 (première url dans la base)

if(!isset($limit)){$limit = 0;}

$l = connexion(); //se connecte à ma base de donnée

$tab_url = trouve_url($limit); // recherche dans la base les urls à scanner

// teste chaque url
while($tab = mysql_fetch_array($tab_url)){

	$url = $tab[1];
	$lien = $tab[2];
	
	$resultat .= "<a href='$url' target='_blank'>".$url."</a> reponse : ".test_url($url,$lien)."<br>";
}

mysql_close($l); //ferme la connexion

echo $resultat; //renvoie le résultat

// on rajoute 2 boutons pour voir les 10 prochains résultats et les 10 précédants

print "<br /><br />";

$precedent = $limit-10;
$suivant = $limit+10;

if($limit != 0){
	print "<form action='' method='post'>
		<input type='text' name='limit' value='".$precedent."' />
		<input type='submit' value='10 pr&eacute;c&eacute;dants' />
	</form>";
}

print "<form action='' method='post'>
	<input type='text' name='limit' value='".$suivant."' />
	<input type='submit' value='10 suivants' />
</form>";

// et voilà
?>

</body>
</html>

Pour moi ça marche, merci de remonter les bug ou perfectionnements
 
A
Anonymous
Guest
Test partenariat

C'est un bon début, mais cela ne tiens pas compte des liens en rel="nofollow", des métas contenant nofolow, des pages orphelines, des liens menant à cette page de lien avec un attibut nofollow, les liens de type javascript, etc...
 
WRInaute discret
Slt, et merci

Pour le nofollow dans le lien, j'ai remplacé
Code:
if( trim($r) == $lien || trim($r) == $lien."/"){$trouve = 1;break;}
par
Code:
if( trim($r) == $lien || trim($r) == $lien."/"){
    $trouve = 1;
    $follow = $tag->getAttribute("rel");
    if( strtolower(trim($follow)) == "nofollow"){$trouve = 2;}
    break;
}

Ca m'a d'ailleurs permis de constater qu'un de mes chers partenaires s'en était servi :evil: A dégager, j'vous jure...

J'ai également remplacé:
Code:
$resultat .= $url." reponse : ".test_url($url,$lien)."<br>";
par
Code:
$resultat .= "<a href='$url' target='_blank'>".$url."</a> reponse : ".test_url($url,$lien)."<br>";
ce qui permet d'allez jeter un oeil manuellement, ça peut être pratique

Pour le javascript, tu peux me donner un exemple? Parceque je suppose que tu ne parles pas d'un javascript que tu as donné à un partenaire (ça n'aurait pas bcp d'intérêt).

Merci, j'édite le code de départ
 
A
Anonymous
Guest
Lien javascript

pas facile à détecter !
l'option href peut contenir l'url correcte mais sur les événement comme onclic il est possible de coder un javascript qui redirige vers une autre page type loader en inhibant le lien dans le href... Note que les liens de ce type sont comptabilisés par google mais ils génèrent souvent une redirection... gare au 302 !
 
WRInaute discret
Bien, je vais tester la présence de onclick et si il existe l'afficher après la réponse.
Il faudra alors faire une vérification manuelle, pour le moment

Pour les métas, je recherche dans les métas si nofollow existe et la réponse sera 3 .
Je pense que les réponses ne seront plus numériques mais textuelles, c'est plus commode.

Merci
 
WRInaute discret
Voila donc,

Ce code détecte maintenant:
La présence de nofollow ou noindex dans les métas
La présence ou non de notre lien sur la page du partenaire
La présence de nofollow dans le lien
La présence d'un onclick dans le lien (javascript)
Si il y a eu une erreur à l'ouverture de la page

Pour les pages orphelines, ou les liens pointant vers elle avec nofollow, sur un petit code comme ça c'est pas possible.
Mais je pense que c'est le genre de truc que l'on peut regarder avant de faire son partenariat, il serait surprenant que le "faux partenaire" change la totalité de son site à chaque nouvelle escroquerie de lien (quoi que...)

En espérant que ça servira à quelques uns d'entre vous
 
A
Anonymous
Guest
javascript & co

J'ai dit que c'était pas facile car une action javascript n'indique pas nécessairement une redirection douteuse ! Beaucoup d'annuaires utilisent ce type de code pour compter les hits par exemple... et dans ce cas c'est l'url naturelle qui est invoquée : donc bon site !

La solution (assez lourde) consisterait à questionner le lien lui même (dans le cas de la présence d'un code javascript) pour obtenir son code de retour et à l'analyser...
 
WRInaute discret
C'est pour ça que j'ai placé l'url du partenaire dans les résultats.
Si la réponse montre la pésence d'un onclick, la première chose à faire est d'aller voir sur le site du partenaire pour voir de quoi il s'agit, et non de se précipiter sur nos codes pour supprimer le lien du partenaire.

Sur la cinquataine de partenaires que j'ai, 4 n'avez plus de lien vers moi. J'y suis allé, et seulement 2 en fait avez supprimé mon lien, sur les deux autres mon lien avait changé de page, avec PR identique ou supérieur, donc OK.
 
WRInaute passionné
Je vais abuser, mais il serait possible d'avoir la table table_url et merci pour les "tout-débutants" :wink: .
Il est possible de voir le script tourner ?Eventuellement l'url en pv...
merci
 
WRInaute discret
Slt

Vous l'avez dans le premier post:
nom de la table table_url
champ id numérique (int) autoincrémentation clé primaire
champ url varchar 250 (on se sait jamais)
champ lien varchar 250 (j'espère que vous n'avez pas d'url aussi longue sur votre site)

Pour la créer, copiez-collez ce code dans un fichier extension .php et exécutez-le
Code:
<?
function connexion(){ 

   $link = mysql_connect("hote_de_la_base","pseudo_de_la_base","mot_de_passe_de_la_base")or die("connexion hote failed1"); 
   $result = mysql_select_db("nom_de_la_base") or die("connexion base failed"); 
   return $link; 

} 

$l=connexion();
// votre requete de création de la table
$create_table = "CREATE TABLE table_url
( id int auto_increment not null,
url VARCHAR (250) not null,
lien VARCHAR (250) not null,
PRIMARY KEY(id)
)";
$r = mysql_query("$create_table", $l);
if($r){echo "table créée";}
else{echo "Echec de la création de table";}
mysql_close($l);
?>
 
Nouveau WRInaute
Bonjour

Bonjour,

et merci pour votre travail.

ça fait des mois que je cherche un script pouvant me révéler qui ne respecte pas le lien retour sur mes annuaires. existe t'il un truc tout fait ? (je n'ai pas les connaissances pour le faire). Mais j'ai penser à ce bout de code, je peux le mettre avant l'inscription dans l'annuaire ? ... mais es qu'il est possible de rajouter un champ email afin de contacter le webmaster pour qu'il puisse remettre le lien ?


merci en tout cas
 
Nouveau WRInaute
Salut à tous,

depuis peu le code ne fonctionne plus pour moi alors que je n'ai fais aucune modification...
Je suis en php5 donc c'est pas de là que vient le problème... en fait le code fonctionne seulement pour le premier scan dans la bdd, ensuite si je clique sur le boutton 10 suivants c'est toujours la même page qui se charge avec les mêmes urls déjà controlées, impossible de controler le reste !
Augmenter le nombre d'urls à scanner n'est pas la solution car il y en a qui sont longues à controler, alors si vous avez une petite idée d'où çà peut venir n'hésitez pas à m'en faire part car j'ai déjà essayé mais sans succès.

Merci d'avance !
 
Nouveau WRInaute
Dax701 a dit:
Salut à tous,

depuis peu le code ne fonctionne plus pour moi alors que je n'ai fais aucune modification...
Je suis en php5 donc c'est pas de là que vient le problème... en fait le code fonctionne seulement pour le premier scan dans la bdd, ensuite si je clique sur le boutton 10 suivants c'est toujours la même page qui se charge avec les mêmes urls déjà controlées, impossible de controler le reste !
Augmenter le nombre d'urls à scanner n'est pas la solution car il y en a qui sont longues à controler, alors si vous avez une petite idée d'où çà peut venir n'hésitez pas à m'en faire part car j'ai déjà essayé mais sans succès.

Merci d'avance !


C'est dommage ... donc j'en cherche toujours 1 qui fonctionne !
 
Nouveau WRInaute
Dax701 a dit:
Salut à tous,

depuis peu le code ne fonctionne plus pour moi alors que je n'ai fais aucune modification...
Je suis en php5 donc c'est pas de là que vient le problème... en fait le code fonctionne seulement pour le premier scan dans la bdd, ensuite si je clique sur le boutton 10 suivants c'est toujours la même page qui se charge avec les mêmes urls déjà controlées, impossible de controler le reste !
Augmenter le nombre d'urls à scanner n'est pas la solution car il y en a qui sont longues à controler, alors si vous avez une petite idée d'où çà peut venir n'hésitez pas à m'en faire part car j'ai déjà essayé mais sans succès.

Merci d'avance !


C'est dommage ... donc j'en cherche toujours 1 qui fonctionne !
 
Nouveau WRInaute
Dax701 a dit:
Salut à tous,

depuis peu le code ne fonctionne plus pour moi alors que je n'ai fais aucune modification...
Je suis en php5 donc c'est pas de là que vient le problème... en fait le code fonctionne seulement pour le premier scan dans la bdd, ensuite si je clique sur le boutton 10 suivants c'est toujours la même page qui se charge avec les mêmes urls déjà controlées, impossible de controler le reste !
Augmenter le nombre d'urls à scanner n'est pas la solution car il y en a qui sont longues à controler, alors si vous avez une petite idée d'où çà peut venir n'hésitez pas à m'en faire part car j'ai déjà essayé mais sans succès.

Merci d'avance !


C'est dommage ... donc j'en cherche toujours 1 qui fonctionne !
 
Discussions similaires
Haut