尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

用腾讯云函数SCF零成本搭建自动化饮食监督系统

用腾讯云函数SCF零成本搭建自动化饮食监督系统 1. 项目概述当“管住嘴”遇上云原生最近在朋友圈和社群里一个词儿特别火——“自律监督师”。说白了就是花钱请个人每天盯着你打卡、催你学习、监督你别吃零食。这钱花得多少有点黑色幽默。我身边就有朋友试过一个月大几百甚至上千效果嘛因人而异但核心问题没变靠外力驱动的自律一旦监督消失很容易打回原形。我自己也一直在和“管住嘴”这件事较劲。健身计划做了无数个最后都败给了深夜的一顿烧烤。直到我开始琢磨能不能用技术手段给自己搭建一个“自动化监督系统”这个系统的核心不是靠意志力硬扛而是通过规则和流程减少决策损耗让健康行为成为“默认选项”。就在我研究各种方案时腾讯云的一款产品进入了我的视野——云函数Serverless Cloud Function SCF。它有个可爱的昵称叫“龙虾”SCF的谐音。这个“龙虾”彻底改变了我的思路。我不再需要租一台24小时开着的服务器也不用写复杂的后台服务只需要把“监督逻辑”写成一小段代码上传到云端设定好触发条件比如每天定时、或者收到特定消息时它就能自动、免费在免费额度内地帮我执行任务。于是一个想法诞生了用腾讯云“龙虾”搭建一个完全属于我自己的、零成本的“饮食监督系统”。这个系统能做什么它可以根据我设定的健康食谱每天定时给我推送今日推荐餐单能在我点外卖时通过关键词识别提醒我这份餐食可能超标甚至能连接我的智能体重秤当数据异常时自动“警告”我。整个过程完全自动化我不需要主动做什么系统会在关键时刻“推”我一把。这不仅仅是省下了请“自律监督师”的费用更重要的是我夺回了对自己习惯的“设计权”。下面我就来详细拆解如何用这只“龙虾”管住自己的嘴。2. 系统核心设计从“人监督”到“系统提醒”传统的“管住嘴”依赖于个人的瞬时意志力这是一种消耗性资源在疲惫、压力大时极易耗尽。而我们要构建的系统其核心思想是“前置决策与自动化干预”将需要意志力参与的“执行决策”提前到精力充沛时完成“规则设计”并由系统在特定场景下自动触发提醒或行动。2.1 为什么选择腾讯云函数SCF市面上能实现定时任务或事件触发的方案很多比如自己买台云服务器搭个Python脚本或者用一些现成的效率工具如IFTTT、Zapier。我选择SCF主要基于以下几点考量真正的零成本启动腾讯云SCF每月有充足的免费调用次数和运行时长额度。对于个人监督这类低频调用场景每天几次到几十次几乎可以永久免费使用。这意味着项目启动没有财务门槛。无需运维我不需要关心服务器在哪里、系统要不要打补丁、运行环境怎么配置。只需要专注写好我的业务逻辑代码上传即可。这省去了大量学习和维护成本。事件驱动精准触发SCF的核心优势在于其事件驱动模型。它可以由多种事件触发定时触发器每天早中晚定时推送健康餐单。API网关触发器当我手动发送一个查询请求比如“今天吃什么”时触发。COS对象存储触发器假设我设计一个“饮食拍照打卡”流程上传照片到指定存储桶后触发函数进行图像识别需结合其他AI服务或简单记录。CMQ消息队列触发器与其他服务解耦实现更复杂的异步流程。生态集成好腾讯云内部SCF可以非常方便地调用其他服务比如发送短信SMS、发送邮件通过SMTP或SES、访问数据库MySQL/Redis未来如果想升级系统扩展性很强。注意虽然SCF免费额度很友好但务必在腾讯云控制台设置好函数执行的超时时间和内存避免因代码死循环或异常导致意外扣费。通常个人监督类函数128MB内存3秒超时完全足够。2.2 系统架构与数据流设计我的“饮食监督系统”1.0版本主要聚焦两个最实用的功能定时餐单推送和外卖关键词监控。整个系统的架构非常轻量如下图所示概念图[用户] - [微信/邮件/短信] - [API网关] - [腾讯云函数 SCF] | v [逻辑处理 规则匹配] | v [内部数据食谱JSON / 关键词列表]数据存储初期为了极致简单我没有引入外部数据库。食谱和关键词规则我直接以JSON格式写在函数的代码文件里或者放在一个同目录的配置文件中。这样做的好处是部署简单修改规则后重新部署函数即可。缺点是修改不够灵活适合规则相对固定的场景。消息推送我选择了最常用的微信作为推送渠道。这里并非用微信官方API而是通过“Server酱”或“PushPlus”这类第三方推送服务它们提供了简单的Webhook接口SCF只需发起一个HTTP请求就能把消息推送到我的微信上。成本为零接收及时。触发方式定时推送使用SCF控制台自带的“定时触发器”采用Cron表达式设定时间如0 30 11 * * * *表示每天11:30触发。外卖监控这是一个“半自动”流程。当我打开外卖APP挑选时我会将看中的商品标题复制下来然后发送到一个我预设的“指令微信”。这个微信号由另一个SCF函数监听通过公众号简易接口或第三方工具转发收到消息后函数立刻分析标题中的关键词并秒回给我分析结果。这个设计的关键在于它将健康决策从“外卖APP浏览时”转移到了“编写关键词规则列表时”。我只需要在某个周末冷静地制定好规则如“红烧肉”、“麻辣香锅”、“千层蛋糕”为红色警告“轻食”、“沙拉”、“荞麦面”为绿色鼓励后续所有的判断都交给没有感情的代码执行。3. 实操搭建从零部署你的第一只“监督龙虾”理论说完我们动手实现最核心的“定时健康餐单推送”功能。你会看到整个过程比想象中简单得多。3.1 前期准备与环境配置注册腾讯云账号如果还没有前往腾讯云官网注册。完成实名认证这是使用大多数服务的前提。开通云函数服务在控制台搜索“云函数SCF”进入功能页面点击“开通服务”。新用户会有免费资源包直接领取即可。准备推送渠道以“PushPlus”为例访问其官网用微信登录获取一个token。这个token是用于识别你的身份将消息推送到对应微信的关键。记下这个token。3.2 函数代码编写我们使用最主流的Python 3.7环境。在本地创建一个名为send_diet_reminder.py的文件。# -*- coding: utf8 -*- import json import random import requests from datetime import datetime # 1. 定义你的健康食谱库 (简单示例可扩展) HEALTHY_MEALS { 早餐: [全麦面包鸡蛋牛奶, 燕麦粥坚果水果, 希腊酸奶奇亚籽莓果], 午餐: [鸡胸肉沙拉糙米饭, 番茄龙利鱼蒸红薯, 豆腐菌菇煲杂粮饭], 晚餐: [凉拌黄瓜虾仁小米粥, 冬瓜海带汤蒸芋头, 西兰花炒牛肉少油], } # 2. PushPlus的配置 (替换成你自己的token) PUSHPLUS_TOKEN 你的PushPlus令牌 PUSHPLUS_URL http://www.pushplus.plus/send def main_handler(event, context): 主函数SCF的入口 event: 触发事件的数据定时触发时为一个固定结构 context: 运行上下文信息 try: # 3. 生成今日推荐 current_hour datetime.now().hour meal_type if 6 current_hour 10: meal_type 早餐 elif 11 current_hour 13: meal_type 午餐 elif 17 current_hour 20: meal_type 晚餐 else: # 非饭点时间推送一条鼓励语录或明日预告 send_message(加餐时间到推荐一根香蕉或一小把杏仁。记得多喝水哦~) return 非正餐时间已发送加餐提醒 if meal_type: # 从该餐类中随机选择一项 today_recommendation random.choice(HEALTHY_MEALS[meal_type]) message_content f【健康饮食提醒】\n️ 当前时段{meal_type}\n✅ 今日推荐{today_recommendation}\n 别忘了喝足8杯水 # 4. 调用推送函数 send_message(message_content) return f{meal_type}提醒发送成功: {today_recommendation} except Exception as e: # 错误处理可以将错误信息记录到日志或通过其他方式通知自己 error_msg f函数执行出错: {str(e)} print(error_msg) # 这会在SCF日志中显示 return error_msg def send_message(content): 使用PushPlus发送消息到微信 data { token: PUSHPLUS_TOKEN, title: 你的饮食监督系统, content: content, template: txt # 纯文本格式 } # 注意生产环境应考虑增加重试机制和超时设置 response requests.post(PUSHPLUS_URL, datadata) if response.status_code 200: print(消息推送成功) else: print(f消息推送失败状态码{response.status_code}) # 本地测试时使用 if __name__ __main__: main_handler(None, None)这段代码做了几件事定义了一个简单的三餐食谱字典。根据函数触发的时间判断是早餐、午餐还是晚餐时段。从对应的食谱列表中随机挑选一项增加新鲜感。调用send_message函数将推荐餐单通过PushPlus推送到你的微信。3.3 部署与配置腾讯云函数创建函数在SCF控制台点击“新建”选择“从头开始”。函数类型事件函数。函数名称DietReminder。运行环境Python 3.7。提交方法选择“本地上传zip包”。将你的send_diet_reminder.py文件压缩成code.zip注意如果代码有依赖包需要一起打包本例中requests是SCF环境内置的无需额外处理。高级配置执行超时时间建议设为3秒对于简单的HTTP请求足够。内存选择128MB即可完全够用。配置触发器在函数详情页点击“触发管理” - “创建触发器”。触发类型选择“定时触发”。触发周期选择“自定义触发周期”。Cron表达式这里需要根据你的作息来定。例如早餐提醒0 30 7 * * * *(每天7:30)午餐提醒0 0 12 * * * *(每天12:00)晚餐提醒0 30 18 * * * *(每天18:30)点击“提交”。测试创建完成后你可以点击控制台的“测试”模拟触发一次函数。查看“日志”页面如果显示“消息推送成功”并且你的微信收到了消息那么恭喜你第一只“监督龙虾”已经上岗了3.4 扩展外卖关键词监控函数餐单推送是“主动关怀”外卖监控则是“实时拦截”。我们再快速创建一个函数来实现它。创建一个新函数takeout_monitor.py它的触发方式将是“API网关触发器”模拟收到微信消息。# -*- coding: utf8 -*- import json import requests # 定义关键词规则库 KEYWORD_RULES { red: [红烧肉, 麻辣香锅, 炸鸡, 蛋糕, 奶茶, 肥宅水, 烧烤], yellow: [盖浇饭, 拉面, 炒饭, 饺子, 汉堡], green: [沙拉, 轻食, 荞麦面, 鸡胸肉, 粗粮, 白灼] } PUSHPLUS_TOKEN 你的PushPlus令牌 PUSHPLUS_URL http://www.pushplus.plus/send def main_handler(event, context): # 从API网关事件中解析出用户发送的文本 # 事件结构较复杂这里做简化处理。实际使用可能需要根据你对接的消息源调整。 try: # 假设事件体是JSON且消息内容在 body 字段里 req_body json.loads(event.get(body, {})) user_message req_body.get(content, ).strip() # 根据你的消息源调整字段名 except: # 如果解析失败尝试直接从查询字符串获取 query_string event.get(queryString, {}) or event.get(queryStringParameters, {}) user_message query_string.get(msg, ) if not user_message: return {statusCode: 400, body: No message provided} analysis_result analyze_food(user_message) # 推送分析结果 send_message(analysis_result) return { statusCode: 200, body: json.dumps({result: Analysis sent}) } def analyze_food(text): 分析文本中的关键词 found_red [] found_yellow [] found_green [] for word in KEYWORD_RULES[red]: if word in text: found_red.append(word) for word in KEYWORD_RULES[yellow]: if word in text: found_yellow.append(word) for word in KEYWORD_RULES[green]: if word in text: found_green.append(word) # 构建回复消息 reply f【外卖分析报告】\n你查询的菜品{text}\n\n if found_red: reply f 红色警告词{, .join(found_red)}\n 这可能会让你的健身计划泡汤强烈建议换一个选择。\n if found_yellow: reply f⚠️ 黄色提示词{, .join(found_yellow)}\n 适量食用注意控制份量。\n if found_green: reply f✅ 绿色鼓励词{, .join(found_green)}\n 不错的选择放心吃吧\n if not (found_red or found_yellow or found_green): reply 未识别到典型关键词请自行判断。建议优先选择烹饪方式清淡蒸、煮、凉拌、蛋白质和蔬菜丰富的菜品。 return reply def send_message(content): 推送函数同上 data {token: PUSHPLUS_TOKEN, title: 外卖雷达, content: content, template: txt} requests.post(PUSHPLUS_URL, datadata)部署这个函数后你会获得一个API网关的访问URL。你可以将这个URL配置到“Server酱”或“PushPlus”的“发送消息”动作中或者如果你有公众号开发能力可以直接对接。这样当你复制外卖标题发送到指定地方时几秒内就会收到系统的分析报告。4. 高阶玩法与系统优化基础功能跑通后这个系统的想象力可以非常大。关键在于利用SCF的“连接器”特性将更多数据和服务接入进来。4.1 接入智能硬件数据如果你有小米、华为等品牌的智能体重秤并且数据可以同步到它们的云服务你可以尝试通过间接方式获取数据。思路虽然直接调用厂商API可能复杂但可以查看这些健康APP是否提供“数据导出”或“报告推送”到邮件的功能。如果可以你可以设置一个规则让APP将每日体重报告发送到你的特定邮箱。SCF实现使用SCF的定时触发器每天凌晨调用一个函数这个函数通过IMAP协议读取你的指定邮箱解析新邮件中的体重数据。如果发现体重连续三天上涨或超过阈值就自动触发PushPlus推送一条“警报”消息比如“⚠️ 体重监测警报连续三日上升建议今日执行轻断食或增加有氧运动。”技术点这里需要用到Python的imaplib和email库来解析邮件。注意邮箱需要开启IMAP/SMTP服务并在SCF环境变量中安全地配置邮箱账号和授权码而非密码。4.2 构建个性化食谱库与学习能力最初的食谱是硬编码的缺乏个性化和可持续性。引入数据库使用腾讯云的云开发TCB或云数据库MySQL创建一个recipes表。字段可以包括id,meal_type,name,calories,ingredients,difficulty,last_cooked。SCF交互创建新的函数例如add_recipe: 通过API网关触发让你可以随时通过微信发送“添加食谱 午餐 鸡胸肉沙拉 350大卡”函数解析后存入数据库。get_weekly_report: 每周日定时触发统计本周推荐了哪些食谱、你的体重变化趋势如果接入了的话生成一个简单的周报推送给你。智能推荐算法在main_handler里不再随机选择而是根据last_cooked时间、你的偏好可以建一个评分表进行简单推荐避免重复度过高。4.3 成本控制与监控告警虽然免费额度很充足但养成良好的云资源使用习惯很重要。设置预算告警在腾讯云“费用中心”设置月度预算比如5元。一旦SCF产生任何意外费用超出免费额度你会立即收到短信和邮件告警。查看运行日志定期在SCF控制台查看函数的“运行日志”和“监控指标”关注调用次数、运行时间、错误率。如果发现错误可以及时排查代码问题。使用环境变量像PUSHPLUS_TOKEN这样的敏感信息千万不要硬编码在代码里。在SCF的函数配置中使用“环境变量”功能来存储。代码中通过os.environ.get(PUSHPLUS_TOKEN)来读取。这样既安全也方便在不同环境测试、生产切换配置。5. 避坑指南与心得分享在实际搭建和运行过程中我踩过一些坑也积累了一些让系统更稳健的心得。5.1 常见问题与排查函数执行失败日志显示“ModuleNotFoundError”原因代码中使用了非Python标准库且非SCF内置的第三方包如pandas,requests旧版本环境可能没有。解决必须使用“依赖打包”的方式部署。在本地创建一个requirements.txt文件写明依赖如requests2.25.1然后使用SCF提供的“在线依赖安装”功能或者更推荐的方式在本地使用虚拟环境安装包到指定目录然后连同代码一起打包成ZIP。# 本地操作示例 mkdir my_project cd my_project python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install requests -t . # -t . 表示安装到当前目录 # 将你的 .py 代码文件也放入此目录 zip -r code.zip ./*定时触发器不执行原因1Cron表达式写错。腾讯云SCF的Cron有7位秒 分 时 日 月 星期 年最后一位年可以省略或用*。最容易出错的是星期和日的冲突。建议使用控制台提供的“表达式生成器”可视化配置或者先用最简单的*/5 * * * * * *每5秒一次测试函数是否能被触发再调整为你需要的周期。原因2函数本身有错误导致每次触发都快速失败。去“日志查询”页面查看是否有报错信息。PushPlus消息收不到排查步骤检查token是否正确是否复制了空格。在SCF日志中查看send_message函数里打印的response.status_code和内容。如果是200说明PushPlus服务端已接收成功。登录PushPlus官网查看“消息记录”确认消息是否已发送。如果已发送但微信未收到检查微信是否关注了“PushPlus”公众号并绑定了账号。检查网络SCF函数默认运行在腾讯云内网环境出网是正常的但极少数情况下可能受限。可以在函数内尝试访问http://www.pushplus.plus看是否通。5.2 我的实操心得从简开始快速验证不要一开始就追求大而全的系统。我的第一个版本就是一个每天中午12点给我微信发“该吃午饭了别吃太油”的简单函数。它运行了一周让我感受到了自动化提醒的“存在感”这给了我继续完善的动力。规则要人性化别太反人性在设置外卖关键词时一开始我把所有爱吃的都设为“红色”结果系统天天报警反而产生了逆反心理。后来我调整了策略将最爱但最不健康的设为红色将可接受的设为黄色并允许自己每周有1-2次“黄色”选择。系统是辅助不是监狱。利用好“免费”的边界清楚了解SCF的免费额度每月100万次调用40万GBs资源用量。个人使用远远达不到这个量级。但如果你设计的函数执行时间很长比如处理图片或者被恶意频繁调用就可能产生费用。所以务必设置函数超时3-10秒足够并为API网关触发器设置访问鉴权或频率限制。日志是你的好朋友在代码关键节点多用print输出状态信息。SCF控制台的日志查询功能非常强大能帮你快速定位函数是在哪一步出错的。养成测试后查看日志的习惯。通过这个项目我最大的收获不是省了多少钱而是掌握了一种思维用确定的、低能耗的系统去对抗不确定的、高能耗的欲望。技术在这里不是目的而是构建一个更友好、更智能个人环境的手段。腾讯云的这只“龙虾”就像一位不知疲倦、绝对理性的数字伙伴在背后默默地支撑着我的健康目标。当你觉得自律很难时或许不是意志力的问题而是你的“系统”需要升级了。
返回列表