Publicité
Disqus to Jcomments - Joomla

Pour la plupart d'entre vous, le changement est passé inaperçu. Le site est repassé à Jcomments. Je dis bien repassé, car il n'y a pas si longtemps (1 an), j'étais passé de Jcomments à Disqus. Cette plateforme de commentaires est bien pratique. Elle fait quasi tout le travail. Le problème, malgré les nombreux messages rassurants, est qu'on n'est jamais sûr que vos commentaires ne soient pas utilisés à autre chose (et vos email). J'ai donc rapatrié, non sans mal, vos commentaires depuis Disqus vers Jcomments. Je sais que cela peut intéresser bon nombre d'utilisateur Joomla, je vous donne la recette.

 

L'idée

Vous vous demandez peut-être, mais pourquoi diable fait il un tel changement, alors que tout était simple avant avec Disqus. Il s'agit d'un choix purement idéologique, il entre dans le cadre « se désintoxiquer de Google et d'autre ». Au début, j'avais espoir de devenir le nouveau Korben et avoir à gérer des centaines de commentaires par jour. Un système de commentaires puissant me semblait une bonne option. Ce n'est pas le cas, je suis loin d'être Koben, dès lors Jcomments convient parfaitement à mon site. Les données que vous donnez au site reste dans le site (enfin si pas de piratages).



La procédure

Tout d'abord, j'ai réalisé une petite recherche sur Internet, et j'ai trouvé ici (http://www.binarytides.com/disqus-comments-importer-script-in-php/). Une personne a réalisé une bonne partie du travail d'analyse. Je n'ai donc réalisé qu'une adaptation rapide de son code.

Cela se passe donc en 2 parties

Export depuis Disqus

Cette étape demande peu d'effort. Se connecter avec son compte Admin sur Disqus, aller dans Admin, onglet « discussion » sous onglet Export, enfin cliquer sur le bouton. Maintenant, vous attendez le lien de téléchargement qui vous sera envoyé par mail.

Cliquez sur le lien, et gardez le fichier bien au chaud.

Jcomments 001Jcomments 002Jcomments 003

Import dans Jcomments

J'ai adapté le programme à l'arrache comme on dit. Il est donc probable qu'il ne convienne pas à tout le monde. Les sites internationaux ne pourront pas profiter du programme sans quelques aménagements.

L'import des commentaires se passe en ligne de commandes. Si votre fournisseur ne vous fournit pas cette solution, vous risquez d'être bloqué. Pour ma part, j'ai une version du site en local. J'ai donc testé le programme en local, fait un export via phpMyAdmin et Re-import dans le phpMyAdmin de mon fournisseur. (Si j'ai le temps, je ferai peut-être un plugin Jcomments)



Avant de le lancer, vous devez changer les constantes suivantes.

const PRIMARY_LANG = 'fr-FR'; //langue principale du commentaire

const MYSQL_HOST = 'localhost'; //adresse du serveur Mysql. Si vous exécutez le programme sur la machine ça sera probablement localhost

const MYSQL_USER = 'xxxxx'; // le nom d'utilisateur de Mysql

const MYSQL_PSW = 'xxxxxx'; // le mot de passe de l'utilisateur mysql

const MYSQL_DB = 'xxxxxx'; // le nom de la basse de données

const BEGIN_AUTOINCREMENT = '5'; // si vous avez déjà des enregistrements dans la table vous pouvez commencer par l'index suivant (id).

La ligne de commande est la suivante :

php -f Disqus_to_jcomment.php non_du_fichier_téléchargé

Images - Capture écrans

Jcomments 004Jcomments 005

Le programme

 
<!--?php 
/*
very basic Disqus convert to Jcomment
Original source : http://www.binarytides.com/disqus-comments-importer-script-in-php/
adapted by Jerome BAPTISTE (http://geekmps.fr)
 
command line :
php -f Disqus_to_jcomment.php xml_file_provide_by_disqus
 
*/
 
class ImportDisqusToJcomment {
 
  const PRIMARY_LANG = 'fr-FR';
  const MYSQL_HOST = 'localhost';
  const MYSQL_USER = '';
  const MYSQL_PSW = '';
  const MYSQL_DB = '';
  const BEGIN_AUTOINCREMENT = '5';
 
  private $_InputFile = 'not specified';
 
  function __construct($argv) {
    //get xml file
    if (count( $argv) --> 0) {
      $this->set_inputFile($argv[1]);
    }
    else {
      echo "error not file provided \n";
      exit();
    }
  }
 
  public function set_inputFile($value) {
    $this->_InputFile = $value;
  }
 
  public function import() {
    date_default_timezone_set('GMT');
 
 
    $doc = new DOMDocument();
    $doc->load($this->_InputFile);
   // echo $doc->saveXML();
 
    $thread_list = array();
    $threads = $doc->getElementsByTagName('thread');
    foreach( $threads as $thread ) {
      $comment = array();
      $comment['thread_id'] = $thread->getAttribute('dsq:id');
      $comment['url'] = $thread->getElementsByTagName('link')->item(0)->nodeValue;
      $comment['url_parts'] = explode('/', $comment['url']);
      $comment['article_id'] = strstr ( end($comment['url_parts']),'-',true);
      if ( $comment['article_id']  === FALSE) {
        $comment['article_id'] = is_numeric(end($comment['url_parts'])) ? end($comment['url_parts']) : '';
      }
 
      if ( $comment['article_id']  === '' ) continue;
 
      $comment['item_id'] = (int) $comment['url_parts'][4];
      $thread_list[$comment['thread_id']] = $comment;
 
    }
 
    echo '*---------------------------------------------------';
    echo '*  liste des thread  ';
    echo '*----------------------------------';
 
    $post_list = array();
    $posts = $doc->getElementsByTagName('post');
    $i = self::BEGIN_AUTOINCREMENT;
    foreach( $posts as $post ) {
      $comment = array();
      $comment['id'] = $i;
      $comment['comment_id']  =  $post->getAttribute('dsq:id');
 
      // Exception
      // if ( in_array($comment['comment_id'], array('386444814', '389840029', '410354950', '412405419')) ) continue;
 
      $comment['comment']      =  trim($post->getElementsByTagName('message')->item(0)->nodeValue);
      /*str_replace("
      ", "rn",$post->getElementsByTagName('message')->item(0)->nodeValue );*/
      $comment['ip_address']  =  $post->getElementsByTagName('ipAddress')->item(0)->nodeValue;
      $comment['created_at']  =  strtotime( str_replace(array('T', 'Z'), array(' ', ''), $post->getElementsByTagName('createdAt')->item(0)->nodeValue) );
 
      $comment['email']      =  $post->getElementsByTagName('author')->item(0)->getElementsByTagName('email')->item(0)->nodeValue;
      $comment['name']      =  $post->getElementsByTagName('author')->item(0)->getElementsByTagName('name')->item(0)->nodeValue;
      $comment['username']  =  $post->getElementsByTagName('author')->item(0)->getElementsByTagName('username')->item(0)->nodeValue;
      $comment['thread_id']  =  $post->getElementsByTagName('thread')->item(0)->getAttribute('dsq:id');
 
          /*
          Find Parent with new ID
          */
      if ( $post->getElementsByTagName('parent')->item(0) ) {
        $comment['d_parent_id']  =  $post->getElementsByTagName('parent')->item(0)->getAttribute('dsq:id');
        $comment['parent']      =  $post_list[$comment['d_parent_id']]['id'];
      }
 
      $comment['item_id']    =  $thread_list[$comment['thread_id']]['item_id'];
      $comment['object_id']  =  $thread_list[$comment['thread_id']]['article_id'];
 
      //if ( !$comment['item_id'] ) continue;
 
      $post_list[$comment['comment_id']] = $comment;
      ++$i;
    }
    echo '/***********************************************'."\n";
    echo 'liste des posts';
    echo '/***********************************************'."\n";
    echo '/***********************************************'."\n";
    echo '/***********************************************'."\n";
    // exit();
 
    $res = mysqli_connect(self::MYSQL_HOST, self::MYSQL_USER, self::MYSQL_PSW, self::MYSQL_DB);
 
    $res->set_charset("utf8");
    foreach($post_list as $post) {
      $name = mysqli_real_escape_string($res, $post['name']);
      $username = $post['username'] !== NULL ?mysqli_real_escape_string($res, $post['username']) : 'Anonyme';
      $email = mysqli_real_escape_string($res, $post['email']);
      $url = mysqli_real_escape_string($res, $post['url']);
      $comment = mysqli_real_escape_string($res, $post['comment']);
      $parent_id = (int) $post['parent'];
      $depth = (int) $post['depth'];
      $ip_address = mysqli_real_escape_string($res, $post['ip_address']);
      $object_id = mysqli_real_escape_string($res, $post['object_id']);
      $id = $post['id'];
 
      $sql = "INSERT INTO pgkm2_jcomments SET id = $id ,  object_id ='$object_id', name = '$name', email = '$email', username = '$username', comment = '$comment', ip = INET_ATON('$ip_address'), parent = $parent_id, date = FROM_UNIXTIME($post[created_at]),published= 1, object_group='com_content' , lang='".self::PRIMARY_LANG."' ";
      mysqli_query($res, $sql);
    }
  }
}
 
$import = new ImportDisqusToJcomment($argv);
$import->import();
?>
 
 
 

Vous pouvez télécharger le programme ici.

 


Vous avez aimé cet article ? Alors partagez-le avec vos amis en cliquant sur les boutons ci-dessous :


Commentaires (4)

  • Invité - Phil

    Ok je comprend, mais je ne connais pas suffisamment pour modifier votre code, mais je suis prêt à un soutient financier pour vous encouragez.

  • Invité - Phil

    Bonjour,<br />Je cherche comment importer mes commentaires jcomments vers jcomments. C'est paradoxal.. Mais ce n'est toujours pas possible en natif. Avez pu faire un plugin?

  • Invité - Jérôme Baptiste

    Invité - Phil

    Finalement je n ai jamais eu le temps de développer le plugins. La solution import export des tables MySQL devrait vous aider<br />Jérôme Baptiste

  • Valuable information. Lucky me I found your website by accident, <br />and I am stunned why this accident did not happened in advance!<br /><br />I bookmarked it.

Poster un commentaire en tant qu'invité

0

Publicité - Ce contenu peut vous intéresser - Test

La pub ça rapporte pas grand chose, en plus ça vous laisse d'horribles cookies non comestibles, autrement appelé trackers. Ce cookie est utilisé par DoubleClick (Google Adsense). Vous avez tout le droit de ne pas en vouloir et donc quitter cet excellent blog. Dans le cas contraire, vous l'acceptez et vous poursuivez le surf en toute connaissance de cause (par ailleurs j'utilise piwik).