0. 前言
本文首发于公众号:可乐python说
昨天,和一位朋友聊天,他说最近准备学习 Python
这门编程语言,问我学完 Python 能做哪些事情。
正好,最近他女朋友有点闷闷不乐,他也寻思着给她找点乐子,开心一下。我随口说了句,可以用 Python 哄女朋友呀。
没想到他竟当真了,说完就立马要我实现,今天给大家分享如何使用 Python 哄女朋友。
1. 功能简介
使用 Python 给女朋友发送随机笑话,博得美人一笑。
主要分为两部分功能,一是获取随机笑话,二是将获取的随机笑话发送给女朋友。
使用第三方库 requests
发送 HTTP 请求获取随机笑话,使用第三方库 wxpy
完成微信登录、微信好友列表获取、以及发送微信消息等操作。
以上两个库的安装,可直接使用以下命令:
pip install requests
pip install wxpy
2. 功能实现
2.1 获取随机笑话函数封装
使用 requests 模块发送 HTTP GET
请求,对返回数据进行解析,获取随机笑话内容,并作为函数的返回值返回。
import requests
def get_joke() -> str:
"""获取随机笑话"""
# 1. 随机笑话获取接口 URL
url = "https://autumnfish.cn/api/joke"
# 2. 获取返回数据
joke_data = requests.get(url)
# 3. 解析数据并返回
return joke_data.text
if __name__ == '__main__':
print(get_joke())
调用函数测试,输出结果如下:
老婆趁我午睡,偷偷的到我钱包里拿钱,于是我质问她:“我每月就只有这么点零花钱,你还拿我的,有没有考虑过我的感受?”
老婆:“考虑过啊,所以我到你那拿钱的时候才会轻手轻脚的,怕吵醒你了。”
一时间我竟然有些感动。。。
2.2 网页版微信登录功能实现
wxpy
库中的 bot.py
模块中,封装了一个 Bot
类,我们称之为 机器人对象
,主要用于登陆与操作微信,涵盖了大部分网页版微信的功能。
使用以下代码即可完成机器人对象初始化与登录功能:
import wxpy
# 网页版微信登陆
bot = wxpy.Bot()
执行代码后,会弹出二维码信息,使用微信扫码即可登录。
2.3 发送微信消息函数封装
调用机器人对象 bot
的 friends
方法获取微信好友列表, 使用 search
方法搜索指定微信昵称的好友,如你女朋友的微信昵称,并获取数据的第一个对象,调用获取对象的 send
方法发送微信消息。
import wxpy
# 网页版微信登陆
bot = wxpy.Bot()
def send_msg():
"""发送消息给女朋友"""
try:
# 通过微信昵称获取女朋友备注信息
friend = bot.friends().search(u'女朋友的昵称')[0]
# 调用 send 方法发送微信消息
# 发送获取的随机笑话
friend.send(get_joke())
except:
pass
2.4 功能测试
1、执行代码,扫码登录微信。
...
# 以上代码略
if __name__ == '__main__':
send_msg()
2、微信消息发送成功,效果如下图:
3. 功能优化
不难发现,上面的功能存在一些不足,我们每次只能发送一条消息,而且每次发送都得重新运行一下代码,这显然不符合我这位朋友的需求。
现在,我们优化一下代码,保证代码只需要运行一次,还能定时发送消息,并且在随机笑话前面添加自己想要的内容 - “女神,开心一刻:”。
3.1 入口函数封装
我们将所有的业务逻辑全部封装至 main
函数中,便于后续优化、升级,选用 time
模块实现定时功能。
...
# 以上代码略
import time
def main():
"""定时发送消息"""
while True:
send_msg()
# 这里设置间隔时间,单位为秒
time.sleep(10)
if __name__ == '__main__':
main()
这里的时间可根据自身情况设置,这位朋友的需求是一个小时发一次,为了便于测试,我们暂时设置为 10 秒一次。
3.2 发送消息函数调整
调整 send_msg
函数中的业务逻辑,在发送的消息前面加上所需的文本内容。
...
# 以上代码略
def send_msg():
"""发送消息给女朋友"""
try:
# 通过微信昵称获取女朋友备注信息
friend = bot.friends().search(u'女朋友的昵称')[0]
print(get_joke())
# 调用 send 方法发送微信消息
friend.send("女神,开心一刻:\n{}".format(get_joke()))
except:
pass
3.3 优化后的功能效果
执行代码,扫码登录即可成功定时发送消息了,接下来,我们看看效果吧。
4. 补充
打开 bot.py
模块的源码可以发现,里面还封装了很多微信操作相关的方法,有兴趣的朋友可以去了解一下。
下面介绍几个常用的方法:
friends:获取所有微信好友
groups:获取所有微信群聊对象
mps:获取所有公众号
user_details:获取单个或多个用户的详细信息
add_friend:添加指定用户为好友
其实,初始化机器人对象时,也可以传递参数,下面介绍几个常用的参数:
cache_path:当前会话的缓存路径,并开启缓存功能,默认不开启
console_qr:在终端中显示登陆二维码,需要安装
pillow
模块,也可为整数,表示二维码单元格的宽度qr_path:保存二维码的路径
5.总结
1、Python 能带给我们很多惊喜,增添生活乐趣,提升学习、工作效率等等。
2、案例中发送的是随机笑话,大家可以根据自身需求,如发送天气预报、新闻、或者其他感兴趣的内容等等。
3、关注公众号,在后台回复 『
哄女朋友
』,即可获取完整源码。4、原创文章已全部更新至 Github:https://github.com/kelepython/kelepython。
5、本文永久博客地址:https://kelepython.readthedocs.io/zh/latest/c01/c03_03.html。
6、欢迎在留言区讨论,有任何疑问也可与小编联系,也欢迎大家分享一些有趣使用的知识。