Peut-être ne connaissez-vous pas cet outil de création automatique de Blog à la volée…Dans ce cas, cette petite classe ne vous sera pas d’une grande utilité ( quoi que )
Utilisateurs de LFE, Vous avez des Blogs non ? Personnellement j’ai arreté de compter après 15 000…Alors ces blogs sont bien sympathiques…Reste qu’il ne sont pas très vivants. Des BL dans les posts, cool, des commentaires ? NADA … Un blog qui ne vit pas devient très vite soupçonneux pour le Webmaster du WPMU que vous êtes en train de Spammer visiter.
Alors pour faire vivre ces blogs, j’ai décidé de me coder un ch’tite class pour poster des commentaire anonymement sur mes blogs…Impossible soit dit en passant en RPC, sauf si on connait l’astuce.
A noter que fada de Dofollow et en plein dans le code, j’en avais zappé le nofollow par défaut dans les blogs, cette idée est donc utile seulement pour faire vivre un blog ( Merci à ce Black Hat Seo pour la remarque qui m’a fait percuter ).
Je post et j’explique ensuite:
<?php
require ('ixr.class.php');//http://scripts.incutio.com/xmlrpc/
/**
* WordPress_client
*
* @package
* @author Jeremy A.
* @copyright 2010
* @version 1.0
* @access public
* @site www.scripts-marketing.com
*/
class WordPress_client
{
private $url;
private $login;
private $pass;
private $rpc;
private $erreurs = array();
public $useragent;
/**
* WordPress_client::__construct()
*
* @param mixed $url
* @param mixed $login
* @param mixed $pass
* @param string $useragent
* @return
*/
public function __construct($url, $login, $pass, $useragent = '')
{
$this->url = $url;
$this->login = trim($login);
$this->pass = trim($pass);
$this->useragent = (!$useragent)?'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)':$useragent;
$this->rpc = new IXR_Client($this->url, false, 80, $this->useragent);
}
/**
* WordPress_client::list_methods()
*
* @return
*/
public function list_methods()
{
$status = $this->rpc->query("system.listMethods");
if (!$status)
{
$this->erreurs[] = "Error ( ".$this->rpc->getErrorCode()." ) : ";
$this->erreurs[] = $this->rpc->getErrorMessage()."\n";
exit;
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::verif_rpc()
*
* @return
*/
public function verif_rpc()
{
$status = $this->rpc->query("wp.getUsersBlogs", $this->login, $this->pass);
if (!$status)
{
return false;
}
return true;
}
/**
* WordPress_client::get_erreurs()
*
* @return
*/
public function get_erreurs()
{
return $this->erreurs;
}
/**
* WordPress_client::poster_article()
*
* @param mixed $titre
* @param mixed $categorie
* @param mixed $article
* @return
*/
public function poster_article($titre, $categorie = array(1), $article)
{
if (!is_int($categorie))
{
$this->erreurs[] = "votre catégorie doit être un nombre.";
}
$status = $this->rpc->query("blogger.newPost",
"",
"",
$this->login,
$this->pass,
"<title>".$this->formate($titre)."</title>
<category>$categorie</category>".$this->formate($article),
1);
if (!$status)
{
$this->erreurs[] = "Votre Article $titre semble posté sur votre blog mais une erreur dans la réponse renvoyée par votre Blog est survenue :";
$this->erreurs[] = "Erreur ( ".$this->rpc->getErrorCode()." ) : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::poster_commentaire()
*
* @param mixed $author_mail
* @param mixed $author_name
* @param mixed $author_url
* @param mixed $content
* @return
*/
public function poster_commentaire($author_mail, $author_name, $author_url, $content)
{
$articles = $this->recents_articles(5);
foreach ($articles as $article)
{
$ids[] = $article['postid'];
}
$ids = (!is_array($ids))?(array)$ids:$ids;
$post_id = array_rand(array_flip($ids), 1);
if (!is_int($post_id))
{
$this->erreurs[] = "souci au niveau de l'id.";
}
$comment['author'] = $author_name;
$comment['author_email'] = $author_mail;
$comment['author_url'] = $author_url;
$comment['content'] = $content;
$status = $this->rpc->query("wp.newComment", "", $this->login, $this->pass, $post_id,
$comment);
if (!$status)
{
$this->erreurs[] = "Erreur de commentaire :";
$this->erreurs[] = "Erreur ( ".$this->rpc->getErrorCode()." ) : ".$this->rpc->getErrorMessage()."\n";
}
else
{
$this->editer_commentaire($this->rpc->getResponse(), $author_mail, $author_name,
$author_url, $content);
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::editer_commentaire()
*
* @param mixed $post_id
* @param mixed $author_mail
* @param mixed $author_name
* @param mixed $author_url
* @param mixed $content
* @return
*/
public function editer_commentaire($post_id, $author_mail, $author_name, $author_url,
$content)
{
if (!is_int($post_id))
{
$this->erreurs[] = "L'id doit être un nombre.";
}
$comment['author'] = $author_name;
$comment['author_email'] = $author_mail;
$comment['author_url'] = $author_url;
$comment['content'] = $content;
$status = $this->rpc->query("wp.editComment ", "", $this->login, $this->pass, $post_id, $comment);
if (!$status)
{
$this->erreurs[] = "Erreur de commentaire :";
$this->erreurs[] = "Erreur ( ".$this->rpc->getErrorCode()." ) : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::recents_articles()
*
* @param mixed $nombre
* @return
*/
public function recents_articles($nombre)
{
$status = $this->rpc->query("blogger.getRecentPosts", "", "", $this->login, $this->pass, $nombre);
if (!$status)
{
$this->erreurs[] = "Erreur ( ".$this->rpc->getErrorCode()." ) : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::recents_comments()
*
* @return
*/
public function recents_comments()
{
$status = $this->rpc->query("wp.getComments", "", $this->login, $this->pass);
if (!$status)
{
$this->erreurs[] = "Erreur ( ".$this->rpc->getErrorCode()." ) : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::lister_categories()
*
* @return
*/
public function lister_categories()
{
$status = $this->rpc->query("wp.getCategories", "", $this->login, $this->pass);
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::lister_tags()
*
* @return
*/
public function lister_tags()
{
$status = $this->rpc->query("wp.getTags", "", $this->login, $this->pass);
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
else
{
return $this->rpc->getResponse();
}
}
/**
* WordPress_client::get_options()
*
* @param mixed $name
* @return
*/
public function get_options($name)
{
if (!$name)
{
$status = $this->rpc->query("wp.getOptions", "", $this->login, $this->pass);
}
else
{
$names = (!is_array($name))?(array )$name:$name;
$status = $this->rpc->query("wp.getOptions", "", $this->login, $this->pass, $names);
}
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::get_authors()
*
* @return
*/
public function get_authors()
{
$status = $this->rpc->query("wp.getAuthors", "", $this->login, $this->pass);
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::get_theme()
*
* @return
*/
public function get_theme()
{
$status = $this->rpc->query("wp.getPageTemplates", "", $this->login, $this->pass);
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::get_users()
*
* @return
*/
public function get_users()
{
$status = $this->rpc->query("wp.getUsersBlogs", $this->login, $this->pass);
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::suggest_cat()
*
* @return
*/
public function suggest_cat()
{
$status = $this->rpc->query("wp.suggestCategories", "", $this->login, $this->pass, 'twitter', 5);
if (!$status)
{
$this->erreurs[] = "Erreur( ".$this->rpc->getErrorCode().") : ".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::set_options()
*
* @return
*/
public function set_options()
{
$status = $this->rpc->query("wp.setOptions", "", $this->login, $this->pass, $option);
if (!$status)
{
$this->erreurs[] = "Erreur(".$this->rpc->getErrorCode()."):".$this->rpc->getErrorMessage()."\n";
}
return $this->rpc->getResponse();
}
/**
* WordPress_client::formate()
*
* @param mixed $texte
* @return
*/
private function formate($texte)
{
$cur_encoding = mb_detect_encoding($texte);
$rep = ($cur_encoding == "UTF-8" && mb_check_encoding($texte, "UTF-8"))? $texte : utf8_encode($texte);
return $rep;
}
/**
* WordPress_client::verif_url()
* @tutorial permet de vérifier si une url est accessible
* avant de faire toute autre opération dessus.
* @param mixed $url
* @return code header ( 200,302,404,... )
*/
public function verif_url($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
$data = curl_exec($ch);
curl_close($ch);
return (preg_match("/HTTP\/1\.[1|0]\s(\d{3})/", $data, $matches))?$matches[1]:'error';
}
}
?>
Vous le remarquerez, cette classe est un bout d’une plus grosse bébête qui me convient un peu mieux que le fameux Script White Hat…
Il vous faut donc la lib IXR http://scripts.incutio.com/xmlrpc/ pour faire marcher la chose.
Le xmlrpc.php de WordPress empéchera tout webmaster connecté de publier sous un autre identifiant que « Admin » ou ce que vous avez mis par défaut dans votre configuration.
Pour celà, nous postons le commentaire en tant qu’admin, puis nous le modifions directement derrière avec l’id qui nous est retrourné par le Blog.
Exemple:
$go = new WordPress_client($url, $login, $pass, $useragent = 'Google.com');
//echo "Commentaire sur $url<hr/>";
if(!$go->poster_commentaire($email,$auteur,$url_commentaire,$commentaire))
{
echo "<p>PAS OK sur $url</p>";
}
else
{
echo "<p>OK sur $url</p>";
}
Si vous êtes ici, vous codez surement donc je ne m’étalerais pas plus sur le fonctionnement que je vous laisse découvrir.
Cette classe est une première version de ce que j’ai pu faire pour mon projet personnel, je ne vais pas tout vous dire de suite tout de même.
à tantôt comme dirait Motercalo
#1 by Sylvain Ze blog Wizard on 21 mai 2010 - 10 h 38 min
Très bon Jérémy
Autre atout de la jouer comme ça, outre le fait de passer pour « naturel » auprès du gestionnaire de la plateforme,
c’est que Google va voir des commentaires arriver régulièrement sur les posts du blog et va donc le considérer lui aussi comme vivant. Même avec un lien nofollow, même sans lien (c’est encore plus naturel de mixer avec et sans), des commentaires réguliers sur une page ce n’est que du bon…
#2 by Amy on 4 juin 2010 - 20 h 44 min
[...] me suis donc lancé sur l’élaboration d’un gestionnaire MultiBlog dont cette classe PHP maintenant sympa pour LFE me sert assez [...]
#3 by motercalo on 20 juin 2010 - 9 h 18 min
Merci pour ce très bon petit script que je vais tester dans la journée je pense
#4 by Frienly-Froggy on 9 septembre 2010 - 18 h 28 min
Idem, je suis en train de pondre mon homade LFE, n’ayant pas 297$…
Merci pour le script en tout cas, je vais voir ce que je peux en tirer.
#5 by chump on 13 octobre 2010 - 22 h 43 min
ton post avec le substr me faisait dire que t’étais un ptit rigolo, mais avec ca, je confirme… tu testes au moins ce tu écris dans ton blog ?
tu m’as fais perdre 15 min en publiant une ressource inutilisable. j’admire les personnes qui publient leur boulot, mais uniquement quand il y a une utilité derrière… mon mail au cas ou tu souhaites répondre : nookie_c@hotmail.com
#6 by admin on 14 octobre 2010 - 9 h 12 min
Je teste et je retouche très csouvent ce que je publie chef…Je ne vais pas tout donner non plus mais ce code fonctionne parfaitement.
Ok pour le Substr, c’est une chose que je ne connaissais pas du tout…Merci de ton soutien, c’est toujours plaisant :d
#7 by chump on 18 octobre 2010 - 0 h 38 min
ne publie pas ce com mais tu peux virer mon mail ? je pensais pas que tu allais publier mon com’
merci
#8 by Azerty on 4 novembre 2010 - 7 h 21 min
Salut, comment tu l’integre dans lfe ?
#9 by admin on 4 novembre 2010 - 9 h 44 min
Heu, je ne joues pas avec LFE, trop lent à mon goût, j’ai préféré développer mon propre soft