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

 
 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.

 

Comments powered by CComment

We use cookies

Nous utilisons des cookies sur notre site web. Certains d’entre eux sont essentiels au fonctionnement du site et d’autres nous aident à améliorer ce site et l’expérience utilisateur (cookies traceurs). Vous pouvez décider vous-même si vous autorisez ou non ces cookies. Merci de noter que, si vous les rejetez, vous risquez de ne pas pouvoir utiliser l’ensemble des fonctionnalités du site.