实战 | 使用 Python 哄女朋友

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 发送微信消息函数封装

调用机器人对象 botfriends 方法获取微信好友列表, 使用 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、微信消息发送成功,效果如下图:

实战 | 使用 Python 哄女朋友_第1张图片

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 优化后的功能效果

执行代码,扫码登录即可成功定时发送消息了,接下来,我们看看效果吧。

实战 | 使用 Python 哄女朋友_第2张图片

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、欢迎在留言区讨论,有任何疑问也可与小编联系,也欢迎大家分享一些有趣使用的知识。

你可能感兴趣的