用python定时给女友发天气预报并给自己弹窗提醒

280 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

2022.3.19补充

在执行bat文件时遇到报错 Image [2].png 但是这个python执行命令我放在pychaem的terminal里是能运行的。 然后查到可能是我windows的环境变量没设置对。 于是在系统环境变量中加上

E:\xxx\Anaconda3\envs\xxx;
E:\xxx\Anaconda3\envs\xxx\Scripts;
E:\xxx\Anaconda3\envs\xxx\Library\bin;

其中第一行是你所选择的python的目录路径,其他两行以此类推


以下是原文

思路

  • 注册天气数据接口
  • 接口调用方式在文档中可以查看。有两种验证方式,我们现在选择简单的一种:仅用私钥认证
  • 使用cn2an包将周期几翻译成中文数字
  • 弹窗用plyer包
  • 使用smtplib发邮件,具体做法可以参考之前的文章 python发邮件极简版
  • 关于定时功能,linux的话可以用crontab,window的话可以用系统自带的任务计划程序

注册天气接口

  1. 首先,访问 心知天气,进行登录或者注册操作,然后在控制台上创建一个免费版的项目,创建后,项目信息为:

重点是这个私钥,后面会用到

代码

# coding=utf-8

import requests
from plyer import notification
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import datetime
import cn2an


"""
plyer是用来显示弹窗的模块
安装命令:pip install plyer
"""


params = {
    "key": "xxx", #  这个填入私钥
    "location": "深圳",  # 查询地点设置为访问IP所在地
    "language": "zh-Hans",
    "unit": "c",
}


url = "https://api.seniverse.com/v3/weather/now.json"


# 获取数据
r = requests.get(url, params=params)


# 解析数据
data = r.json()["results"]


address = data[0]["location"]['path']  # 地点
temperature = data[0]['now']["temperature"]  # 温度
text = data[0]['now']["text"]  # 天气情况


# 日期
date = datetime.date.today().strftime("%Y-%m-%d")
# 星期几
weekday = datetime.date.today().weekday() + 1
# 用cn2an包将阿拉伯数字转为中文数字
weekday = cn2an.an2cn(weekday)


# 弹窗显示消息
message = f"日期:{date}{weekday}\n" + \
          address + " 当前天气:\n" + \
          "温度:" + temperature + "℃" + \
          "\n天气情况:" + text + \
          "\n爱你宝贝~(^o^)\n"


"""
标题为“当前天气”
显示10秒钟(timeout参数)
"""
notification.notify(title="当前天气",
                    message=message,
                    timeout=10)




def send_email(subject, email_content, toaddr='xxx@qq.com'):
    """
    发送邮件
    Parameters
    ----------
    subject: 邮件标题
    email_content: 邮件内容
    toaddr: 收件人邮箱,有多个收件人时可用分号分开
    Returns
    -------


    """
    # 发件人邮箱账号
    fromaddr = 'xxx@qq.com'
    # 发件人邮箱密码
    passwd = 'xxx'
    # SMTP服务器与端口,需要去邮箱内的设置里查看
    server = smtplib.SMTP_SSL('smtp.exmail.qq.com', port=465)
    server.login(fromaddr, passwd)
    message = MIMEText(email_content, 'plain', 'utf-8')
    # 模仿邮件内的发件人信息格式,防止被识别为垃圾邮件
    message['From'] = 'xxx<xxx@qq.com>'
    message['To'] = toaddr
    message['Subject'] = Header(subject, 'utf-8')
    receiver = message['To'].split(';')
    server.sendmail(fromaddr, receiver, message.as_string())
    server.quit()



send_email("2022-03-18天气", message)

参考 www.jb51.net/article/212…

定时执行

这里仅展示window的定时设置:

首先将刚才的脚本命名为demo.py,并在同级目录下新建一个文件,命名为 weather.bat,在其中输入

python执行器的路径 demo.py的路径

举个例子

E:\xxx\Anaconda3\envs\xxx\python D:\xxx\Weather\demo.py

保存 weather.bat后,

在桌面右键 计算机(我的电脑)-> 管理 -> 计算机管理 -> 系统工具 -> 任务计划程序 -> 创建基本任务 -> (填写任务名称和描述)下一步 -> 设置触发器(我自己选择登陆时执行)-> 启动程序 -> 填入程序路径 (我的就是D:\xxx\Weather\weather.bat)-> 完成

效果展示

Image1.png

Image2.png