Classe PHP pour Pinger un service web
Par jaycreation le vendredi, septembre 24 2010, 14:56 - php - Lien permanent
Après un script simple pour “pinguer” les différents services web qui nous aident à rendre nos sites plus visibles, voici une class PHP5 plus évoluée qui va vous permettre de pinguer les services en fonction de leur cible.
Ainsi vous pourrez ne pas pinguer les services de blogging si vous avez un site web classique, ou ne pinguer que les aggrégateurs de flux comme feedburner pour vos RSS.
MAJ - ajout du XML-RPC
Documentation de la classe ping.class.php :
$ping = new Pinger("mon site sans http", "titre du site", "/atom.php");
$ping->all();
Donc pour exemple :
$ping = new Pinger("blog.jaycreation.net", "jay's help to create", "/post/Classe-PHP-Pinger-service-web");
$ping->all();
Vous allez ainsi pinguer tous les services présents dans le fichier ping.class.php.
Ping par thème :
Les adresses à pinguer sont classées par thèmes pour les cas plus spécifiques :- Sites
- Blogs
- Feeds
- autres
Pour connaître la liste des thèmes vous pouvez simplement faire :
$themes = $ping->getThemes();
foreach($themes as $theme){
echo($theme);
}
Pour ne pinguer qu’un thème vous avez deux solutions :
Pour les quatre thèmes de base :
$ping->nomDutheme();
donc :
$ping->sites();
$ping->blogs();
$ping->feeds();
$ping->autres();
Pour les RSS d’un site web on fera donc :
$ping = new Pinger("blog.jaycreation.net", "jay's help to create", "/post/Classe-PHP-Pinger-service-web");
$ping->sites();
$ping->feeds();
Pour un theme que vous avez ajouté vous-même :
$ping->theme("nomDeVotreTheme");
Ajouter un thème
Justement pour ajouter un nouveau thème contenant une ou plusieurs addresses :
$theme = "annuaires" ;
$adresses = array("ping.dmoz.com", "ping.dmoz.com/france") ;
$ping->addTheme($theme, $adresses)
Vous pouvez également ajouter une adresse à un thème qui existe :
$theme = "feeds" ;
$adresses = array("ping.dmoz.com", "ping.dmoz.com/france") ;
$ping->addAdresses($theme, $adresses)
Enfin, pour ne pinguer qu’une adresse précise :
$ping->oneSite("http://ping.feedburner.com");
Voici un exemple complet :
$theme = "annuaires";
$adresses = array("ping.dmoz.com", "ping.dmoz.com/france") ;
$ping = new Pinger("blog.jaycreation.net", "jay's help to create", "/post/Classe-PHP-Pinger-service-web");$ping->addTheme($theme, $adresses)
$ping->theme(‘annuaires’);
$ping->sites();
$ping->feeds();
Derniere astuce, pour afficher les erreurs passez la variable $print_errors à true :
$ping = new Pinger("blog.jaycreation.net", "jay's help to create", "/post/Classe-PHP-Pinger-service-web");
$ping->print_errors = true;
$ping->all();La classe est encore à améliorer et des adresses sont à ajouter.
Si vous testez des adresses qui fonctionnent n’hésitez pas à me les communiquer.
Si vous faites des améliorations, pas n’hésitez pas à me les communiquer également.
> Télécharger la classe ping.class.php <
Merci à Kevin pour ces conseils.
Commentaires
La class est simple mais bien faite et la syntaxe d’utilisation est très clair,
Bonjour,
Ce procédé à l’air super intéressant pour signaler les mises à jour d’un site aux nombreux moteurs, mais hélas je ne m’y connais pas en manip PHP.
J’ai placé le fichier pingclass.php à la racine du site et je ne sais comment faire pour pinger le site avec le thème “site”.
Pouves vous m’éclairer un peu plus ?
Merci
Bonjour Christine,
Une fois la classe ajouté à votre site (en copiant le fichier à la racine ou dans le dossier includes de votre site.)
Il vous faut appeler la classe sur la page de mise à jour de vos postes. (include(“/includes/ping.class.php”));
Puis, quand votre message s’enregistre, je vous conseil de tester si il est publié et dans ce test d’ajouter les lignes :
Le plus difficile dans votre cas va être de déterminer où et quand faire le ping. Tout dépend de votre but exacte (ping à chaque publication d’article, a chaque publication de commentaires, etc…) et de l’outils que vous utilisez. (CMS, plate-forme de blog, etc…).
Merci pour vos explication Jeremy, j’y vois plus clair.
J’ai placé le code:
(include(“/includes/ping.class.php”));
$ping = new pinger();
$ping->sites();
dans le fichier index.php du CMS de façon à ce qu’il ping la page d’accueil avec le thème “sites” lors d’une mise à jour, mais le cache ne change pas au bout de quelques minutes. Je vais tenter de coller le code sur un fichier PHP dédié à la gestion des pages et articles.
Une fois en place et si le ping fonctionne, n’y a t’il pas un risque de pénalité de la par de Google si la fréquence du ping est de l’ordre d’un par semaine ?
Merci
Effectivement, il vaut mieux le mettre sur une page de validation d’une mise à jour. Sinon google sera pingué a chaque chargement de la page index.php de votre site.
Avez-vous vérifié que votre hébergeur accéptait cette fonctionnalité ?
Vous pouvez également vérifier les retours du ping grâce à la fonction de débug :
$ping = new Pinger();
$ping->print_errors = true;
$ping->all();
vous pouvez essayer de rajouter l’adresse : “http://www.google.com/webmasters/to…”
Cette adresse est normalement utilisé pour avertir d’une MAJ de votre site map. Je ne sais pas si ça fonctionne tel quel.
Le code vas donc donner :
(include(“/includes/ping.class.php”));
$ping = new pinger();
$theme = “sites” ;
$adresses = array (“http://www.google.com/webmasters/to…”) ;
$ping->addAdresses($theme, $adresses);
$ping->sites();
Le plus simple à mes yeux, est de générer le ping au moment ou votre CMS crée les flux RSS.
Cela permet de pinguer les services comme feedburner et google met à jour son cache quasi immédiatement dans ce cas.
Pour un ping par semaine il n’y a aucun problèmes.
Sur un site qui est mis à jour très fréquemment, on peu même faire plusieurs ping par jours.
Il faut juste faire attention à ne pas pinguer les commentaires ou les entrées utilisateurs sur un site à succès.
Vous pouvez donc avoir l’esprit tranquille de ce côté.
Merci beaucoup pour cette réponse très complète, je vais dans un premier temps tenter d’ajouter le flux RSS sur le site afin d’indexer les nouvelles pages qui proviennent des galeries. Cette solution couplée au ping me parait la plus intéressante.
Bravo pour votre blog et encore merci ;)
Ce que je comprends pas totalement, c’est: que faut-il donner aux services de blog? L’url du blog ou des articles?
Si on ne donne que l’url du blog, que vont rechercher les services sur le blog?
Merci
Euh j’ai téléchargé la classe pour voir comment elle fonctionnait, tout à l’air correct jusqu’à:
// fonction de ping
//vous pouvez l’appeler directement en $ping->ping(“www.google.com”);
private function ping($adresse){ exec ("ping -n 4 $adresse", $output, $retval); if ($retval != 0) { $erreurs = "adresse en erreur : ".$adresse." retour : ".$retval." - ". $output."<br />" ; }ping -n 4 désolé mais ça va pas pinger grand chose..
Effectivement Kevin, désolé pour la coquille c’est corrigé dans la classe. Vous pouvez la télécharger sans le bug.
Pour les blog, il faut faire le ping avec les url des articles.
Dans certain services chaque url est mise à jour individuellement tu es donc sur de ne pas avoir de problèmes dans ce cas.
Rebonjour jaycreation,
Désolé j’ai mal dû m’exprimer, ta classe est faite juste pour tester si les services de ping son up ou pas?
Car sinon pour mettre à jour les services de ping avec les urls il faut utiliser xmlrpc.
Du genre:
<?php
$site_name = “Jaycreation”;
$site_url = “http://blog.jaycreation.net”;
$request = xmlrpc_encode_request(“weblogUpdates.ping”, array($site_name, $site_url));
$context = stream_context_create(array(‘http’ => array(
)));
$server = “http://rpc.weblogs.com/RPC2”;
$file = file_get_contents($server, false, $context);
$response = xmlrpc_decode($file);
if (is_array($response) and xmlrpc_is_fault($response)){
} else {
}
?>
Pioché sur http://techchorus.net/xml-rpc-clien…
Mais en utilisant weblogUpdates.extendedPing (voir http://weblogs.com/api.html), en fournissant l’url de la page mise à jour + l’url du rss.
C’est ce que je suis en train de réaliser mais je voulais une classe comme la tienne (car plus propre et multi-services), seulement il manque la partie xmlrpc :)
Merci Kevin pour ces précisions.
J’ai fait des modifs pour ajouter les fonctions xml-rpc en envoie.
J’ai mis à jour la classe, et ajouté un fichier d’exemple, car la création à légèrement changé.
Je vais mettre a jour la doc rapidement
Par contre la liste d’envoie à fondue devant le nombre d’adresses qui me renvoient des erreurs.
Si quelqu’un en test qui fonctionnent normalement avec cette classe, n’hésitez pas à mes les communiquer, je les ajouterai.
Merci pour cette classe.
J’interviens juste pour signaler que les urls suivantes me renvoient des erreurs sur le ping des sites :
-mod-pubsub.org/ping.php
-xianguo.com/xmlrpc/ping.php
Une fois commenté, ça roule.
J’en profite pour poser une question. Comment savoir que les urls ont bien été pingées ?
Une fois commenté, ça roule
Génial ! Je viens de lire plusieurs articles à ce sujet dont un qui dirige vers celui-ci.
Merci pour cette astuce.