用Akismet的Python模块来反垃圾评论

标签:Python

提到Akismet这个WordPress内置的反垃圾评论插件,很多人应该都了解,我也就不介绍了。

稍微想想就知道,审查肯定不是WordPress自己能做的,那么必然是通过HTTP协议来访问Akismet的API。于是到Akismet官网看了下,发现这个API是公开的,并且对个人用户免费
接着看了下介绍,发现居然提供了2个Python模块,于是就去尝试了一番。

由于David Lynch的博客被墙了,我就拿Voidspace Python module来做例子吧。
下载了这个模块后,还得去弄个API key来。不过我也来不及申请了,于是Google到一篇《Akismet Api Key共享》,拿他的key(80e9452f5962)来测试了。

第一步是构造一个Akismet对象,需要key、blog_url和agent这3个参数。
Key就用刚才拿到的'80e9452f5962';blog_url需要一个完整的链接,这里仍然借用'http://daizongfei.com/';agent是一个这样的字符串:“Application Name/Version | Plugin Name/Version”(其实也没有严格限制),这个模块有个默认的agent,直接用就行了。
于是代码如下:
import akismet
api = akismet.Akismet(key='80e9452f5962', blog_url='http://daizongfei.com/')
想省事的话,也可以把key和blog_url保存成apikey.txt(每行写一个值),然后直接调用akismet.Akismet(agent=agent)即可。

第二步就是验证key了。不过我测试时发现不验证貌似也能直接用,只是不知道是否存在验证的有效期,所以还是每次都验证为妙。
这一步的代码就一行,返回值为True就代表通过验证:
api.verify_key()

第三步就是审查评论了,有不少参数要用到,详情可以看Akismet Python文档Akismet API文档
最重要的是comment参数,也就是评论内容。而user_ip和user_agent也是必需参数,但却是作为一个字典对象来传入的,其他参数就随便你了。
于是代码如下:
data = {'user_ip':'114.92.66.199','user_agent':'test'}
api.comment_check('...', data)
api.comment_check('I think the first word is wrong.', data)
这2行代码前者返回True,表示是垃圾评论;而后者则返回False。

暂时没搞定中文评论,似乎所有纯中文的评论都被当成spam了,即便我设置了“Content-Type: application/x-www-form-urlencoded; charset=utf-8”也没用。

最后,我们还可以去看看拦截统计,地址是“http:// 你的key .web.akismet.com/1.0/user-stats.php?blog= 你的博客地址”。
例如:http://80e9452f5962.web.akismet.com/1.0/user-stats.php?blog=http://daizongfei.com/

1条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?