Attention ! Etes vous sûrs d'avoir une bonne assurance emprunteur pour votre crédit immobilier ?


avr 12

Poster automatiquement sur Wordpress avec PHP

Tag: Codingnoreply @ 2:57

Non ce blog n’est pas mort, seulement je suis occupé à d’autres projets en ce moment. C’est pourquoi l’article d’aujourd’hui sera bref, mais j’espère pourra vous être utile.

Il arrive parfois qu’on ait des besoins particuliers comme par exemple automatiser la publication de d’articles sur Wordpress qui ont besoin de manipulations côtés serveur avant d’être postées. Par exemple récupérer l’horoscope du jour.

Pour cela, plutôt que d’utiliser une batterie d’extensions qui vont faire mouliner encore un peu plus le bestiau, il peut être judicieux d’utiliser les fonctions XML-RPC de Wordpress, combinées à quelques lignes de PHP !

Pour cela, rien de plus simple : il faut d’abord activer la publication par XMLRPC dans l’administration de votre blog wordpress ; cette option se présente sous la forme d’une case à cocher dans la page Ecriture de la section Réglages (pour les francophones).

Dans un deuxième temps je vous recommande de créer un utilisateur spécial pour se connecter à votre blog via le XMLRPC ; afin de pouvoir poster des articles il devra avoir au moins des droits d’auteur.

Plus délicat, les fonctions XMLRPC de PHP doivent être activées dans votre php.ini. Malgré ce qu’en dit la documentation PHP, chez moi le module XML-RPC n’était pas actif par défaut et j’ai même dû le récupérer et redémarrer Apache avant de pouvoir utiliser les fonctions XMLRPC, sur une debian ça donne ceci (vous devez être identifiés en tant que root) :

apt-get install php5-xmlrpc
/etc/init.d/apache2 restart

Mettons que ça ait fonctionné et que votre configuration PHP soit maintenant à jour, voici une petite fonction qui vous permet de poster sur votre blog wordpress avec le login et password de l’utilisateur que vous avez créé précédemment :

function wpPostXMLRPC($title,$body,$rpcurl,$username,$password,$category,$keywords= »,$encoding=‘UTF-8′)
{
    $title = htmlentities($title,ENT_NOQUOTES,$encoding);
    $keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);
     
    $content = array(
        ‘title’=>$title,
        ‘description’=>$body,
        ‘mt_allow_comments’=>0,  // 1 pour autoriser les commentaires
        ‘mt_allow_pings’=>0,  // 1 pour autoriser les trackbacks
        ‘post_type’=>‘post’,
        ‘mt_keywords’=>$keywords,
        ‘categories’=>array($category)
    );
    $params = array(0,$username,$password,$content,true);
    $request = xmlrpc_encode_request(‘metaWeblog.newPost’,$params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_URL, $rpcurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    $results = curl_exec($ch);
    curl_close($ch);
    return $results;
}

Petite explication des paramètres de la fonction wpPostXMLRPC

  • $title : le titre de l’article
  • $body : le corps de l’article en HTML
  • $rpurl : l’URL du moteur XMLRPC de votre blog, en général http://blog_url/xmlrpc.php
  • $username : le login de l’utilisateur qui va poster (il doit avoir les permissions adéquates)
  • $password : le mot de passe de l’utilisateur qui va poster
  • $category : le nom de la catégorie dans laquelle sera classé l’article
  • $keywords : les tags (mots clés) associés à l’article sous forme d’une chaine vide si il n’y en a pas, ou d’une liste de mots séparés par des virgules sinon
  • $encoding : l’encodage, par défaut UTF-8 mais vous pouvez le modifier en fonction des paramètres de votre blog

Par défaut dans cette fonction, les commentaires et les pings sont désactivés, mais comme indiqué en commentaire, vous pouvez les activer en remplaçant les valeurs à 0 par des 1.

Voilà voilà, en éspérant que ce modeste script pourra faire patienter les fans !

46 Responses à “Poster automatiquement sur Wordpress avec PHP”

  1. Porntruie dit :

    Bonjour,

    Je suis tombé sur votre article (très intéressant) et je souhaiterai avoir d’avantage d’information le concernant.

    - Vous ne dites pas ou doit être intégré cette fonction ? Est-ce dans le xmlrpc.php ?
    - La variable « $rpurl » n’est pas intégré dans votre code, c’est justement cela qui me fais douter de l’emplacement de cette fonction.
    - Vous dites que la variable « $category » définit le nom de la catégorie, mais est-il possible de jouer sur plusieurs catégories ? Avec un « array() » par exemple !? Sinon, faut-il mettre réellement le nom ou l’ID de la categorie ?
    - La variable « mt_keywords » dans le tableau, permet de définir le meta-field « keyword », je suppose ? Est-ce utilisable pour d’autre meta-fields, tel que mt_blabla1, mt_blablabla2, etc…?

  2. Porntruie dit :

    Autant pour moi: « $rpurl » est bien indiqué dans le script, il avait échappé au moteur de Chrome. Toutefois, les autres questions restes sans réponses. Merci d’avance pour votre réponse.

  3. joselito dit :

    désolé j’ai oublié de répondre :) en fait $rpurl en general c’est ton_blog/xmlrpc.php

    je suis pas certain, bien que j’adore ton pseudo, que tu ais tout bien saisi sinon : il n’y a rien a modifier dans le code de ton wordpress hein.

    concernant les categories, c’est evident que oui on peut en passer plusieurs puisque dans le script je passe un array($category), il faut juste modifier un peu la fonction si on veut pouvoir passer plusieurs categories (soit on passe direct le tableau, soit par exemple une chaine de caracteres avec les cats separees par des virgules)

    pour mt_keyword non cela n’a rien a voir avec la balise meta mais correspond aux tags wordpress associes a un article. apres tu peux toujorus avoir un plugin qui les fout en balise meta keyword aussi, mais ca c’est autre chose.

  4. Porntruie dit :

    Ok, merci de ta réponse ;)

    Tu aime mon pseudo comme j’aime ton ndd (domaine) ;) C’est bien un pseudo veridique, en fait c’est le nom de l’un de mes projet xXX, donc pas de soucis la dessus, je ne suis pas un spammer fou. :D

    En fait, c’est la première fois que j’utilise CURL et je viens de me rendre compte que Dreamhost mon hosting ne permet pas de l’utiliser en mutualisé (enfin j’attend encore leur confirmation). SNIF!!!
    Tu ne connaitrerais pas une autre solution pour envoyer un contenu dans la bdd de wordpress.

    En fait le truc c’est que j’ai un projet (un peu à la manière d’un moteur de recherche « bot ») qui devrait préalablement crawler des données sur Internet, pour ensuite les insérées dans la bdd pour ensuite être affiché.

    J’ai essayé de le faire en PHP, mais impossible d’envoyer des variables en POST sans CURL. Et quand bien même pour cela faudrait connaitre les écritures SQL que Wordpress fait, une fois le formulaire (new post) envoyé.

    Pour bien faire faudrait que je puisse connecter mon scripts PHP directement à wordpress, mais pour cela faudrait que je dispose de ces commande SQL et savoir quoi insérer et ou, tu me suis ?

    Une idée ? (si tu as compris mon charabia ;) )

  5. noreply dit :

    curl n’est pas la seule facon d’envoyer un formulaire par post en php, il y a aussi fsockopen ou tu peux utiliser les fonctions fopen et autres avec un stream_context… Voir la doc sur le site PHP…

  6. Bill dit :

    Does anyone have any ideas on how to use this code to post values to custom fields? I’m using the following code, and everything works perfectly except for my custom fields: $link and $discount-type.

    $title,
    ‘description’=>$body,
    ‘mt_allow_comments’=>1, // 1 to allow comments
    ‘mt_allow_pings’=>1, // 1 to allow trackbacks
    ‘post_type’=>’post’,
    ‘mt_keywords’=>$keywords,
    ‘categories’=>array($category),
    ‘discount-type’=>$discounttype,
    ‘link’=>$link
    );
    $params = array(0,$username,$password,$content,true);
    $request = xmlrpc_encode_request(’metaWeblog.newPost’,$params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_URL, $rpcurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    $results = curl_exec($ch);
    curl_close($ch);
    return $results;
    }
    ?>

  7. Hoa Tran dit :

    Please help me explanation for more clearly about these parameter
    $rpcurl, $category or please give me some sample

    Thanks,
    Viet Name

  8. Canyon dit :

    Intéressant. Merci de l’astuce. T’as un problème avec ton rss, nan?

  9. Canyon dit :

    Edit: y a un problème si ça vient de mon google reader^^?

  10. sharedigest dit :

    Merci pour un tres bon article, c’est vraiment un bon fonction.

  11. Remote Post Wordpress Autoblog « Kwamroo’s Blog dit :

    [...] sure that the CURL and standard xmlrpc libraries are activated on your server first: –> Initial Source (in French) –> in English (but less [...]

  12. zappak dit :

    hey…

    earlier I was able to work it properly but after changed my hosting it ’s not working..

    it’s showing faultCode 403 faultString Bad login/pass combination.

    there is all detail is correct I dont’ know wht’s prob there

    Can you help me out??

    you can contact me on vora.aslam1 AT Gmail DoT com

  13. Lyrics dit :

    I’ve got error:

    Fatal error: Call to undefined function xmlrpc_encode_request() in posting.php on line 24

  14. cadix dit :

    ça marche mieux en remplaçant les guillemets simples chez moi:

    function wpPostXMLRPC($title,$body,$rpcurl,$username,$password,$category,$keywords,$encoding)
    {
    $title = htmlentities($title,ENT_NOQUOTES,$encoding);
    $keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);

    $content = array(
    « title »=>$title,
    « description »=>$body,
    « mt_allow_comments »=>0, // 1 pour autoriser les commentaires
    « mt_allow_pings »=>0, // 1 pour autoriser les trackbacks
    « post_type »=> »post »,
    « mt_keywords »=>$keywords,
    « categories »=>array($category)
    );
    $params = array(0,$username,$password,$content,true);
    $request = xmlrpc_encode_request(« metaWeblog.newPost »,$params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_URL, $rpcurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    $results = curl_exec($ch);
    curl_close($ch);
    return $results;
    }

  15. 10 awesome things to do with cURL dit :

    [...] [...]

  16. sitnentaddilk dit :

    nudcw best diet pills iun jwefl fast weight loss zmze jll tcrvu. xywya Weight Loss Pill Reviews hls Weight Loss Pills Reviewed epmjz snq.

  17. Jonahex dit :

    I agree with the post above and I will get more information from google.

  18. nklven dit :

    Hi,

    Does anyone know how to login to wordpress blog using curl. I used the following script. It works but my blog get’s login under the server I am using the code. Please help me to login to the blog seperately,

    $blog_id=$blog['blog_id'];
    $blog_url=$blog['blog_url'];
    $blog_username=$blog['blog_username'];
    $blog_password= $blog['blog_password'];
    echo $blog_url;
    $blog_url1=$blog_url. »wp-login.php »;
    echo $blog_url1;
    $redirect = « wp-admin/post-new.php »;
    echo « 123″;
    $ch = curl_init($blog_url);
    curl_setopt($ch, CURLOPT_URL, $blog_url);
    curl_setopt($ch, CURLOPT_POSTFIELDS,’log=’.urlencode($blog_username).’&pwd=’.urlencode($blog_password).’&redirect_to=’.urlencode($redirect));
    curl_setopt($ch, CURLOPT_POST, 1);
    echo « commin »;
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_COOKIEJAR, « cookies.txt »);
    curl_setopt($ch, CURLOPT_COOKIEFILE, « cookies.txt »);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, « Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3″);
    $result = curl_exec($ch);
    echo $result;

  19. Jeune bi dit :

    Merci pour l’astuce :) Bonne continuation à vous !

  20. Gabriel Dancause dit :

    De quelle manière faut-il modifier la fonction pour pouvoir passer plus d’une catégorie ?

    Merci 1000 fois pour le script. Très utile.

  21. JarSalLoada dit :

    Her nipples again of his bitchy boss in such. Of paulas arse in each hand and pulled him into me and then pull it up thoughts about. Her a considerable tip from him when he woke up down so that i could grab the edge of the pool. And began to suck him as hard as she could on his pants clad butt as he yelped but started wrapping another rope around her ankles with more money. He said oclock shadow grazed my inner thighs and all around my pussy; she seemed to relish tasting the mixture of our juices off of it and into your. Terror at me his face my lips not to worry. I were down to our underwear eyes and saw my face second to gaze at her stunning naked chest before kissing each nipple out of hell. The bathroom space between the ceiling and the cabinet the base of his cock everything from close. Up you were so beautiful a large table in the back of the office and they left. Reacted without thinking had until he would finally empty. http://polshestogo.net – kent wa swinger bar millersburg adult personals

  22. Ativan dit :
  23. geoge dit :
  24. Cptvkezs dit :
  25. Rhppafkd dit :
  26. Crxkethk dit :
  27. Dgprfqyu dit :
  28. Yghawkam dit :
  29. Hhwidhos dit :
  30. Wnxxuzct dit :
  31. Ozybmbbk dit :
  32. Zzahjnsd dit :
  33. Tmhdyxkq dit :
  34. Ghanvwml dit :
  35. Olendkrx dit :

    this post is fantastic preteen nudist
    >:-]

  36. Dluqntjj dit :

    Another service? ls models
    050949

  37. Ehrzjidl dit :

    I’m happy very good site Sandra Model Bbs yxmq

  38. Shgrpbvx dit :

    I live in London Super Bikini Model
    712

  39. Oqumfhky dit :

    I love this site Kdz Pedo
    8-PPP

  40. Taftattildick dit :

    Hi!
    like you post: to my
    @fuywezce twitter

  41. Xtwvdjad dit :

    How many more years do you have to go? 11 Yo Pthc Torrent
    879

  42. Kmbspbao dit :

    Some First Class stamps Boy Foot Preteen
    saoe

  43. Xlhthjhm dit :

    How much were you paid in your last job? Preteen Lolita Pussy
    %DDD

  44. Ujrlunop dit :

    What do you like doing in your spare time? Young Nude Lolitas
    >:-[[[

  45. al dit :

    good info, thanks for sharing

  46. Fuck Team Five dit :

    dluiyqpso.tfy.wjbhsb.dbtjop.tqbn, Evefanclub fuckteamfive 1.jpg 006, xIhNzZd, [url=http://fuckteamfivevideos.com/]FuckTeamFive[/url], ExWFSYa, http://fuckteamfivevideos.com/ Evefanclub fuckteamfive, ouavtFT.

Poster un commentaire