社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

再也不担心忘记她的那些节日了,用python搞定女友日常问候

数据挖掘与大数据分析 • 7 年前 • 849 次点击  

作者:数据取经团-施维  来自:数据取经团 



前言


作为一个程序狗,有个女朋友不容易,关键是女朋友还有各种各样的要求,比如每天晚上12点说晚安,每个纪念日要记得。这可让程序员如何是好,要知道,晚上12点,对我们来说晚上才刚刚开始;纪念日对我们来说就是写完一个project的日子。


所以,对于女朋友提出的需求,作为程序员的我们,当然不能坐视不管了,我们要写个程序来搞定它。

环境

Python


效果


先看看效果,微信号会在每天设定的时间按时按点发问候语给设定好的另一个微信号,同时可以自动进行一些相应的计算并更新每一天的内容,内容方面,就要靠大家丰富的想象力啦,这里只是给个演示。至于为什么问候只持续到10月27日,嗯...,这就是一个尴尬的故事了



技术原理


技术原理部分,说简单也很简单,都是利用python现成的库来实现的,所以代码量很少,只有区区40行。大概的过程就是先使用电脑登录接口登录个人微信,然后挂着微信,在电脑是进行定时和内容操作,并完成发送。下面先来看看使用到的几个包:




    
import itchat, time
import datetime as dt
from apscheduler.schedulers.background import BackgroundScheduler
import random

上面引用的包里面,itchat和apscheduler是不自带的,所以需要我们自行安装,其中,itchat是微信网页端的相关接口包,apscheduler是python定时服务包就安装过程也非常简单,在命令行中输入:

pip install itchat 
pip install apscheduler

main函数


首先我们需要登录我们的个人微信,然后才能利用网络接口进行相关的操作。在主函数中,我们在登录完成后首先获取当前时间,然后设定下一个问候时间为明天的零点,然后开启定时服务和微信服务。代码如下:

if __name__ == '__main__':
itchat.auto_login(enableCmdQR=True) # 在命令行中展示二维码,默认展示的是图片二维码
   # itchat.auto_login(hotReload=True) # 这个是方便调试用的,不用每一次跑程序都扫码
   
now = dt.datetime.now() # 获取当前时间
   
nextTickTime = now + dt.timedelta(days=1) #下一个问候时间为明天的现在
   
nextTickTime = nextTickTime.strftime("%Y-%m-%d 00:00:00") # 把下一个问候时间设定为明天的零点
   
my_scheduler(nextTickTime) # 启用定时操作
   
itchat.run() # 跑微信服务

这里我们需要注意一下,我们使用的定时服务是异步的,也就是说,微信服务和定时服务是不会相互阻塞的,这才能使我们既进行微信的相关操作,又能在定时操作中做一些其他的事情。


my_scheduler函数

接下来看看我们的定时操作都干了什么:

def my_scheduler(runTime):
scheduler = BackgroundScheduler() # 生成对象
  scheduler.add_job(tick, 'date', run_date=runTime) # 在指定的时间,只执行一次
  scheduler.start()

可见,定时操作函数也非常简单,就是建立了一个后台定时对象,添加了一个定时任务,然后让它开始工作。这里重点在添加任务这一步,参数tick是一个函数,也就是添加的这个任务要干啥,runTime是这个任务的执行的时间。所以,scheduler好比是一个闹钟,到了时间就提醒tick函数开始执行了。


tick函数


最后,我们来看看tick函数,这个函数其实就是这整份代码的核心啦,直接看代码:

# 一些备选问候语
greetList = ['快去睡觉别熬夜','好好找工作加油','注意身体多喝热水','想你了求自拍']
def tick():
users = itchat.search_friends(name=u'xxx') # 找到你女朋友的名称
  userName = users[0]['UserName']
meetDate = dt.date(2015,9,29) # 这是你跟你女朋友相识的日期
  now = dt.datetime.now() # 现在的时间
  nowDate = dt.date.today() # 今天的日期
  passDates = (nowDate-meetDate).days # 你跟你女朋友认识的天数
  itchat.send(u'今天是我们认识第%d天,%s,晚安'%(passDates,random.sample(greetList,1)[0]),toUserName=userName) # 发送问候语给女朋友
  nextTickTime = now + dt.timedelta(days=1)
nextTickTime = nextTickTime.strftime("%Y-%m-%d 00:00:00")
my_scheduler(nextTickTime) # 设定一个新的定时任务,明天零点准时问候

可以看到,即使是最核心的代码,不管是思想还是实现也都还挺简单的。先利用itchat的接口,找到女朋友的微信,然后根据你们认识的日期和今天的日期计算出认识的天数,发送即可。然后再调用定时函数来进行明天的任务,可以看到,这说白了就是个递归的操作。



尾巴


至此,这个小小的程序就写完了,40行代码搞定,每天准时问候女友。当然,只需要稍微一改,很容易就能变成了周年纪念日提醒,100天提醒等等。这个就靠大家发挥想象力啦!


所有源码都已经上传github,大家可查看,如果有什么需要改进也可联系本人。一起学习一起进步!!


github链接:https://github.com/PP8818/Python-Projects/tree/master/py3/wexin_personal

点击了解数据君的数据圈,与3500人一起学习数据分析....

欢迎投资数据分析领域的学习,数据分析将成为人人都必备的职场技能.....



加入方式:


1:扫码加入


2、加入方式:


加我微信:seedata      

转账398,先拉微信群,再邀请进小密圈

犹豫的、不懂的、咨询的不要加,加了也是僵尸,时间宝贵,你我都珍惜


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/mOEI71EzKQ
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4400
 
849 次点击