当前位置:   article > 正文

python实现微信公众号定时消息提醒-手把手教你将代码部署到云端_消息提醒 源代码 公众号

消息提醒 源代码 公众号

这两天微信公众号消息提醒蛮火的,我也来蹭一下热度,我们的主题是考研倒计时,顺便也发一发天气预报。

思路:

获取我们需要的数据,比如天气信息
然后去微信公众平台注册一个测试号,调用接口发信息
最后把他部署在腾讯云函数上实现定时执行

开始吧

1、配置公众号测试号

首先是打开微信公众号测试号,打开这个链接去扫码登录,登录之后会给你
上面这两个,待会需要用
appid
然后滑到下面,找到个二维码,扫码
1
扫码之后会给右边的微信号,这里这个数据也要用到
找到下面新增模板
2
标题自己定,对应如图所示,模板具体内容在下面
3

{{ }} 
{{ }} 
在努力学习的同时也别忘了:
{{english.DATA}}


城市:{{city.DATA}} 
天气:{{weather.DATA}}
最低气温:{{tempn.DATA}}
最高气温:{{temp.DATA}} 
距离考研还有: {{live.DATA}} 天 
推送日期:{{date.DATA}} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里多说几句,代码格式可以自己设计,每个{{}}相当于一个槽,内容可以自己定义,版式也在这里设置,自己操作了就知道了,每个槽的位置是可以自己调整的

这边设置完了之后我们就要去配置python端的代码了

2、python代码获取天气信息、考研倒计时信息

首先你的开发环境要有requests库,没有的话pip一下

pip install requests
  • 1

然后你需要把代码里的一些变量改成你自己的,我也都在代码里注释了,代码里的隐私信息我已经脱敏了,不改是没办法直接跑的

# 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124

然后把这个文件命名为index.py,并压缩为zip文件,部署到云端的时候要用

3、部署到云端

到这里我们的代码已经能跑起来了,接下来就需要部署到云端了,我选的是腾讯云函数,六月之后就收费了,不过也不贵,一百万次调用才四十几
先进入腾讯云函数官网,百度一下就能找到,后面就跟着图片操作就行了,超级详细。
在这里插入图片描述

进入控制台,新建一个函数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置一下层,里面是运行代码所需的第三方库

在这里插入图片描述

在这里插入图片描述
到了这里之后,设置一下触发条件,就是多久运行一次
在这里插入图片描述
在这里插入图片描述
到了这里就大功告成了!!!
上个效果图看看,右边的其实就是效果图
在这里插入图片描述

本文参考了以下帖子:

[Python] 微信公众号消息推送(内含天气预报API接口)

城市id获取

【玩转云函数】腾讯云函数 Python 依赖安装

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/70696
推荐阅读
相关标签
  

闽ICP备14008679号