这两天微信公众号消息提醒蛮火的,我也来蹭一下热度,我们的主题是考研倒计时,顺便也发一发天气预报。
思路:
获取我们需要的数据,比如天气信息
然后去微信公众平台注册一个测试号,调用接口发信息
最后把他部署在腾讯云函数上实现定时执行
开始吧
1、配置公众号测试号
首先是打开微信公众号测试号,打开这个链接去扫码登录,登录之后会给你
上面这两个,待会需要用
然后滑到下面,找到个二维码,扫码
扫码之后会给右边的微信号,这里这个数据也要用到
找到下面新增模板
标题自己定,对应如图所示,模板具体内容在下面
{{ }}
{{ }}
在努力学习的同时也别忘了:
{{english.DATA}}
城市:{{city.DATA}}
天气:{{weather.DATA}}
最低气温:{{tempn.DATA}}
最高气温:{{temp.DATA}}
距离考研还有: {{live.DATA}} 天
推送日期:{{date.DATA}}
这里多说几句,代码格式可以自己设计,每个{{}}相当于一个槽,内容可以自己定义,版式也在这里设置,自己操作了就知道了,每个槽的位置是可以自己调整的
这边设置完了之后我们就要去配置python端的代码了
2、python代码获取天气信息、考研倒计时信息
首先你的开发环境要有requests库,没有的话pip一下
pip install requests
然后你需要把代码里的一些变量改成你自己的,我也都在代码里注释了,代码里的隐私信息我已经脱敏了,不改是没办法直接跑的
# encoding: utf-8
import requests
import json
import time
import datetime
import random
'''
把你从微信公众平台获取到的
appid、
secret、
微信用户id、
模板id、
城市id
替换成你自己的,就能运行了,代码里的信息我处理过了,不替换是不能直接跑的
然后模板那边再自定义一下就实现了你的专属消息提醒
'''
def main(even,s):
import time
print(even,s)
appid = 'wx95db893e97bfc4'
secret = 'bedd8089bdde699f18fb6764990b'
touser = ['oi7xM5nOkQk6kslwm3iyzR93-Z00','oi7xM5hSn5RvisXNc_-gvBzgU'] # 微信用户id
template_id = 'hldqQetj_1ykFda5gnc6CTwjA3E-aMpLiUrYsrEI' # 模板id
city_id = '10129001' # 城市天气id
# birthday = "1995-04-10"
# 考研日期,懒得改变量名了
birthday = '2022-12-24'
List_A = ['干饭人,干饭魂','人是铁,饭是钢,一顿不吃饿得慌','身体是革命的本钱,记得吃饭','玩玩乐乐吃吃喝喝,做个可爱迷人的小甜豆','恋爱可以慢慢谈,肉必须趁热吃','按时吃饭,早睡早起,自律如昔,能扛大事','天要下雨 ,菜要下饭','吃货的最高境界 ——眼见为食','世界这么大,我们去吃吃看','尊敬的客户:现已到吃饭时间,你已较长时间没有进食了,请抓紧时间吃饭,逾期将收取滞纳期限','你的胃来求我,让我告诉你,好好吃饭吧,别虐待我','火锅、烧烤、啤酒,不是很贵,但很对胃','人生苦短,再来一碗','人生得意须尽欢,胡吃海塞需尽兴']
# List_A = ['天要下雨 ,菜要下饭。','吃货的最高境界 ——眼见为食。']
e = List_A[random.randint(0,len(List_A)-1)] # 底部信息
grant_type = 'client_credential'
url = f'https://api.weixin.qq.com/cgi-bin/token?grant_type={grant_type}&appid={appid}&secret={secret}'
response = requests.get(url).json()
access_token = ''
if response['expires_in'] == 7200:
# 获取token
access_token = response['access_token']
# 天气获取
headers = {
'Referer': 'http://www.weather.com.cn/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
url = f'http://d1.weather.com.cn/weather_index/{city_id}.html?_=' + str(int(round(time.time() * 1000)))
# 日期计算
r = requests.get(url, headers=headers)
r.encoding = "utf8"
res = eval(r.text.split(";")[0].split("=")[-1])
time = res['weatherinfo']['fctime']
year = time[0:4]
month = time[4:6]
day = time[6:8]
week_list = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
week = week_list[datetime.date(int(year), int(month), int(day)).weekday()]
date = f'{year}年{month}月{day}日 {week}'
# 你活了多久
birthday_date = datetime.datetime.strptime(birthday, "%Y-%m-%d")
curr_datetime = datetime.datetime.now()
# minus_datetime = curr_datetime - birthday_date
minus_datetime = birthday_date - curr_datetime
# 发送消息
sendMessage_url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={access_token}"
for user in touser:
data = {
"touser": user,
"template_id": template_id,
"appid": appid,
"data": {
"demo": {
"value": "每日吃饭提醒",
"color": "#FF7F50"
},
"live": {
"value": minus_datetime.days,
"color": "#FF7F50"
},
# "date2": {
# "value": date2,
# "color": "#6B6A66"
# },
"date": {
"value": date,
"color": "#000000"
},
"city": {
"value": res['weatherinfo']['city'],
"color": "#000000"
},
"weather": {
"value": res['weatherinfo']['weather'],
"color": "#000000"
},
"tempn": {
"value": res['weatherinfo']['tempn'],
"color": "#000000"
},
"temp": {
"value": res['weatherinfo']['temp'],
"color": "#000000"
},
# "wd": {
# "value": info,
# "color": "#FF7F50"
# },
'english': {
"value": e,
"color": "#FF6347"
}
}
}
getTemp = requests.post(sendMessage_url, data=json.dumps(data)).json()
print(getTemp)
else:
print("appid或secret错误")
if __name__ == "__main__":
even = ''
s = ''
main(even,s)
然后把这个文件命名为index.py,并压缩为zip文件,部署到云端的时候要用
3、部署到云端
到这里我们的代码已经能跑起来了,接下来就需要部署到云端了,我选的是腾讯云函数,六月之后就收费了,不过也不贵,一百万次调用才四十几
先进入腾讯云函数官网,百度一下就能找到,后面就跟着图片操作就行了,超级详细。
进入控制台,新建一个函数
配置一下层,里面是运行代码所需的第三方库
到了这里之后,设置一下触发条件,就是多久运行一次
到了这里就大功告成了!!!
上个效果图看看,右边的其实就是效果图