手把手教你使用云产品实现抖音同款微信早安推送(腾讯云Python版本)
大家好,我是小白
当我发完上一篇文章后,后台有很多小伙伴私信我说 自己没有云服务器,可以实现这个功能吗?
答案是肯定的!
老规矩,先上效果图!
是不是很赞👍
其实实现这个功能很简单,具体可以参考我的上一篇文章
虽然可以实现这个功能,但是大多数同学限制于没有服务器,因此无法继续操作
那么,这篇文章我将解决这个问题,只要有微信、百度或者支付宝或者华为其中一个账号即可
说到这儿,相信部分同学已经知道了要使用什么去实现了,没错,今天我要使用云产品实现上篇文章中的微信推送功能
免费!免费!免费!
在正式开始前,还是希望各位可以先去阅读一下上一篇文章,以免在接下来的描述中出现各种问号
获取要使用的代码
首先,需要将代码从我的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 模块进行安装
目前仅发现腾讯云云函数需要手动安装模块,百度云和阿里云并未发现该问题
大功告成
到此,我们就摆脱了云服务器的束缚,使用免费云产品实现定时发送微信消息
好了,今天的内容就到此结束,有任何问题请 评论区留言
或者 后台私信
完整代码如下,请按需修改
# -*- 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} 发送成功')
相关文章
- Python基础入门
- Python 日期和时间_python 当前日期时间_python日期格式化
- Python读取文件夹按数字排序
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
- Python模块学习filecmp文件比较
- Python检查数组元素是否存在类似PHPisset()方法
- Python的组合模式与责任链模式编程示例
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- python之设计模式
- 华为OD机试 - 构成正方形的数量(Java & JS & Python)
- 如何使用Python快速上手数据分析
- Python:利用python语言实现18位身份证号码和15位身份证号码相互转换
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
- Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
- Python语言学习之数值、小数、空格那些事:python和数值、小数、空格的使用方法之详细攻略
- Python之API:基于python语言调用华为云API(华为网站)实现特定功能
- 【Python成长之路】来聊聊多线程的几位“辅助”
- python 将一个JSON 字典转换为一个Python 对象
- Python对音频进行测试及频谱分析
- python实战===教你用微信每天给女朋友说晚安
- python基础===Python 代码优化常见技巧
- 【Leetcode刷题Python】239. 滑动窗口最大值
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 〖Python自动化办公篇⑲〗 - python实现邮件自动化 - 邮件发送
- 〖Python自动化办公篇㉑〗- python实现邮件自动化 - 定时发送邮件
- Python爬虫详解
- Python爬虫自学系列(番外篇一):代理IP池