美文网首页
Python入坑之哄女朋友开心小技巧

Python入坑之哄女朋友开心小技巧

作者: 北京朝阳区精神病院院长 | 来源:发表于2020-12-16 18:52 被阅读0次

前言

人生苦短,我用Python。这句话证明现在Python有多火。大约2年前我就开始接触了Python,因工作需求要自学Python ,后续的SDK打包脚本就是用Python编写的。对于Python的理解基本停留在会用阶段,深入的话就拉垮了。最近忙里偷闲,用之前自学过的知识点组合一下,搞一点有意思的事情。

你能学到的知识

  • Python中的JSON解析

  • Python中SMTP发送邮件

  • Python中字典的概念

文章中所用的编译器为Mac Pycharm 社区版,演示代码为Python 2.7版本

制定一个需求

获取中国天气网指定城市的天气,例如我在北京。然后获取北京天气数据等状态信息,通过邮件发送给女朋友,就这么简单。

环境配置

为了照顾一下新手同学,从零给大家演示下,环境的配置和安装。有python基础的可以忽略此块往下看。新手同学看过来啊、看过来!!!

本文演示的编译器为Mac Pycharm社区版,Python环境是mac上自带的不需要单独装(这也是我喜欢用mac原因很多环境都自带)。打开终端输出python直接能展示出python版本。我的版本为2.7.16。

python-v.png

倒叙说一下,如果之前没有安装过对应的库直接running我的小例子会直接报错,报错原因入下图所示,这个错误简单说就是没有找到requests这个库。在安装requests库 之前你的有一个包管理工具,用来管理第三方库的安装、卸载、更新,没错它就是pip.

error.png

1.pip简介和安装

pip是什么:首先要给它定义一下,pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。你可以通过以下命令来判断是否已安装:

pip --version     # Python2.x 版本命令

pip3 --version    # Python3.x 版本命令

当然了正常情况下, 你肯定是没安装过。那么我演示一下,mac里怎么安装配置的。mac里面python自带easy_install,在终端里面执行sudo easy_install pip

用sudo(超级管理员)命令的时候需要输入密码,这个密码是你自己电脑的密码,输入的时候采取了“安全措施”,你看不到自己输入的字符,完整的输入进去以后,回车就可以了。如果输出错误会有提示的,你重新输入即可。对应的命令展示看下图。完成后输入 pip -v 显示20.3.1说明安装是没问题的。

install pip.png

2.requests简介和安装

接着上面的继续说,pip包管理工具安装完成了,该进行下一步安装requests。那么什么是Requests : requests是python编写,基于urllib,采用Apache2 Licensed 开源协议Http库。它用起来比urllib更加方便,可以满足我们工作中很多有关于http的需求。

终端直接运行 pip install requests即可安装,这是python2.x的命令,如果你用的和我不是一个版本,用的python3.x的话需要更改下命令:pip3 install requests 。安装成功的标志能看到Successfully,如下图所示喽。

install requests.png

网络解析

根据上面的需求得知我们需要一个天气数据来填充邮件。中国天气网有一个免费天气Api地址:点击直达,通过城市名字获得天气数据,json数据格式,如下图所示,为了看着舒服格式化json数据。

json.png
{
    "data": {
        "yesterday": {
            "date": "15日星期二",
            "high": "高温 0℃",
            "fx": "北风",
            "low": "低温 -8℃",
            "fl": "<![CDATA[1级]]>",
            "type": "多云"
        },
        "city": "北京",
        "forecast": [{
            "date": "16日星期三",
            "high": "高温 2℃",
            "fengli": "<![CDATA[2级]]>",
            "low": "低温 -8℃",
            "fengxiang": "北风",
            "type": "晴"
        }, {
            "date": "17日星期四",
            "high": "高温 4℃",
            "fengli": "<![CDATA[2级]]>",
            "low": "低温 -6℃",
            "fengxiang": "北风",
            "type": "晴"
        }, {
            "date": "18日星期五",
            "high": "高温 1℃",
            "fengli": "<![CDATA[2级]]>",
            "low": "低温 -8℃",
            "fengxiang": "北风",
            "type": "晴"
        }, {
            "date": "19日星期六",
            "high": "高温 2℃",
            "fengli": "<![CDATA[1级]]>",
            "low": "低温 -7℃",
            "fengxiang": "北风",
            "type": "晴"
        }, {
            "date": "20日星期天",
            "high": "高温 5℃",
            "fengli": "<![CDATA[1级]]>",
            "low": "低温 -6℃",
            "fengxiang": "北风",
            "type": "晴"
        }],
        "ganmao": "感冒高发期,尽量避免外出,外出戴口罩防护。",
        "wendu": "1"
    },
    "status": 1000,
    "desc": "OK"
}

我们用 python 代码对这个url进行解析,我写一个小例子。如下图所示。是不是代码很少python就四行搞定。而java进行一次get请求,少说都要写一两百行代码,创建流,发请求,解析数据,关闭流等等。当然了我也不是说java不好,每个语言的诞生总是有它应用的场景。

image.png

邮件相关的配置

接着上面说数据有了,得发邮件呀。Python中SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

Python创建 SMTP 对象语法如下:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

参数说明:

  • host: SMTP 服务器主机,这是一个可选参数。

  • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。

  • local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。

Python SMTP 对象使用 sendmail 方法发送邮件,语法如下

SMTP.sendmail(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服务打开前两项。

setting.png

开启前两项后,会出现下图所示,点击生成授权码。生成完授权码一定要保存好不要外泄涉及到安全问题不可忽视。代码中授权码我用字符串“p123ffsasasa1”代替。为了正常跑通流程需要换成你的邮箱还有授权码,不然发不了邮件。

code.png

完整的代码

该说该注意的都已经说了,直接上代码,注释基本都加上了。不难理解,代码需要注意对齐和空格问题。

代码中用到字典,字典是另一种可变容器模型,且可存储任意类型对象。字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的。

sendEmail.py

#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import requests, json,smtplib
from email.mime.text import MIMEText
from email.header import Header

'''
# 获取城市天气 
#参数1 传城市信息 
#参数2 传url链接
#例如今日天气 :   '+response['data']['forecast'][0]['type'] ,这个获取forecast字段下type字段文字
'''
def getCityWhether(city,linkUrl):
    url = linkUrl+ city   #拼接字符串   实际url就是  http://wthrcdn.etouch.cn/weather_mini?city=北京
    response = requests.get(url).json()  #把返回的数据解析成json
    msg = '\r\n今日天气 :   '+response['data']['forecast'][0]['type'] + '\r\n温度  :'+response['data']['forecast'][0]['high'] + '     --      '+response['data']['forecast'][0]['low'] + '\r\n风力:'+response['data']['forecast'][0]['fengli'][9:-3] +'      --   '+response['data']['forecast'][0]['fengxiang']+'\r\n注意事项  :  '+response['data']['ganmao']+'\r\n'
    return str(msg)


# python 字典类型转换为json对象
dataSource = {
    'linkUrl':'http://wthrcdn.etouch.cn/weather_mini?city=',
    'city':'北京',      #你所在的城市,假如你在上海,可以写上海
    'title':'帅气的男朋友上线喽!\r\n',
    'end':'\r\n                                                    ———python测试呦~~~~~~~'
}

# 构造邮件的文本数据
msg = dataSource['title'] +getCityWhether(dataSource['city'],dataSource['linkUrl'])+dataSource['end']

message=MIMEText(msg,'plain','utf-8')
message['From']=Header('北京朝阳区精神病院长 <北京朝阳区精神病院长@qq.com>','utf-8')         #邮件展示发件人信息
message['To']=Header('小仙女  <小仙女@qq.com>','utf-8')                                #邮件展示收件人信息
message['Subject']=Header("小仙女专属邮件,请点击查收!",'utf-8')                      #接收邮件主题内容

sender='精神病@qq.com'               #真实的邮箱地址,一定要填你自己的邮箱
receiverMail='院长@qq.com'           #真实的收件邮箱,你要发邮件的邮箱地址
try:
    # 发送邮件构造
    smtp = smtplib.SMTP()
    smtp.connect('smtp.qq.com',25)  #qq请求方式  参数2 为端口号
    smtp.login('精神病@qq.com', 'p123ffsasasa1')  #参数1 你自己的真实邮箱地址 参数2 为 smtp的授权码,需要自己生成
    smtp.sendmail(sender, receiverMail, message.as_string())  #发送邮件
    smtp.quit()
    print "发送邮件成功请耐心等候..........."
except smtplib.SMTPException:
    print "Error:无法发送邮件请检查代码"

如何运行程序? 在编译器右键run,或者 控制台 python sendEmail.py。代码展示效果如下图

展示效果.png

代码后续优化和改善

抛砖引玉,功能可以继续往下写,获取天气的基础上可以套用免费或者收费的接口加入小笑话 黄历 等功能,通知上不一定要用邮箱的方式,可以以短信 微信(之前python是有个免费插件后来被和谐了)等方式发给你女朋友。如此关心你女朋友。她一感动是不是今天不用跪搓衣板了

表情包.png

结尾

别问,问就是单身 。好好工作,努力赚钱。爱情依靠相互喜欢相互吸引,勿做舔狗。加油吧打工人

image.png

相关文章

  • Python入坑之哄女朋友开心小技巧

    前言 人生苦短,我用Python。这句话证明现在Python有多火。大约2年前我就开始接触了Python,因工作需...

  • 朱栈

    朱栈,世之奇所,入则闻糜香,出则通阴阳。–题记 放暑假的时候,小文为了哄女朋友小翠开心,便带着她来到了自己的家乡游...

  • Python 小入坑

    python入坑学习的是python3 一些信息 官网 https://www.python.org/官方文档 h...

  • 6个哄自己开心的小技巧

    此时的你开心吗?Get到6个哄自己开心的小技巧,任何时候,都能哄自己开心。 1、留出时间,多晒晒太阳。 我们的情绪...

  • python入坑ing

    python入坑ing

  • 怎么哄女朋友开心?

    怎么哄女朋友开心? 有时候发现女朋友莫名其妙就生气了,但是都还不知道自己做错了什么。可是哄她呢,又怕自己嘴笨,越哄...

  • 如何哄女朋友开心

    首先声明,对于两性情感我也是“小白”,这里只是把自己亲身经历进行分享(对象指导下的反思),也许对你有启发作用。如果...

  • 向笑来老师学习

    哈哈,这个小技巧是在笑来老师书里学到的,一个人不可能同时既高兴又生气。 哄女朋友的最好办法就是逗她开心,一旦从...

  • Python_by_4plus_Week0(1)

    Python爬虫之Week0 再次入坑 小白又来给自己挖坑了。上次是Python 2期,这次是爬虫,没错,还是Py...

  • 论如何哄女朋友开心

    我有个女朋友,名字叫C。 我和C在一起有两年多的时间,在这两年多的时间里,我和C相处得很好,几乎没有发生过什么大的...

网友评论

      本文标题:Python入坑之哄女朋友开心小技巧

      本文链接:https://www.haomeiwen.com/subject/pjuygktx.html