开源电子谱册尝试 开源电子谱册尝试
首页
  • 独奏曲
  • 重奏曲
  • Blues
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 核心配置和约定
  • 自动生成front matter
  • Markdown 容器
  • Markdown 中使用组件
  • 相关文章

    • 使目录栏支持h2~h6标题
    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
    • 在线编辑和新增文章的方法
  • 配置

    • 主题配置
    • 首页配置
    • front matter配置
    • 目录页配置
    • 添加摘要
    • 修改主题颜色和样式
    • 评论栏
  • 学习笔记草稿
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • 独奏曲
  • 重奏曲
  • Blues
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 核心配置和约定
  • 自动生成front matter
  • Markdown 容器
  • Markdown 中使用组件
  • 相关文章

    • 使目录栏支持h2~h6标题
    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
    • 在线编辑和新增文章的方法
  • 配置

    • 主题配置
    • 首页配置
    • front matter配置
    • 目录页配置
    • 添加摘要
    • 修改主题颜色和样式
    • 评论栏
  • 学习笔记草稿
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python装饰器
  • 好好学习天天向上
  • Python图片处理模块Pillow
  • 拓扑排序
  • C++学习笔记
  • python学习笔记
  • 天气查询邮件提醒
    • study
    星一
    2022-11-09
    目录

    天气查询邮件提醒

    # 天气查询邮件提醒

    # 软件界面ui

    # ui设计

    用的是PyQt5,先用Qt Designer设计界面,拖动组件改属性即可,注意objectName一定要改,保持良好的习惯。

    image-20210530172731604

    # 主程序调用ui:

    将ui文件转化成py文件Ui_weatherQuery.py,在这个文件里绑定事件,然后在主程序里面调用界面就可。

    # ui事件绑定业务函数:

    在Ui_weatherQuery.py文件里,

    self.queryBtn.clicked.connect(Dialog.queryWeather)
    self.clearBtn.clicked.connect(Dialog.clearText)
    self.pushButton.clicked.connect(Dialog.sendEmail)
    
    # 主程序里与ui的交互
    class MainDialog(QDialog):
        def __init__(self, parent=None):
            super(QDialog, self).__init__(parent)
            self.ui = Ui_weatherQuery.Ui_Dialog()
            self.ui.setupUi(self)
    
        def queryWeather(self):
            city_name = self.ui.txtCityName.text()
            self.res = query_weather(city_name=city_name)
            self.ui.txtQueryRes.setText(self.res)
    
        def clearText(self):
            self.ui.txtQueryRes.clear()
            self.ui.txtCityName.clear()
    
        def sendEmail(self):
            email_send.go(msg=self.res, subject_msg='天气预报')
            pass
    
    # 显示界面模板框架
    from PyQt5.QtWidgets import QApplication, QDial, QDialog
    
    if __name__ == '__main__':
        myApp = QApplication(sys.argv)
        myDlg = MainDialog()
        myDlg.show()
    
        sys.exit(myApp.exec_())
    

    # 天气查询部分

    # 调用api

    api有免费的,申请就完事了。

    用request包发送请求,返回的json解析一下就可。

    def query_weather(city_name="武汉", record=True):
        appid = "29467327"
        appsecret = "27kJLhNF"
        # 请求地址&信息
        url = u"https://www.tianqiapi.com/free/week?appid={}&appsecret={}&city={}".format(
            appid, appsecret, city_name)
        # 发送请求得到返回结果
        r = requests.get(url)
        # 格式化显示json
        res = json.dumps(r.json(), indent=4, ensure_ascii=False)
        if record:
            with open("res.txt", 'w')as f:
                f.write(res)
        return res
    

    部分结果展示

    {
        "cityid": "101200101",
        "city": "武汉",
        "update_time": "2021-05-30 15:55:18",
        "data": [
            {
                "date": "2021-05-30",
                "wea": "晴转多云",
                "wea_img": "yun",
                "tem_day": "30",
                "tem_night": "20",
                "win": "南风",
                "win_speed": "<3级"
            },
            ......
        ]
    }
    

    # 邮件发送部分

    # smtp(simple mail transfer protocol)是python自带的邮件模块,负责邮件传输
    # email负责邮件内容
    import smtplib
    
    from email.header import Header
    from email.mime.text import MIMEText
    from email.utils import parseaddr, formataddr
    
    # stmp_server={'163':'smtp.163.com','qq':'stmp.qq.com'}
    # port_list={'163':25,'qq':465}
    class email_send:
        '''
        description:封装了构造邮件及发送邮件的操作
        param {*}
        return {*}
        '''
    
        def __init__(self, from_addr, password, to_addr, server="smtp.qq.com", port=465) -> None:
            self.from_addr = from_addr
            self.password = password
            self.to_addr = to_addr
            self.server = server
            self.port = port
    
        def server_start(self):
            self.server = smtplib.SMTP_SSL(host=self.server, port=self.port)
            print(self.server)
    
        def server_quit(self):
            self.server.quit()
    
        def _format_addr(self, addr_msg):
            name, addr = parseaddr(addr_msg)
            return formataddr((Header(name, 'utf-8').encode(), addr))
    
        def send_text_data(self, text, data_type, subject_msg):
            msg = MIMEText(_text=text, _subtype='plain', _charset='utf-8')
            msg['From'] = self._format_addr(self.from_addr)
            msg['To'] = self._format_addr(self.to_addr)
            msg['Subject'] = Header(s=subject_msg, charset='utf-8')
            self.server.login(self.from_addr, self.password)
            self.server.sendmail(self.from_addr, self.to_addr, msg.as_string())
    
    
    def go(msg='新的邮件代码测试', subject_msg='A new test'):
        # 账号信息
        sender = "141*****@qq.com"		# 发件人
        password = "*******"			# 在QQ邮箱里可打开SMTP服务的密码,非邮箱登录密码
        receivers = ["13******@qq.com"]	# 收件人
        # 邮件文本内容
        try:
            es = email_send(sender, password, receivers)
            es.server_start()
            es.send_text_data(msg, 'plain', subject_msg)
            es.server_quit()
            print('success')
        except:
            print('error')
    
    
    if __name__ == "__main__":
        go()
    
    上次更新: 2022/11/24, 22:50:32
    python学习笔记

    ← python学习笔记

    Theme by Vdoing | Copyright © 2022-2022 XingYi | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式