完善多说评论的邮件提醒功能

介绍

如果你的博客使用了多说评论,那么很不幸,你的博客有了新留言你收不到提醒。多说评论系统设定的是只有别人回复了你的留言才会邮件通知你。虽然刚开始写博客的时候,给我们留言的人很少,或者也许以后也没有多少留言(此处应该有一个笑哭的表情,此刻看看窗外,那只猫也在嘲笑我),不过如果有人给我们留言了,那我们及时回复他也是一种尊重他的表现,所以用 python 编写了一个脚本解决多说评论的不完美提醒。

Requirement

  • python 2.7 以及 python 3 都可运行;
  • 此脚本只用到 requests 这一个第三方库,请安装:
    $ pip install requests
    

实现原理

这是获取 多说评论后台操作日志 的官方说明。通过 requests 获取博客的评论日志,判断是否产生了新的日志,然后进一步判断是否是别人的评论或者回复(因为你自己回复别人也会产生操作日志),如果条件成立,则发送邮件;否则,等待下一次 check。另外,如果在脚本运行过程中出现问题,脚本会将错误信息以邮件的形式发送给我们,以便我们及时处理。

注意事项

请确保你开启了多说评论的通知提醒(在“个人资料”选项中填写邮箱地址),并且选择每条新回复都提醒我。因为只有这样设置,你在其他人的博客中留了言,然后别人回复了你,或者在你自己的博客中,别人回复了你,才能收到多说官方的邮件提醒。
而我编写的这个脚本,也是用于你自己博客中留言的邮件提醒。在你自己的博客中,如果别人回复了你(注意区分概念,是回复了你的某一条评论),多说评论官方会发送邮件提醒,此时,脚本就应该判断这条回复的父评论的作者是否是自己,如果是脚本就不发送提醒邮件,以免重复提醒。
设置多说

结果展示

  1. 如果新评论数 <= 20,那么显示详细的评论信息,并将文章题目设置为超链接,可以点击访问该文章,效果如下:
    效果展示1

  2. 如果新评论数 > 20,就只是提示功能(显示过多反而不好),如下:
    效果展示2

  3. 正如下面图片中展示的一样,脚本运行发生错误,邮件提示我“获取多说评论后台日志失败”,果然我检测多说网,那天晚上真的宕机了,不过第二天又恢复正常了~.~
    效果展示3


配置文件 (_config.conf)

[duoshuo_account]
short_name = 你在多说评论站点注册的多说二级域名
secret = 站点密钥
myself_author_id = 你的多说id,用于剔除自己给别人的回复提醒(这个id不好找,希望你能找到)
myself_author_url = 你的个人主页

[email_info]
email_host = smtp.xxx.com    # 请确保你的邮箱开启了SMTP服务
from_address = 发生邮件的邮箱地址
email_password = 邮箱密码
to_address = 接收邮件的邮箱地址

请认真仔细填写配置文件。

使用方法

下面所讲述的使用方法是针对Linux系统下的,如果您准备在Windows系统下使用这个脚本,只需使用Windows自带的计划任务即可,无需执行下面的任何命令(这里就不涉及计划任务的相关教程了,如有需要请自行 google)。
第一步

$ git clone https://github.com/LooEv/duoshuo-comment-notifier.git ~/duoshuo-comment-notifier

$ chmod +x ~/duoshuo-comment-notifier/comment_notifier.py    #这一步很重要!

第二步,编辑 _config.conf 文件,将自己的配置信息填写完整。

第三步,设置定时运行脚本
在 Linux中,运行下面的命令:

$ crontab -e    # 编辑当前用户的crontab文件

添加下面的内容:

0,30 8-23 * * * /usr/bin/env python ~/duoshuo-comment-notifier/comment_notifier.py >/dev/null 2>&1
# 每天8点到23点之间每隔30分钟执行脚本

* 8-23/1 * * * /usr/bin/env python ~/duoshuo-comment-notifier/comment_notifier.py >/dev/null 2>&1
# 或者每天8点到23点之间每隔1小时执行脚本

* 8-23/5 * * * /usr/bin/env python ~/duoshuo-comment-notifier/comment_notifier.py >/dev/null 2>&1
# 或者每天8点到23点之间每隔5小时执行脚本

视自己的情况而定,选择适当的间隔周期执行脚本。
>/dev/null 2>&1 表示将脚本的标准输出流和标准错误流都不显示(不用担心,脚本设置的日志文件依然会产生,以便我们发现问题所在),防止 crontab 产生的日志文件过大。
注意:如果你正在使用多个版本的 python,请自行修改上面代码中的 /usr/bin/env python,尽量将执行这个脚本的python的路径定死,并确保该python版本环境下安装了所需的第三方库。

让脚本更加友好

为了让脚本的功能更加人性化,我设置了如下的特性:

  • 如果新评论数大于20条,就不显示评论的详细信息,只提示评论数,并提示你登录多说网查看详情,因为如果信息过多的话也不方便在邮件里面阅读。
  • 如果脚本运行失败的时候又正好有新的评论,需要将 last_counter 重新写入 action_counter_file 中,以免错过新评论。
  • 当脚本由于某些原因运行失败,比如无法获取多说网的数据,如果连续运行失败的次数 <= 2,就发送提醒邮件,提醒你检查原因;如果连续运行失败的次数 > 2,就不再发送邮件,因为如果我们暂时不方便修复脚本,提醒邮件就会一直发,让人心烦,所以需要设置这个判断功能。
  • 如果脚本连续运行失败的次数过多,而只会发送两封提醒邮件,如果你太忙很容易忘记这件事儿。为了不让你忘记检查原因,就每隔一定时间重新发送提醒邮件给你,发送邮件的周期请自行修改,因为这个周期需要根据你设置的执行脚本的间隔周期调整,才能起到既提醒了你又不扰人的效果。
  • 如果脚本运行的日志文件过大,会发送邮件提醒你删除日志(这种情况应该很少会出现,不过以防万一)。

实现细节

如果你想要了解具体的实现细节(比如函数功能的介绍等),可以查看我的 github,请点击 这里

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器