大家好,我是小白
当我发完上一篇文章后,后台有很多小伙伴私信我说 自己没有云服务器,可以实现这个功能吗?
答案是肯定的!
老规矩,先上效果图!
是不是很赞👍
其实实现这个功能很简单,具体可以参考我的上一篇文章
最近抖音女友早安很火,那我也来跟个风,教程来咯(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
修改相应的配置
使用文本编辑器工具打开 say_good_morning.py
,同样,按照我上一篇文章或Git中的描述将以下几个值改为自己的数据就可以了
appId
该值为你的微信公众平台测试号的appIdappSecret
该值为你的微信公众平台测试号的appSecretuser_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
此步骤是手动将 requests 模块进行安装
目前仅发现腾讯云云函数需要手动安装模块,百度云和阿里云并未发现该问题
大功告成
到此,我们就摆脱了云服务器的束缚,使用免费云产品实现定时发送微信消息
好了,今天的内容就到此结束,有任何问题请 评论区留言
或者 后台私信
完整代码如下,请按需修改
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).daysreturn daysdef main_handler(event, context):appId = ''appSecret = ''wxgzh_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecretaccess_token_json = requests.get(wxgzh_url).json()access_token = access_token_json['access_token']user_open_ids = ['']today = str(dt.datetime.today())[:10]user_dict = {'': {'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 = ''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_cityuser_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_tokenres = requests.post(url, data=json_data)res_text = json.JSONDecoder().decode(res.text)if res_text['errcode'] == 0:print(f'用户 {user} 发送成功')