• 手把手教你使用云产品实现抖音同款微信早安推送(腾讯云Python版本)


    大家好,我是小白

    当我发完上一篇文章后,后台有很多小伙伴私信我说 自己没有云服务器,可以实现这个功能吗?

    答案是肯定的!

    老规矩,先上效果图!

    是不是很赞👍

    其实实现这个功能很简单,具体可以参考我的上一篇文章

    最近抖音女友早安很火,那我也来跟个风,教程来咯(Python版)

    虽然可以实现这个功能,但是大多数同学限制于没有服务器,因此无法继续操作

    那么,这篇文章我将解决这个问题,只要有微信、百度或者支付宝或者华为其中一个账号即可

    说到这儿,相信部分同学已经知道了要使用什么去实现了,没错,今天我要使用云产品实现上篇文章中的微信推送功能

    免费!免费!免费!

    在正式开始前,还是希望各位可以先去阅读一下上一篇文章,以免在接下来的描述中出现各种问号

    链接:最近抖音女友早安很火,那我也来跟个风,教程来咯(Python版)

    获取要使用的代码

    代码地址: https://gitee.com/mxbai/say_good_morning

    首先,需要将代码从我的Gitee仓库拉取到你本地,有两种办法,如下:

    • 如果你不是一位开发人员,或者电脑上没有 Git 工具,那么你只需要将上述地址中的 say_good_morning.py 文件内容复制粘贴到你本地,也可以按下图方式将该文件下载至你本地电脑

    • 如果你是一名开发同学,那可就很简单了,只需要打开你电脑的命令行,执行以下命令即可。请确保你的电脑已经安装了Git,否则会失败
    git clone https://gitee.com/mxbai/say_good_morning.git
    
    • 1

    修改相应的配置

    使用文本编辑器工具打开 say_good_morning.py,同样,按照我上一篇文章或Git中的描述将以下几个值改为自己的数据就可以了

    • appId 该值为你的微信公众平台测试号的appId
    • appSecret 该值为你的微信公众平台测试号的appSecret
    • user_open_ids 该值为你的微信公众平台测试号用户列表中的微信号
    • user_dict 按照代码中的格式修改
    • weather_url 对应的值可以在 https://www.yiketianqi.com/ 网址进行获取
    • yiju_url 对应的值可以在 https://www.mxnzp.com/ 网址进行获取

    创建云函数

    以下内容请认真阅读

    打开任意一个云产品,此处以腾讯云为例

    腾讯云 云函数SCF:https://cloud.tencent.com/product/scf
    阿里云 函数计算FC:https://www.aliyun.com/product/fc
    百度云 函数计算CFC:https://cloud.baidu.com/product/cfc.html

    打开腾讯云,鼠标悬停在产品上,搜索 云函数,如下:

    点击结果,跳转至都对应页面,如下图:

    点击立即体验

    点击前往控制台

    随后点击左侧的函数服务,点击创建,新建一个函数

    云函数基础配置

    在基础配置中,函数类型选择 事件函数,函数名称可以随意写,但是注意只允许为英文;地域选择 北京 或者其他城市;运行环境选择 Python 3.7或更高版本

    函数代码

    在函数代码中,提交方法和执行方法都为默认即可,无需特殊改动

    在代码编辑器中,将之前修改完的代码,粘贴进来

    完整代码见文末

    这里需要注意以下几点

    第一行的编码类型切勿删除
    将原代码中除 getDiffDays() 方法之外的所有代码全部放在编辑器原有的 main_handler()方法中,切记要有缩进
    原有方法 main_handler(event, context) 中的两个默认入参务必保留,即使你未使用到

    云函数高级配置

    在高级配置中,保持默认即可

    在触发配置中,触发方式选择定时触发,定时任务名称可以随意写,触发周期可以按需选择,此处我选择 自定义触发周期,Cron表达式按其要求格式填写(参考https://cloud.tencent.com/document/product/583/9708)

    填写完成后点击完成即可

    测试云函数

    完成后,依次点击 函数管理 -> 函数代码 点击左下角的 测试按钮进行云调试,控制台输出以下内容且微信有收到消息推送即表示成功

    错误解决

    如果出现以下报错,请按下面的方式进行处理

    依次点击 函数管理 -> 函数代码 -> 终端 -> 新终端

    在代开的终端中输入以下命令回车即可

    pip3 install requests -t ./src
    
    • 1

    此步骤是手动将 requests 模块进行安装

    目前仅发现腾讯云云函数需要手动安装模块,百度云和阿里云并未发现该问题

    大功告成

    到此,我们就摆脱了云服务器的束缚,使用免费云产品实现定时发送微信消息

    好了,今天的内容就到此结束,有任何问题请 评论区留言 或者 后台私信


    完整代码如下,请按需修改

    # -*- coding: utf8 -*-
    import json
    import random
    import requests
    import datetime as dt
    
    # 获取日期间隔函数
    def getDiffDays(date1, date2):
        date1 = dt.datetime.strptime(date1, '%Y-%m-%d')
        date2 = dt.datetime.strptime(date2, '%Y-%m-%d')
        days = (date2 - date1).days
        return days
    
    
    def main_handler(event, context):
        # 自己微信公众号的 appId 和 appSecret
        appId = ''
        appSecret = ''
    
        # 微信公众号请求 url
        wxgzh_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret
    
        # 获取微信 access_token
        access_token_json = requests.get(wxgzh_url).json()
        access_token = access_token_json['access_token']
    
        # 用户 open_id 列表
        user_open_ids = ['']
    
        # 获取今天的日期
        today = str(dt.datetime.today())[:10]
        # 用户字典
        user_dict = {
            '': {
                # birthday格式:yyyy-MM-dd
                'birthday': '',
                'city': '北京'
            },
            '': {
                'birthday': '',
                'city': '上海'
            }
        }
    
        # 获取天气信息
        """
        获取地址:http://www.tianqiapi.com/ 
        参考返回
        {'nums': 7, 'cityid': '101010100', 'city': '北京', 'date': '2022-08-22', 'week': '星期一', 'update_time': '14:44', 'wea': '多云', 'wea_img': 'yun', 'tem': '32', 'tem_day': '32', 'tem_night': '19', 'win': '北风', 'win_speed': '2级', 'win_meter': '9km/h', 'air': '27', 'pressure': '998', 'humidity': '32%'}
        """
        weather_url = 'https://www.yiketianqi.com/free/day?appid=&appsecret=&unescape=1&city='
        weather_text = requests.get(weather_url).json()
    
        # 每日一句
        yiju_url = 'https://www.mxnzp.com/api/daily_word/recommend?count=10&app_id=&app_secret='
        yiju_text = requests.get(yiju_url).json()
    
        # 这是一句话 可以自行修改
        message = ''
    
        # 自己的模板 ID
        template_id = ''
    
        # 以下代码请勿修改
        # 循环发送消息
        for user in user_open_ids:
            # 获取用户信息
            user_info = user_dict[user]
            # 用户所在城市
            user_city = user_info['city']
            user_bir = user_info['birthday']
    
            user_weather_url = weather_url + user_city
            # 用户所在城市的天气信息
            user_weather_text = requests.get(user_weather_url).json()
            # 获取该用户还有多少天生日
            diff_bir = str(getDiffDays(today, user_bir))
            # 组装请求参数
            req_data = {
                'touser': user,
                'template_id': template_id,
                'data': {
                    'first': {
                        'value': message,
                        'color': "#f00"
                    },
                    'data1': {
                        'value': user_weather_text['date'],
                        'color': "#000"
                    },
                    'data2': {
                        'value': user_weather_text['week'],
                        'color': "#000"
                    },
                    'data3': {
                        'value': user_weather_text['tem'],
                        'color': "#FF8800"
                    },
                    'data4': {
                        'value': user_weather_text['city'],
                        'color': "#000"
                    },
                    'data5': {
                        'value': user_weather_text['wea'],
                        'color': "#000"
                    },
                    'data6': {
                        'value': user_weather_text['tem_night'],
                        'color': "#00BBFF"
                    },
                    'data7': {
                        'value': user_weather_text['tem_day'],
                        'color': "#FF0000"
                    },
                    'data8': {
                        'value': user_weather_text['win'],
                        'color': "#00AA55"
                    },
                    'data9': {
                        'value': user_weather_text['win_speed'],
                        'color': "#00AA55"
                    },
                    'data10': {
                        'value': diff_bir,
                        'color': "#FF0000"
                    },
                    'data11': {
                        'value': yiju_text['data'][random.randint(1, 10)]['content'],
                        'color': "#FF0000"
                    }
                }
            }
    
            '''
            数据转换,发送请求
            '''
            json_data = json.JSONEncoder().encode(req_data)
            url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + access_token
            res = requests.post(url, data=json_data)
            res_text = json.JSONDecoder().decode(res.text)
            if res_text['errcode'] == 0:
                print(f'用户 {user} 发送成功')
    
    • 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
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
  • 相关阅读:
    Python 3.11 有什么新功能?
    Common Sense Machines(CSM):立志成为图像生成适用于游戏引擎的3D资产AI产品
    Docker 安装 Nginx 容器 (完整详细版)
    设计模式-解释器模式
    Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建
    umich cv-5-2 神经网络训练2
    SpringBoot配置文件
    Oracle SQL - HAVING和分析函数的执行顺序
    Enscape 4.1.0 软件安装教程+离线资源库
    C++实测无锁队列concurrentqueue、boost.spinlock 和 std::mutex 在多线程情况下的性能表现
  • 原文地址:https://blog.csdn.net/qq_44664231/article/details/126511704