AkismetはスパムフィルタリングサービスでAutomattic社によって提供されています。
Automattic社はWordPressへの貢献で有名な会社で、AkismetもWordPressのスパムフィルタのプラグインとして有名です。
スパムフィルタとしては非常に強力なツールなのでこちらをWordPress以外でも利用できるよう、PythonとDjangoで実装してみます。
尚、AkismetのIDの取得は今回は触れませんが以下のURLで行ってください。
プランが複数ありますので商用などの利用では適したプランを選択してください。
Akismetのライブラリのインストールと実装
今回は以下のpipのライブラリを使用します。
https://pypi.org/project/akismet/
マニュアルは以下にあります。
https://akismet.readthedocs.io/en/1.1/
インストールは以下のコマンドで行います。
1 2 3 |
# pip install akismet |
サンプル用のプログラムは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import akismet akismet_api = akismet.Akismet( key='your API key', blog_url='http://yoursite.com' ) is_spam = akismet_api.comment_check("192.168.0.1", "test-ua") if is_spam: print("スパムです") else: print("スパムではないです") |
「comment_check」では引数としては「IPアドレス」と「ユーザーエージェント」を渡しています。
戻りとしてTrue、Falseが返ってきてスパムと判定されるとTrueが戻ります。
こちらをコマンドラインから実施すると以下のようになります。
1 2 3 4 |
# python3 sample.py スパムではないです |
この他に「submit_spam」と「submit_ham」という2つのメソッドがあります。
「submit_spam」はメッセージがスパムだった時に報告を行うメソッドです。
「submit_ham」は逆にスパムでないものがTrueで帰ってきた時に報告を行うメソッドです。
基本的な使い方はこちらになります。
Djangoでの実装
以下はDjangoでの実装です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import akismet class ContactView(View): template_name = "front/contact.html" akismet_api = akismet.Akismet( key='your API key', blog_url='http://yoursite.com' ) def post(self, request, *args, **kwargs): client_addr = request.META.get('REMOTE_ADDR') user_agent = request.META.get('HTTP_USER_AGENT') is_spam = self.akismet_api.comment_check(client_addr, user_agent) ## スパムチェック if is_spam: ## スパムの時の処理 else: ## スパムでない時の処理 |
シンプルではありますが、Djangoでお問い合わせフォームなどを作成するとスパムチェックなどが難点になってしまうのでこちらで対応が可能となります。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。