Magazine

CodeIgniter et Akismet

Publié le 25 mai 2008 par Cédrci Bousmanne

Ce qu’il y a de merveilleux, avec CodeIgniter, c’est sa légèreté. Bien sûr, comme le diraient certains, il n’y a rien de mieux que Ruby On Rails (non, je ne vise personne), mais dans le cas qui se présente, la légèreté de CI est un atout non-négligeable.

J’étais donc occupé à développer un petit système de commentaire pour un projet, et la question du spam est bien entendue venue me titiller les neurones. La façon la plus simple de traiter un problème étant parfois de demander son avis à Google, j’ai trouvé la librairie Akismet pour CodeIgniter.

Exemple :

class Comment extends Controller {
	function Comment()
	{
		parent::Controller();
		$this->load->library('akismet');
	}
	function save()
	{
		# Récupération des données saisies dans le formulaire
		$comment = array(
			'id_object'	=> $this->input->post('object_id'),
			'author'	=> $this->input->post('author'),
			'website'	=> $this->input->post('website'),
			'email'		=> $this->input->post('email'),
			'ip'		=> $this->input->ip_address(),
			'text'		=> $this->input->post('text'),
			'created_at'=> unix_to_mysql(now())
		);

		# Configuration de la librairie Akismet
		$config = array(
			'blog_url' => base_url(),
			'api_key' => 'xxxxxxxxxxxx',
			'comment' => $comment
		);

		$this->akismet->init($config);

		# Si akismet retourne une erreur
		if ( $this->akismet->errors_exist() )
		{
			# Clé invalide
			if ( $this->akismet->is_error('AKISMET_INVALID_KEY') )
			{
				log_message('info', '[Comment] La clé Akismet est invalide');
			}
			# Pas de réponse du serveur
			elseif ( $this->akismet->is_error('AKISMET_RESPONSE_FAILED') )
			{
				log_message('info', '[Comment] Le serveur Akismet ne répond pas');
			}
			# Le serveur n'a pas été trouvé
			elseif ( $this->akismet->is_error('AKISMET_SERVER_NOT_FOUND') )
			{
				log_message('info', '[Comment] Le serveur Akismet n'a pas été trouvé');
			}

			# On enregistre le commentaire avec statut invalide pour validation manuelle
			log_message('info', '[Comment] Impossible d'obtenir une réponse du serveur Akismet, enregistrement du commentaire avec statut invalide');
			$comment['available'] = 0;
			$comment['is_spam'] = 0;
			$this->db->insert('comments', $comment);

			}
		# Si on a obtenu une réponse du serveur
		else
		{
			# Si Akismet pense que c'est un spam
			if ( $this->akismet->is_spam() )
			{
				# Enregistrement du commentaire avec statut is_spam à TRUE
				log_message('info', '[Comment] Akismet : spam detected');
				$comment['available'] = 0;
				$comment['is_spam'] = 1;
				$this->db->insert('comments', $comment);

			}
			# Sinon, ce n'est pas un spam, tout va pour le mieux dans le meilleur des monde...
			else
			{
				# Enregistrement du commentaire et publication immédiate
				log_message('info', '[Comment] Akismet : comment clean, saving');
				$comment['available'] = 1;
				$comment['is_spam'] = 0;
				$this->db->insert('comments', $comment);
			}
		}
	}
}

Il ne reste plus qu’a notifier l’administrateur par e-mail et l’utilisateur de l’action qui à été effectuée.


Tags:

Retour à La Une de Logo Paperblog

A propos de l’auteur


Cédrci Bousmanne 1 partage Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog