Bonjour la famille,
je suis entrain de réaliser un site d'echanges de liens et j'aimerais faire un système de vérification par "PING" qui analysera chaque jour les pages des sites partenaires, afin de détecter si les liens y figurent toujours.
bien à vous
Merci
Bonjour,
En gros tu veux savoir si un lien et toujours présent sur une page internet??
Dans ce cas, curl + une regex derrière devrait être pas mal
Bonjour
Je viens d'essayer de faire ça :
Faudra ameliorer les tests.. j'ai peur que dans certain cas la regex match mal ... (evidemment sur tous les sites ou ya une moulinette js etc... ça marchera pas)
<?php
/**
* Renvoit la liste des attributs href des liens de la page $url
*/
function get_urls_from_site($url){
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 8);
$data = curl_exec($curl);
curl_close($curl);
preg_match_all('#<a (.)*href="(.+)"#U', $data, $results);
return $results[2];
}
/**
** Renvoit true si $lien est dans $liste
*/
function LienEstDansLaListe($liste,$lien){
$lienTrouve = false;
for($i=0;$i<count($liste);$i++){
if($lien == trim($liste$i],"/")){
$lienTrouve = true;
break;
}
}
return $lienTrouve;
}
//Verifie si les liens sont sur le site $url
//Renvoit un tableau :
//1ere valeur true si ya eu un probleme, false sinon
//2eme valeur, un tableau contenant [site => url] des problemes
function VerifierPresenceSurSite($listeLien,$url){
$liensSite = get_urls_from_site($url);
$pb = false;
$listePb = array();
for($i=0;$i<count($listeLien);$i++){
if(LienEstDansLaListe($liensSite,$listeLien$i])){
echo '<div style="color:green">'. $listeLien$i]." : ok </div>"; // Retirer si on veut juste les KO
}else{
echo '<div style="color:red">'. $listeLien$i]." : KO</div>"; // peu retirer si on veut rien logguer.
$listePb] = array($url => $listeLien$i]);
$pb = true;
}
}
return array($pb,$listePb);
}
//Renvoit la liste de tous les liens manquant sur tous les sites, teste chaque lien de $listeLien sur chaque site de $ListeSite
function VerifierLienSurSites($listeLien,$ListeSite){
$listePb = array();
for($i=0;$i<count($ListeSite);$i++){
echo '<br><div>'.$ListeSite$i].'</div><br>' ;//Enlever affichage si on veut
$temp = VerifierPresenceSurSite($listeLien,$ListeSite$i]);
if($temp[0]){
$listePb = array_merge($listePb, $temp[1]);
}
}
return $listePb;
}
//liens à rechercher
$listeLien =array("http://www.lastfm.fr/listen/user/Grafikart","http://www.lequipe.fr/Tennis","http://www.joueurdugrenier.fr/joueur-du-grenier-les-jeux-disney");
//site sur lesquels rechercher
$listeSites = array("http://www.grafikart.fr","http://www.joueurdugrenier.fr","http://www.lequipe.fr");
//problemes stockés
$pbs = VerifierLienSurSites($listeLien,$listeSites);
var_dump($pbs);
?>
Le rendu suivit de l'objet renvoyé: (objet de la forme "site" => "lien non present")
A noter que il faut activer le module curl sous wamp (donc click gauche php extension php et activer curl)
Si malgrès tous cela ne fonctionne pas (genre wamp windows 7 64 bits) ..
mettre ça => http://www.mediafire.com/file/3ay381k3cq59cm2/php\_curl-5.4.3-VC9-x64.zip dans wamp/bin/php/phptruc/ext
cordialement
Antho
Bonsoir redkill , en gros j'aimerais verfier les pages des sites partenaires pour détecter si les liens y figurent toujours.
S'il s'agit de verifier si un lien n'est pas mort, un lien mort renverra un status 404 enfin dans la réponse http ya moyen de récuperer ce code de réponse: 200 ok, 500 pb internet, 404 not found, 100 erreur d authentification(parfois) bref, faut pas 404 en tout cas