CodeIgniter et Akismet

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: , , ,



Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Allowed HTML tags: <a> <em><cite> <code><center> <script><ul><img> <ol> <li> <dl> <dt> <dd><p><br><embed><object><param>
  • You can use <object>, <embed> and <script> tags from the following sites to add media to your posts:

    • http://www.youtube.com
    • http://media.nowpublic.com
    • http://youtube.com
    • http://dailymotion.com
    • http://www.dailymotion.com

Plus d'informations sur les options de formatage

CAPTCHA
Cette question nous sert à déterminer si vous êtes un humain, un robot ou un extra-terrestre
3 + 10 =
Veuillez résoudre ce simple problème mathématique afin de poster votre commentaire. Par exemple pour 1 + 3 entrez : 4