hexo博客给Valine添加评论自动微信推送

引言:Valine评论系统本身并不自带新增评论提醒功能,好在光顾网友站点的时候发现了两个非常宽松推送API:Server酱Qmsg酱。分别对应微信QQ,自己琢磨着写了几行JS代码,能利用以上两个API专门针对Valine评论进行推送提醒,下面就让我们进入正题吧。

先上几张效果图:

Server酱 Qmsg酱

下面来说如何实现,实现方案是基于hexo或者静态页面的。

  • Sever酱

1.打开Sever酱网站链接,点击GitHub一键登入

Server酱-1

2.到微信推送页面,按照提示绑定微信(需要关注Server酱公众号)

Server酱-2

3.获取SCKEY并保存记录下载,等会要用到

4.将以下JS代码粘贴到博客网站引用的JS文件中,这里我用的是matery主题,我把它粘贴到source/js/matery.js文件底部,另起一行直接粘贴即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var title1="text=KZblog又有新评论啦~!--by Valine"
var SCKEY_Server=""
var ValineButton=document.getElementsByClassName("vsubmit vbtn")[0];
function send_valine_Server(){
var text="desp=";
var pagename=document.title;
var wz=pagename.indexOf('|');
var res=pagename.substring(0,wz);
var pageurl=document.URL;
var ptime=new Date();
var vnick=document.getElementsByClassName("vnick vinput")[0].value;
var vmail=document.getElementsByClassName("vmail vinput")[0].value;
var vlink=document.getElementsByClassName("vlink vinput")[0].value;
var veditor=document.getElementsByClassName("veditor vinput")[0].value;
var data=text+"|昵称:"+"|邮箱:"+"|网站地址:"+"|当前页面:"+"|评论内容:"+"|跳转链接:"+"|评论时间"+"\n"+"|----|----|----|----|"+"\n"+"| "+vnick+" | "+vmail+" | "+vlink+"| "+res+"| "+veditor+"| "+pageurl+"|" +ptime.toLocaleString()+"|";
var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST', 'https://sc.ftqq.com/'+SCKEY_Server+'.send', true); //第二步:打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send(title1+"&"+data);//发送请求 将情头体写在send中
};
ValineButton.onclick=send_valine_Server;

如果你想适配你的站点,只需要修改SCKEY_Server的值和title1的值即可,将之前获取到的SCKEY的值填入双引号之中,比如SCKEY_Server="SCUXXXXXXXXXXXXXXXXXXXX706c",将title1里text=**而不是第4行的var text**后面的内容修改成你想要的内容即可(注意:不要将最后的引号删掉了)

需要修改的地方

title1对应下图中红色方框的部分标题,内容我写好了模板,会显示昵称、邮箱、网站地址、当前页面、评论内容、跳转链接、评论时间,以表格的形式显示出来。

title1对应标题
  • Qmsg酱

1.进入Qmsg酱网站,一键QQ登录

2.选择Qmsg酱小姐姐,并添加QQ号

选择Qmsg小姐姐并添加QQ号

3.将接口地址保存记录下来,等会要用

保存接口地址

4.将以下代码像Server酱的代码一样粘贴到随便一个引用的JS文件中,比如粘贴到matery.js底部另起一行直接粘贴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var title2="msg=KZblog又有新评论啦~!--by Valine\n"
var SCKEY_Qmsg=""
var ValineButton=document.getElementsByClassName("vsubmit vbtn")[0];
function send_valine_Qmsg(){
var pagename=document.title;
var wz=pagename.indexOf('|');
var res=pagename.substring(0,wz);
var pageurl=document.URL;
var ptime=new Date();
var vnick=document.getElementsByClassName("vnick vinput")[0].value;
var vmail=document.getElementsByClassName("vmail vinput")[0].value;
var vlink=document.getElementsByClassName("vlink vinput")[0].value;
var veditor=document.getElementsByClassName("veditor vinput")[0].value;
var data="昵称:"+vnick+"\n邮箱:"+vmail+"\n网站地址:"+vlink+"\n当前页面:"+pagename+"\n评论内容:"+veditor+"\n跳转链接:"+pageurl+"\n评论时间"+ptime.toLocaleString();
var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST',SCKEY_Qmsg, true); //第二步:打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send(title2+data);//发送请求 将情头体写在send中
};
ValineButton.onclick=send_valine_Qmsg;

修改SCKEY_Qmsg值,将先前保存的接口地址填入即可,比如SCKEY_Qmsg="https://qmsg.zendee.cn:443/send/85XXXXXXXXXXXX2433.html",title2中msg=后面的内容可以随意修改,保留后面的\n用来换行,不然排版不好看。然后重新生成静态页面就能成功接收推送了


推送结果

PS:本人才疏学浅,写的代码在内行人看来难免会觉得冗余、低效、不美观,有能力的自行修改便可,如有错误欢迎指正,也欢迎大家在评论区讨论。

另外,就我目前测试而言Server酱和Qmsg酱无法同时使用,如果这两段代码都加上去只有Qmsg生效。所以Server酱和Qmsg二选其一吧,看自己方便用哪个?

2021.2.2更新

由于Qmsg更改了接口,导致旧版API调用方式无效返回404错误。新版使用方式https://qmsg.zendee.cn/send/您的KEY+?+msg=发送内容

比如:https://qmsg.zendee.cn/send/您的KEY?msg=waeatrsgrs

API使用

成功接收到消息