python趣味编程:如何自动给她讲笑话,让她开心
前言
大学的生活有时候无聊。我想知道为什么我不能用我的知识在生活中找到乐趣,因为我学到了很多东西。不管怎样,我每天都得和助教说早上好。为什么不同时讲个笑话呢?每天早上以固定的时间间隔写一个向助教发送问候和笑话信息的程序是很好的。照你说的做起来~
笑话准备
笑话从哪里来?自己写肯定是不现实的。在这个“云”的时代,各种云都有,自然是不缺开放API的(大部分都是免费的)。随意一搜,果然被我找到一个接口:易源_笑话大全http://apistore.baidu.com/apiworks/servicedetail/864.html
根据它给的API可以获取它所有的笑话,关键代码如下:

这里简单做一下介绍:urllib2是Python的一个获取URL的组件。他以urlopen函数的形式提供了一个非常简单的接口,具有利用不同协议获取URL的能力,同样提供了一个比较复杂的接口来处理一般情况。urllib2可用来完成以下功能:
1.获取Web页面
2.在远程http服务器上验证
3.额外数据请求,如表单提交(GET和POST)
4.异常处理
5.非http协议通信(如FTP)
发短信
笑话准备好了,那么怎么发短信到手机呢?类似上面小节,我想着肯定也有开放的API,但是这次就没那么幸运了,短信API都是要付费的~, 对于一个学生党来说有点不现实。怎么办??苦思冥想不得其解,这个时候突然收到移动服务号的短信如图:

小编推荐一个学python的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
这提醒了我,移动的139邮箱要给用户收到的邮件发送短信提醒!!这就妙了,因为发邮件是不需要钱的,我只需要发邮件到Ta的139邮箱就可以了,哈哈。关键代码如下:

我是用的是qq邮箱,一般的邮件服务器都会开放smtp,pop3,imap服务的端口给用户,让用户可以查询邮件或者发送邮件。我们这里发送邮件,所以使用smtp服务。Python 的smtplib库可以实现这一功能。
小编推荐一个学python的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
整合代码尝试,效果如下图:

可见不能完全显示,这是因为139邮箱免费版具有140字限制如图:

有两种办法解决,一是付费5块钱(还是不愿意!),二是把一个笑话分成三部分,分别放在发件人,主题和正文中,如下图:

还是不行,字数限制是个硬伤。那就从原来的从笑话列表里选择第一个笑话改为选择字数最少的一个。代码如下:

如下图:

基本可行了,不过发多了过后腾讯会认为是垃圾邮件(汗),主要是发件人名字太奇怪了,大家有什么好主意可以告诉我一下啊,多多交流。
完整代码(joke.py)如下:


定时任务
现在准备工作齐全了,就差最后一步定时发送了。Linux 提供了一个定时任务工具crontab,windows提供了一个定时任务工具叫做任务计划,不过我的笔记本又不是随时连上网的,所以把这个脚本放在实验室的虚拟机上了(debian)。一般linux都预装有python环境所以只需以下命令:

在文件最后一行添加

这样就能达到每天早上7:30 发送给Ta发短信的目的啦!
总结
总觉得程序员是一个很好的职业,虽然会比较累,不过只要有一双发现的眼睛和对生活的热情就能够用自己的知识给生活带来一些闪光点,比如你可以为不会上网的长辈爬取天气预报信息发送到手机短信顺便问候一声,我相信长辈们都会很开心的。
素材来源于网络:侵删