
哄女朋友表情包
-
2023年2月17日发(作者:)Python⼊坑之哄⼥朋友开⼼⼩技巧
前⾔
⼈⽣苦短,我⽤Python。这句话证明现在Python有多⽕。⼤约2年前我就开始接触了Python,因⼯作需求要⾃学Python,后续的SDK打包脚本
就是⽤Python编写的。对于Python的理解基本停留在会⽤阶段,深⼊的话就拉垮了。最近忙⾥偷闲,⽤之前⾃学过的知识点组合⼀下,搞⼀点
有意思的事情。
你能学到的知识
Python中的JSON解析
Python中SMTP发送邮件
Python中字典的概念
⽂章中所⽤的编译器为MacPycharm社区版,演⽰代码为Python2.7版本
制定⼀个需求
获取中国天⽓⽹指定城市的天⽓,例如我在北京。然后获取北京天⽓数据等状态信息,通过邮件发送给⼥朋友,就这么简单。
环境配置
为了照顾⼀下新⼿同学,从零给⼤家演⽰下,环境的配置和安装。有python基础的可以忽略此块往下看。新⼿同学看过来啊、看过来
本⽂演⽰的编译器为MacPycharm社区版,Python环境是mac上⾃带的不需要单独装(这也是我喜欢⽤mac原因很多环境都⾃带)。打开终端输
出python直接能展⽰出python版本。我的版本为2.7.16。
倒叙说⼀下,如果之前没有安装过对应的库直接running我的⼩例⼦会直接报错,报错原因⼊下图所⽰,这个错误简单说就是没有找到requests
这个库。在安装requests库之前你的有⼀个包管理⼯具,⽤来管理第三⽅库的安装、卸载、更新,没错它就是pip.
简介和安装
pip是什么:⾸先要给它定义⼀下,pip是Python包管理⼯具,该⼯具提供了对Python包的查找、下载、安装、卸载的功能。Python2.7.9+
或Python3.4+以上版本都⾃带pip⼯具。你可以通过以下命令来判断是否已安装:
pip--version#Python2.x版本命令
pip3--version#Python3.x版本命令
当然了正常情况下,你肯定是没安装过。那么我演⽰⼀下,mac⾥怎么安装配置的。mac⾥⾯python⾃带easy_install,在终端⾥⾯执⾏sudo
easy_installpip
⽤sudo(超级管理员)命令的时候需要输⼊密码,这个密码是你⾃⼰电脑的密码,输⼊的时候采取了“安全措施”,你看不到⾃⼰输⼊的字符,完
整的输⼊进去以后,回车就可以了。如果输出错误会有提⽰的,你重新输⼊即可。对应的命令展⽰看下图。完成后输⼊pip-v显⽰20.3.1说明安
装是没问题的。
ts简介和安装
接着上⾯的继续说,pip包管理⼯具安装完成了,该进⾏下⼀步安装requests。那么什么是Requests:requests是python编写,基于urllib,采
⽤Apache2Licensed开源协议Http库。它⽤起来⽐urllib更加⽅便,可以满⾜我们⼯作中很多有关于http的需求。
终端直接运⾏pipinstallrequests即可安装,这是python2.x的命令,如果你⽤的和我不是⼀个版本,⽤的python3.x的话需要更改下命令:
pip3installrequests。安装成功的标志能看到Successfully,如下图所⽰喽。
⽹络解析
根据上⾯的需求得知我们需要⼀个天⽓数据来填充邮件。中国天⽓⽹有⼀个免费天⽓Api地址:点击直达,通过城市名字获得天⽓数据,json数据
格式,如下图所⽰,为了看着舒服格式化json数据。
{
\"data\":{
\"yesterday\":{
\"date\":\"15⽇星期⼆\",
\"high\":\"⾼温0℃\",
\"fx\":\"北风\",
\"low\":\"低温-8℃\",
\"fl\":\"\",
\"type\":\"多云\"
},
\"city\":\"北京\",
\"forecast\":[{
\"date\":\"16⽇星期三\",
\"high\":\"⾼温2℃\",
\"fengli\":\"\",
\"low\":\"低温-8℃\",
\"fengxiang\":\"北风\",
\"type\":\"晴\"
},{
\"date\":\"17⽇星期四\",
\"high\":\"⾼温4℃\",
\"fengli\":\"\",
\"low\":\"低温-6℃\",
\"fengxiang\":\"北风\",
\"type\":\"晴\"
},{
\"date\":\"18⽇星期五\",
\"high\":\"⾼温1℃\",
\"fengli\":\"\",
\"low\":\"低温-8℃\",
\"fengxiang\":\"北风\",
\"type\":\"晴\"
},{
\"date\":\"19⽇星期六\",
\"high\":\"⾼温2℃\",
\"fengli\":\"\",
\"low\":\"低温-7℃\",
\"fengxiang\":\"北风\",
\"type\":\"晴\"
},{
\"date\":\"20⽇星期天\",
\"high\":\"⾼温5℃\",
\"fengli\":\"\",
\"low\":\"低温-6℃\",
\"fengxiang\":\"北风\",
\"type\":\"晴\"
}],
\"ganmao\":\"感冒⾼发期,尽量避免外出,外出戴⼝罩防护。\",
\"wendu\":\"1\"
},
\"status\":1000,
\"desc\":\"OK\"
}
我们⽤python代码对这个url进⾏解析,我写⼀个⼩例⼦。如下图所⽰。是不是代码很少python就四⾏搞定。⽽java进⾏⼀次get请求,少说都要
写⼀两百⾏代码,创建流,发请求,解析数据,关闭流等等。当然了我也不是说java不好,每个语⾔的诞⽣总是有它应⽤的场景。
邮件相关的配置
接着上⾯说数据有了,得发邮件呀。Python中SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是⼀组⽤于由源地址到⽬的地
址传送邮件的规则,由它来控制信件的中转⽅式。
python的smtplib提供了⼀种很⽅便的途径发送电⼦邮件。它对smtp协议进⾏了简单的封装。
Python创建SMTP对象语法如下:
importsmtplib
smtpObj=([host[,port[,local_hostname]]])
参数说明:
host:SMTP服务器主机,这是⼀个可选参数。
port:如果你提供了host参数,你需要指定SMTP服务使⽤的端⼝号,⼀般情况下SMTP端⼝号为25。
local_hostname:如果SMTP在你的本机上,你只需要指定服务器地址为localhost即可。
PythonSMTP对象使⽤sendmail⽅法发送邮件,语法如下:
il(from_addr,to_addrs,msg[,mail_options,rcpt_options])
参数说明:
from_addr:邮件发送者地址。
to_addrs:字符串列表,邮件发送地址
msg:发送消息
这⾥要注意⼀下第三个参数,msg是字符串,表⽰邮件。我们知道邮件⼀般由标题,发信⼈,收件⼈,邮件内容,附件等构成,发送邮件的时
候,要注意msg的格式。这个格式就是smtp协议中定义的格式。
既然要使⽤SMTP协议,对应的邮箱我们需要开启对应服务才能使⽤。我拿QQ邮箱演⽰(其它邮箱基本都是⼀个套路不做多说)邮箱设置——账户
——POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务打开前两项。
开启前两项后,会出现下图所⽰,点击⽣成授权码。⽣成完授权码⼀定要保存好不要外泄涉及到安全问题不可忽视。代码中授权码我⽤字符
串“p123ffsasasa1”代替。为了正常跑通流程需要换成你的邮箱还有授权码,不然发不了邮件。
完整的代码
该说该注意的都已经说了,直接上代码,注释基本都加上了。不难理解,代码需要注意对齐和空格问题。
代码中⽤到字典,字典是另⼀种可变容器模型,且可存储任意类型对象。字典值可以没有限制地取任何python对象,既可以是标准的对象,也可
以是⽤户定义的。
#coding:utf-8
importsys
reload(sys)
aultencoding(\'utf-8\')
importrequests,json,smtplib
portMIMEText
importHeader
\'\'\'
#获取城市天⽓
#参数1传城市信息
#参数2传url链接
#例如今⽇天⽓:\'+response[\'data\'][\'forecast\'][0][\'type\'],这个获取forecast字段下type字段⽂字
\'\'\'
defgetCityWhether(city,linkUrl):
url=linkUrl+city#拼接字符串实际url就是/weather_mini?city=北京
response=(url).json()#把返回的数据解析成json
msg=\'rn今⽇天⽓:\'+response[\'data\'][\'forecast\'][0][\'type\']+\'rn温度:\'+response[\'data\'][\'forecast\'][0][\'high\']+\'--\'+response[\'data\'][\'forecast\'][0][\'low\']+\'rn风⼒:\'+respo
returnstr(msg)
#python字典类型转换为json对象
dataSource={
\'linkUrl\':\'/weather_mini?city=\',
\'city\':\'北京\',#你所在的城市,假如你在上海,可以写上海
\'title\':\'帅⽓的男朋友上线喽!rn\',
\'end\':\'rn———python测试呦~~~~~~~\'
}
#构造邮件的⽂本数据
msg=dataSource[\'title\']+getCityWhether(dataSource[\'city\'],dataSource[\'linkUrl\'])+dataSource[\'end\']
message=MIMEText(msg,\'plain\',\'utf-8\')
message[\'From\']=Header(\'北京朝阳区精神病院长\',\'utf-8\')#邮件展⽰发件⼈信息
message[\'To\']=Header(\'⼩仙⼥\',\'utf-8\')#邮件展⽰收件⼈信息
message[\'Subject\']=Header(\"⼩仙⼥专属邮件,请点击查收!\",\'utf-8\')#接收邮件主题内容
sender=\'精神病@\'#真实的邮箱地址,⼀定要填你⾃⼰的邮箱
receiverMail=\'院长@\'#真实的收件邮箱,你要发邮件的邮箱地址
try:
#发送邮件构造
smtp=()
t(\'\',25)#qq请求⽅式参数2为端⼝号
(\'精神病@\',\'p123ffsasasa1\')#参数1你⾃⼰的真实邮箱地址参数2为smtp的授权码,需要⾃⼰⽣成
il(sender,receiverMail,_string())#发送邮件
()
print\"发送邮件成功请耐⼼等候...........\"
ception:
print\"Error:⽆法发送邮件请检查代码\"
如何运⾏程序?在编译器右键run,或者控制台。代码展⽰效果如下图
展⽰效果.png
代码后续优化和改善
抛砖引⽟,功能可以继续往下写,获取天⽓的基础上可以套⽤免费或者收费的接⼝加⼊⼩笑话黄历等功能,通知上不⼀定要⽤邮箱的⽅式,可以
以短信微信(之前python是有个免费插件后来被和谐了)等⽅式发给你⼥朋友。如此关⼼你⼥朋友。她⼀感动是不是今天不⽤跪搓⾐板了
表情包.png
结尾
别问,问就是单⾝。好好⼯作,努⼒赚钱。爱情依靠相互喜欢相互吸引,勿做舔狗。加油吧打⼯⼈。