程序员的恋爱
在我们程序员的世界里,比起找男/女朋友,更习惯于电脑打交道。这是因为程序不会撒谎且能够及时给予结果反馈,而人类的感情基本是没有什么规律可循的。具体有多不规律呢?举个恐怖的例子,想象一下,你在实现接口时引入 random.choice() 随机调用执行函数 | 接口返回随机的数据结构…
这导致在大多数人眼中程序员自带害羞 & 木纳的 attribute,认为我们不擅长与异性同类打交道。但事实是,我们一旦锁定了目标,在我们缜密的 (编程) 表白逻辑与 23 种 (设计) 套路模式下,对方大概率会缴械投降。并且我相信,在一起过不了多久,他/她就会陷进我们层出不穷的恋爱黑科技中,无法自拔…
我的恋爱故事
来听一听我的恋爱经历。
不久前我认识了一个女生,可能是被狮子座女生强烈且独特的个性所吸引,在完成了上线(表白)前最后的预发布测试后,我向她表白了。正好她也喜欢我(测试通过),于是我们很快就在一起了。
不知不觉间,已经一起度过了半年的时光。这期间经历了很多很多事情,有好有坏。但不得不承认她确实丰富了我的日常生活(除电脑外的生活),并且我们都在变得越来越好,这让我更坚定了跟她走下去的决心。
我的恋爱神器
一直想让她亲身体验一下程序员男友的技术实力,于是趁着这次五一小长假,我终于实现了藏在心中已久的黑科技:
恋爱版微信消息推送机器人。
先给大家展示一下具体效果。
测试环境效果展示:
线上环境效果展示:
项目灵感来源于日常生活中的一些小插曲:
回家路上:
她: 今天是我们在一起的多少天了 ?
我: em.... 好像是 120 天了 ?
她: 错了!是 121 天了!
我: 呜呜呜 我错了...
上班的时候:(下午 5 点 20 分)
她: 打卡!
....
她: 你都不打卡了!是不是不爱我了!
....
我: 呜呜呜 我错了...
开源项目介绍
Relationship-Maintenance
最稳定的(恋爱版)微信消息推送机器人。
开源地址: github.com/amazingTest/Relationship-Maintenance
技术栈
- Python 3.6
- requests
- APScheduler
主要功能
-
微信消息推送
-
cron 定时推送
-
多任务并行推送
-
自定义标题 & 内容
-
随机内容配置(内置恋爱话术库)
-
程序架构
整个项目代码架构比较简单,核心代码共分为三个大模块:
- info_bot: 主要用于获取消息,分为内部消息(不需要网络请求)和外部消息;
- messenger:主要用于实现消息推送(如企业微信消息推送)
- cron:主要用于定时任务管理,结合 info_bot 与 messenger 达到程序最终的目的:自定义消息定时推送
使用
安装依赖
pip install -r requirements.txt
消息推送配置
本项目采用了企业微信推送消息到微信(个人微信也能注册,无需认证,消息能直接在微信看到)
消息配置步骤:
-
首先需要 [用电脑打开企业微信官网,注册一个企业]
-
注册成功后,点「管理企业」进入管理界面,选择「应用管理」 → 「自建」 → 「创建应用」
-
创建完成后进入应用详情页,可以得到应用ID ( agentid ),应用Secret ( secret )
-
进入「我的企业」页面,拉到最下边, 获取企业ID (corpid)
-
进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息。
最后一步,将上面获得的 agentid,secret,corpid 写入 config/messenger.json 中就大功告成了。
例子
examples/config/messenger.json
[{
"channel": "enterprise_we_chat_app",
"payload": {
"agentid": "1000001",
"corpid": "wweb6a6b9523f30fa4",
"secret": "JF1BC4UvyEW8ZepkVfsg_AlAgjqFpNIslA_hUD78Dso"
}
}]
定时任务配置
用于创建定时任务,定时向微信推送消息。
在 config/cron.json 中进行配置
例子
examples/config/cron.json
[{
"mission": {
"name": "lover_greeting",
"payload": {
"title": "宝贝~ 起床啦~",
"begin_date": "2021-11-10",
"greeting_type": "morning"
}
},
"cron": "00 08 * * *",
"messenger": "enterprise_we_chat_app"
}, {
"mission": {
"name": "lover_greeting",
"payload": {
"title": "宝贝~ 中午啦~",
"greeting_type": "normal"
}
},
"cron": "00 12 * * *",
"messenger": "enterprise_we_chat_app"
}, {
"mission": {
"name": "lover_greeting",
"payload": {
"title": "520 !准时打卡!",
"content": "准时不!",
}
},
"cron": "20 17 * * *",
"messenger": "enterprise_we_chat_app"
}]
例子中共有 3 个定时消息推送任务:
-
早上 8 点推送一条消息:
宝贝~ 起床啦~ 今天我们在一起 184 天了~ 早安!当你睁开双眼,祝福已飞到你面前,带着快乐的旋律,愉悦的心态,滚滚的财源,甜蜜的浪漫和美妙的生活伴你度过美好的一天!
-
中午 12 点推送一条消息:
宝贝~ 中午啦~ my baby,...爱你!
-
下午 5 点 20 推送一条消息:
520 !准时打卡! 准时不!
参数解释
-
payload 中的 begin_date(opt) 代表的是开始在一起的时间,用于计算在一起的时长;
-
payload 中 title(opt) 表示推送的标题;
-
payload 中 greeting_type(opt) 表示 lover_greeting 推送的类型(会随机在 config/builtin_sentences.json 中选择一条作为 content);
-
若在 payload 设置 content(opt) 值则会覆盖 greeting_type(opt) 参数产生的效果
运行程序
python3 main.py
- 支持 docker 容器化部署哦!
最后的总结 & 回顾
整个项目从 整理思路 -> 完成实现 -> 成功部署 -> 通过测试 大概耗时 2 天。
写了不少的开源项目了,感觉每次写新项目都是打破旧我,重新架构的过程(代表了当下的巅峰代码实力…)。非常建议大家有灵感或想法的时候不要犹豫,马上去实现!(这真的是个好习惯,强烈推荐!)
最后祝愿世间有情人天长地久!
单身的朋友也无需气馁, 先把此项目安排上,早日拿下心上人哦~ :)
共同学习,写下你的评论
评论加载中...
作者其他优质文章