手上有个项目,是服务器挂着自动化的爬虫的,但我用的那个IP代理商没有用尽报警,导致几次IP用尽,程序爬不到数据,进程死循环了。之前想过发邮箱提醒我,但是邮箱把又不及时,老忘记看,因为我QQ用的很少了,用的最多的就是微信,每天无论如何我都会打开微信看的,于是我想到公众号去提醒。看了看文档发现微信公众号的模板消息推送符合我的需求,于是开干。按照全文的步骤一步步来,绝对能搞定。
本文仅作为测试使用,后续会发Django版本的服务器自动推送的全教程
申请测试号
首先就是注册一个微信公众号了,随便注册就行了,但是如果你要上线使用,请记住申请服务号,至于服务号和订阅号的区别我这里不展开的的赘述,有相关需求的可以去微信官方查看。
注册完成后点击左侧 设置与开发
下面的 接口权限
也能简单看看这些相关功能所需要的公众号的类别。一般咱自己申请的就是个体号,基本没啥功能,就只能发发文章罢了。另外提一嘴,如果要正式上线做自动化推送的话,就需要公众号认证的,这玩意还要300块,但我看tb有那种几毛钱的,不是太懂有什么风险,懂哥可以留言。如果项目正经让公司出钱就行了。自己做工具用可以省钱找那种代认证。
注册完公众号后,开始进入测试号
位置:左侧导航栏 开发者工具
下的 公众平台测试账号
进入后会给你一个appID和一个appsecret,这个是关键参数,等会测试要用。这个接口配置信息这块不用管,暂时做本地测试,以后要上线测试再去配置这个东西
新增测试模板
点击新增测试模板,以下是正确格式
提示前缀
+ {{xxx.DATA}}
然后你输完一个记得换行。到时候发送通知模板时候的排版就和你现在一样
提交后会得到一个模板ID(等下代码会用到)
最后就是扫码关注测试公众号了
关注了后会看到你的微信号昵称和一个微信号,这个微信号就是你这个微信号在此测试公众号中的唯一凭证。也叫做openId
至此已经有了4个值,分别是appID
、 appsecret
、 模板ID
、 openId
实现步骤解析:(重点)
首先需要明确一个点,向微信api交互,都需要获得一个临时的token
然后你要干啥就访问啥接口,看清除文档要的是POST还是GET请求,在请求的哪里加上token,然后请求这个URL的时候要携带什么参数
最后直接发送这个请求,你想要做的事微信的服务器就会帮你做了
附上本文关键的API文档 (想深究的可以看看):
获取access token:
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
发送模板消息:
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF
完整代码:
import requests
import jsonappID = "wx8ac3ded9236efe2a"
appSecret = "131b8d9d874af6f7dbf11d3b751ce6b2"
openId = "oHB4K6oJqzBh9FoM2J87KEfpS3Ro"def get_access_token():# 获取access token的urlurl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}' \.format(appID, appSecret)response = requests.get(url).json()print(response)access_token = response.get('access_token')return access_tokendef send_msg(access_token):# touser 就是 openID# template_id 就是模板ID# url 就是点击模板跳转的url# data就按这种格式写,time和text就是之前{{time.DATA}}中的那个time,先试试你就知道了,value就是你要替换DATA的值body = {"touser": openId,"template_id": "JHzQALjvNyjbqKehXZbtBYS-l_e1oowCeZrpTHQmN7U","url": "http://weixin.qq.com/download","data": {"time": {"value": "今天是8月11号","color": "#173177"},"text": {"value": "微信官方文档写的真的不清晰","color": "#173177"}}}url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}'.format(access_token)print(requests.post(url, json.dumps(body)).text)if __name__ == '__main__':# 1.获取access_tokenaccess_token = get_access_token()# 2.发送模板消息send_msg(access_token)
代码解析:
其实注释也写的很清晰了,4个值都发挥了关键的作用。如果要上线取用的话,也基本上这个流程,要模板消息更多的使用方法,以及更sao的操作就去看我上面贴的文档。先这样写,测试成功后,你再自己尝试这里改改那里改改看看什么变化,就理解了。不懂的话留言,CSDN开了邮箱提醒很快能看到
效果展示:
电脑端