wp2pluxml : passez de Wordpress ou SPIP à Pluxml en un clic !

nico_sombnico_somb Membres
juin 2014 modifié dans Modifications
Quittez WordPress ou SPIP pour PluXml avec wp2pluxml !

Le projet est sur github : https://github.com/nicosomb/wp2pluxml


Pour quitter WordPress, téléchargez la branche master (dernière version stable) https://github.com/nicosomb/wp2pluxml
Pour quitter SPIP, téléchargez la branche master également :) (sûrement instable, des bugs, etc.) https://github.com/nicosomb/wp2pluxml/
«13

Réponses

  • HamtaroHamtaro Membres
    Belle initiative ;)
  • GzygGzyg Membres
    Ça devrait en intéresser beaucoup !

    Bravo !


    à plus,

    Gzyg
  • StéphaneStéphane Membres, Ancien responsable de PluXml
    Oui belle initiative nico_somb

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • nico_sombnico_somb Membres
    mars 2013 modifié
    Première version disponible au téléchargement ici :

    https://github.com/nicosomb/wp2pluxml

    Pour les rapports de bugs, c'est ici :

    https://github.com/nicosomb/wp2pluxml/issues

    À vos claviers :) !
  • nice !!!!!!!

    magnifique ça ;)
    voila le package qui fera venir encore plus de membres sur pluxml ;)
  • En espérant qu'il y ait assez de personnes qui le testent pour trouver les petits bugs ;-)

    L'importation des billets se fait sans problème connu, l'importation des commentaires du blog Wordpress est en cours de développement.
  • L'importation des commentaires est opérationnelle :)
  • nico_sombnico_somb Membres
    mars 2013 modifié
    Nouvelle version dispo ici https://github.com/nicosomb/wp2pluxml avec conversion des catégories et des commentaires :)
  • nico_sombnico_somb Membres
    mars 2013 modifié
    Un groupe de discussions a été créé.
    Des questions, des remarques, des envies pour ce projet ? N'hésitez pas :)

    Il y a déjà une discussion concernant la récupération des médias de Wordpress.
    Venez apporter votre grain de sel :)
  • LenezirLenezir Membres
    Super initiative ! :)
  • Merci ! n'hésitez pas à tester pour remonter les bugs :)
  • j'ai essayé a partir du script de Nicolas Loeuillet de faire une version pr joomla en me basant sur les différents champs récupéré dans wordpress et l'equivalent sous joomla.

    J'ai modifié Wordpress.class.php en Joomla.class.php

    Quelqu'un peux me donner son avis sur le code ?

    Que voici
    <?php
    /**
     * Classe Joomla
     *
     * Correspond à un billet PluXml avec les données de Joomla
     *
     * @category   wp2pluxml
     * @author     Eric Seguinard 
     * @copyright  2010
     * @license    http://www.opensource.org/licenses/mit-license.php  MIT License
     Ce script est basé sur le travail de Nicolas Loeuillet pour wordpress.
     */
    
    class Wordpress
    {
        /**
         * Identifiant du billet sur 4 caractères (0000)
         * @var string
         */
        private $id;
        /**
         * Titre du billet
         * @var string
         */
        private $title;
             /**
        /**
         * Permet de savoir si on peut poster des commentaires. Si $allow_com vaut
         * 1, on peut poster. S'il vaut 0, on ne peut pas.
         * @var string
         */
    //         private $allow_com;
        /**
         * Introd du billet au format HTML
         * @var string
         */
        private $introtext;
        /**
         * Contenu du billet au format HTML
         * @var string
         */
        private $fulltext;
        /**
         * URL du billet
         * @var string
         */
        private $alias;
        /**
         * Date de publication du billet
         * @var string
         */
        private $created;
        /**
         * Nom de l'auteur des billets
         * @var string
         */
        private $created_by;
        /**
         * URL de la rubrique
         * @var string
         */
        private $sectionid;
        /**
         * Identifiant de la rubrique qui contient le billet sur 3 caractères (000)
         * @var string
         */
        private $catid;
        /**
         * Liste des commentaires du billet
         * @var array
         */
       // private $comments;
    
        /**
         * Constructeur
         *
         * @access public
         * @param SimpleXMLElement $item
         */
        public function  __construct(SimpleXMLElement $item)
        {
            $this->setTitle($item->title);
            $this->setAllowCom($item->comment_status);
            $this->setChapo($item->excerpt);
            $this->setContent($item->content);
            $this->setUrl($item->post_name);
            $this->setDate($item->post_date);
            $this->setRubriqueUrl($item->category);
         //   $this->setComments($item->comment);
        }
    
        /**
         * Setter de l'identifiant
         *
         * @access public
         * @param integer $id
         */
        public function setId($id)
        {
            $id = sprintf("%04s", $id);
            $this->id = $id;
        }
    
        /**
         * Getter de l'identifiant
         *
         * @access public
         * @return string identifiant sur 4 caractères (0000)
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * Setter de l'identifiant
         *
         * @access public
         * @param string $title
         */
        public function setTitle($title)
        {
            $this->title = $title;
        }
    
        /**
         * Getter du titre
         *
         * @access public
         * @return string
         */
        public function getTitle()
        {
            return $this->title;
        }
    
        /**
         * Setter de allow_com (commentaires autorisés)
         *
         * @access public
         * @param string $comment_status
         */
    //    public function setAllowCom($comment_status)
      //  {
        //    $this->allow_com = ($comment_status == 'open') ? '1' : '0';
        //}
    
        /**
         * Getter de allow_com
         *
         * @access public
         * @return integer
         */
      //  public function getAllowCom()
       // {
         //   return $this->allow_com;
        //}
    
        /**
         * Setter du chapeau
         *
         * @access public
         * @param string $chapo
         */
        public function setChapo($introtext)
        {
            $this->chapo = nl2br($introtext);
        }
    
        /**
         * Getter du chapeau
         *
         * @access public
         * @return string
         */
        public function getChapo()
        {
            return $this->chapo;
        }
    
        /**
         * Setter du contenu
         *
         * @access public
         * @param string $content
         */
        public function setContent($fulltext)
        {        
            $this->content = nl2br($fulltext);
        }
    
        /**
         * Getter du contenu
         *
         * @access public
         * @return string
         */
        public function getContent()
        {
            return $this->content;
        }
    
        /**
         * Setter de l'URL
         *
         * @access public
         * @param string $post_name
         */
        public function setUrl($post_name)
        {
            $toReplace = array('%c2%ab', '%c2%bb', '%c3%b8', '%d0%b0', '%e2%80%a6',
                '%c2%a0', '%e2%80%a6', '%c2%a0a', '_', '/');
            $post_name = str_replace($toReplace, '', $post_name);
            $this->url = $post_name;
        }
    
        /**
         * Getter de l'URL
         *
         * @access public
         * @return string
         */
        public function getUrl()
        {
            return $this->url;
        }
    
        /**
         * Setter de la date
         *
         * @access public
         * @param string $post_date
         */
        public function setDate($post_date)
        {
            $this->date = $post_date;
        }
    
        /**
         * Getter de la date
         *
         * @access public
         * @return string
         */
        public function getDate()
        {
            return $this->date;
        }
    
        /**
         * Setter de l'auteur
         *
         * @access public
         * @param string $author
         */
        public function setAuthor($author)
        {
            $this->author = $author;
        }
    
        /**
         * Getter de l'auteur
         *
         * @access public
         * @return string
         */
        public function getAuthor()
        {
            return $this->author;
        }
    
        /**
         * Setter de l'URL de la première rubrique
         *
         * @access public
         * @param array $categories ensemble des catégories du billet
         */
        public function setRubriqueUrl($categories)
        {
            $rubrique = '';
            foreach ($categories as $category) {
                if ($category['domain'] == 'category') {
                    $rubrique = $category['nicename'];
                    break;
                }
            }
            $this->rubrique_url = $rubrique;
        }
    
        /**
         * Getter de l'identifiant
         *
         * @access public
         * @return string
         */
        public function getRubriqueUrl()
        {
            return $this->rubrique_url;
        }
    
        /**
         * Setter de l'identifiant de la rubrique sur 3 caractères (000)
         *
         * @access public
         * @param string $rubrique_id
         */
        public function setRubriqueId($sectionid)
        {
            $this->sectionid = $sectionid;
        }
    
        /**
         * Getter de l'identifiant
         *
         * @access public
         * @return string
         */
        public function getRubriqueId()
        {
            return $this->sectionid;
        }
    	
        /**
         * Setter des commentaires
         *
         * @access public
         * @param array $comments
         */
        public function setComments($comments)
        {
            $tabComments = array();
            $count = 0;
            foreach ($comments as $comment) {
                if ($comment->comment_approved != 'spam') {
                    $tabComments[$count]['comment_author']       = $comment->comment_author;
                    $tabComments[$count]['comment_author_email'] = $comment->comment_author_email;
                    $tabComments[$count]['comment_author_url']   = $comment->comment_author_url;
                    $tabComments[$count]['comment_author_IP']    = $comment->comment_author_IP;
                    $tabComments[$count]['comment_date']         = $comment->comment_date;
                    $tabComments[$count]['comment_content']      = $comment->comment_content;
                    $count ++;
                }
            }
    
            $this->comments = $tabComments;
        }
    
        /**
         * Getter des commentaires
         *
         * @access public
         * @return array
         */
        public function getComments()
        {
            return $this->comments;
        }
    
        /**
         * Formate la date pour être utilisée dans le nom du fichier
         *
         * @access private
         * @return string
         */
        private function getDateForFilename()
        {
            return substr($this->date, 0, 4) . substr($this->date, 5, 2) .
                substr($this->date, 8, 2) . substr($this->date, 11, 2) .
                substr($this->date, 14, 2);
        }
    
        /**
         * Crée le nom du fichier
         *
         * @access public
         * @return string
         */
        public function getFilename()
        {
            return $this->id . '.' . $this->getRubriqueId() . '.' .
                $this->getDateForFilename() . '.' . $this->url . '.xml';
        }
    }
    
  • FrédéricFrédéric Membres
    mai 2010 modifié
    A première vus ca l'air bon.

    Ne fais tu pas un test en local ?

    En attendant un expert en la matière...
  • @securitoile : et ça donne quoi quand tu l'exécutes ?
  • Je recherche 2/3 personnes ayant un blog wordpress sous la main pour tester wp2pluxml.

    Est-ce qu'on a ça en stock ? :)
  • Petit point sur l'état d'avancement :

    Pour le moment, wp2pluxml assigne tout au même auteur (même si votre blog Wordpress contenait plusieurs auteurs).
    Les tags ne sont pas repris tant que ceux-ci ne seront pas gérés dans PluXml.
    Les liens inter-articles sont corrigés grâce au fichier .htaccess généré durant l'exécution de wp2pluxml. Ce fichier .htaccess s'occupe de la redirection des catégories et des billets.
  • Bonjour Nicolas, tu aurais les 2 site en ligne ? (le wordpress original et la migration sur Pluxml)
  • site original, mon blog : http://nicolas.loeuillet.org
    le site migré : http://dev.loeuillet.org

    Sur le site de dev, il n'y a pas encore le .htaccess qui redirige les anciennes URLs vers les nouveaux billets de PluXml. Et les images n'ont pas été copiées (pour ne pas blinder inutilement le serveur ;-) ) .

    N'hésitez pas à donner des remarques si y'en a ;-)
  • Et voila mon blog sous PluXml http://nicolas.loeuillet.org/
  • Ha oui vraiment du bon boulot Nicolat.

    Donc intérêt d'avoir le mod rewrite sur son hébergeur.
  • Parce que wp2pluxml vous permettra prochainement de migrer vers PluXml en venant d'une autre plate-forme, j'aurais besoin d'export XML d'autres structures de blog (Dotclear, Blogger & cie) si possible.

    Je suis en train de revoir l'architecture de l'outil pour permettre plus de souplesse et pouvoir ajouter une plate-forme de blogs plus facilement.

    Avez-vous des exports XML sous la main ? :)
    Ou alors savez-vous s'il existe des plugins sur chaque plate-forme pour les récupérer ?
  • le script pour joomla n'est pas bon car je n'ai pas tout compris dans une autre fichier Tools.class.php

    Bon j'ai fait ce que j'ai pu mais comme je ne suis pas développeur j'ai osé aller plus loin dans Tools.class.php
  • As-tu un export Joomla sous la main à m'envoyer stp ?
  • voila ma faible contribution
    http://www.multiupload.com/6O4CE4EOYD
  • Merci !
  • AirWAirW Membres
    Bonsoir !

    Peut-être vais-je écrire une énormité, mais bon, je me lance : et spip2pluxml, est-ce envisageable ?
  • bankaibankai Membres
    Un grand Bravo
  • StéphaneStéphane Membres, Ancien responsable de PluXml
    AirW a écrit:
    Bonsoir !

    Peut-être vais-je écrire une énormité, mais bon, je me lance : et spip2pluxml, est-ce envisageable ?
    Quelque soit l'outil de migration, cela demande de connaitre le syteme de départ. Je doute que cela puisse etre réaliser par l'équipe de PluXml. Nous ne connaissons pas ces outils.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • BloodyBloody Membres
    Quelqu'un pourrait me passer l'archive du script pour migrer de Wordpress vers Pluxml de Nico ? :)
    L'accès à son dépôt sur Google ne m'est pas accessible. :/

    Merci par avance. ;)
  • bg62bg62 Membres
    nico_somb a écrit:
    ?
    salut .... juste pour dire : super projet super travail !!!
    et ... un ancien 3 *** FFBB :) ( les beaux jours de l' asptta, gravelines, valenciennes et bien d'autres ...)
    comme quoi le monde est bien petit ...
Connectez-vous ou Inscrivez-vous pour répondre.