samedi 13 novembre 2010
Dotclear 2 - Script shell pour purger la table dc_comment (Crontab)
Par david techer, samedi 13 novembre 2010 à 03:31 :: Général
Parfois et depuis peu, je reçois des commentaires qui n'ont rien à voir avec le billet en question.
Il s'agit tout simplement de relayer le nom du site posté dans les commentaires. Cette technique a un nom mais je ne m'en rappelle pas de ce fameux nom.
D'ailleurs je n'ai pas envie de m'amuser à trifouiller la base MySQL pour faire le ménage de temps en temps.
Résultat: Petit script maison avec mes trois amis (grep, sed et tail) pour faire le ménage! A mettre dans la crontab de la machine.
#!/bin/sh
####################################################################################
# $Id: purge_mysql_comments.sh 68 2010-11-13 01:41:52Z david $
####################################################################################
# Blog sous DotClear / Purge MySQL (table = dc_comment)
#
# - Ce script permet de nettoyer la table 'dc_comment' de dotclear en fonction de
# clause where specifiques (spam, commentaires abusifs de pub...)
# - Il doit etre mise dans la crontab du serveur sur lequel s'execute la base MySQL
# du blog
PATH=/usr/bin:$PATH
# On recupere les parametres de connexion
source /opt/scripts/mysql/etc/mysql_connexion.source
# Ligne de connexion a la base
MYSQL_COMMAND="mysql -h localhost -u${MYSQL_USER} -p${MYSQL_PASSWORD} dotclear";
MYSQL_LOGGER_SUBJECT=" * purge mysql comments";
logger -t "${MYSQL_LOGGER_SUBJECT}" "[Debut.]";
# On envoit a la volee les clauses where a grep
# Ce dernier s'occupe
# - d'enlever les lignes commentees commencant par '#'
# - d'enlever les lignes vides
grep -vE '^(#|$)' << EOF | \
################################
# Debut pour les clauses where #
################################
# ! ! ! ATTENTION: LA CLAUSE WHERE DOIT TENIR SUR UNE SEULE LIGNE ! ! !
# Requete 1 du Jeudi 20101/11/16
# Concerne les commentaires dont l'auteur contient 'replica' ou 'burberry'
(comment_auteur like '%replica%')
(comment_auteur like '%burberry%')
# Requete du Vendredi 2010/11/17
(comment_auteur like '%imitation%jewelry%')
(comment_auteur like '%cartier%bracelet%')
(comment_auteur like '%monogrammed%canvas%totes%')
(comment_auteur like '%watche%')
(comment_auteur like '%viagra%')
(comment_auteur like '%location%voiture%Marrakech%')
###############################
# Fin pour les clauses where #
###############################
EOF
# On boucle sur les clauses where
while read line;
do
CLAUSE_WHERE="${line}"
echo "${CLAUSE_WHERE}"
echo "select count(*) from dc_comment where ${CLAUSE_WHERE};" | ${MYSQL_COMMAND} | \
tail -n1 | grep -q 0 || {
logger -t "${MYSQL_LOGGER_SUBJECT}" "Comments found for [${CLAUSE_WHERE}]";
logger -t "${MYSQL_LOGGER_SUBJECT}" "Deleting...";
echo "delete from dc_comment where ${CLAUSE_WHERE};" | ${MYSQL_COMMAND}
}
done
logger -t "${MYSQL_LOGGER_SUBJECT}" "[Fin.]";
