40行代码搞定女友日常问候微信机器人

桂林seo半杯酒博客

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

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

环境

Python

效果

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

技术原理

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

importitchat, time

import datetime asdt

from apscheduler.schedulers.background

importBackgroundSchedulerimport 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函数

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

defmy_scheduler(runTime):

scheduler = BackgroundScheduler() # 生成对象

scheduler.add_job(tick, 'date', run_date=runTime) # 在指定的时间,只执行一次

scheduler.start()

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

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) # 设定一个新的定时任务,明天零点准时问候

尾巴

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