Linux计划任务每天定时自动发送天气预报
前言:
本人闲来无事,无意间看到官方一篇python文章,也是实现定时发送邮件的功能;奈何学术不精(目前大二,只接触过一年的编程),始终无法实现功能,于是想着向本专业靠拢,说是shell能不能实现呢?于是动手试了一下,还真被我试出来了;功能的核心是Linux对json格式的处理;可能有人会说这个功能没多大用处;但其实是有很多应用场景的,看你们能不能想出来了;
完成这个功能你需要:
- 一台云服务器
- centos7
- 和风天气api
- 一个已经开启了smtp服务的邮箱账户
环境准备:
这里我使用的是一台阿里云的服务器,预装Centos7.2;首先要确保我们的服务器能够发送邮件我们要做两个准备:
1.开通邮箱的 smtp服务,这里我以QQ邮箱为例
将第一个服务开启后,然后下载授权码;保存到本地,待会儿会用到
2.Linux下安装mailx,一般来说系统都有预装
我们可以使用管道命令查询系统中是否有mailx
如果没有就直接yum安装
yum install -y mailx
然后我们来配置一下mailx
vim /etc/mail.rc
在配置文件的最后加上这几行
set from=xxxx@qq.com #这里是发送邮件的地址
set smtp=smtp.qq.com:587 #阿里云一定要带上这个端口号,其他云服务商不用
set smtp-auth-user= #这里是你的邮箱用户名
set smtp-auth-password= #这里填你刚刚保存的授权码
set smtp-auth=login #这一行不变
到这里你已经完成了基础配置,你的服务器已经能够进行一些简单的邮件发送功能了,我们可以使用mail命令测试一下:
echo ""|mail -v -s "测试" xxxxx@qq.com #-v是显示发送过程 -s是邮件主题
你会收到一封空白邮件
重点!
实现每天获取最新的天气状况,我们需要调用和风天气的api,shell命令行对api返回数据的处理是一个难点,也是一个重点,首先我们要注册成为和风的开发者,并获取api key;这里我不做多的介绍,大家可以看其官方的开发文档,已经很详细了;这边我直接演示在命令行的操作
我们首先可以看到他的免费版请求格式:
https://free-api.heweather.net/s6/weather/{
weather-type}?{
parameters}
{weather-type}这边我们选择的是forecast参数,返回的是3到十天的预报,Linux这边我们使用的是curl命令,我们可以把返回的数据存到一个txt文件中:
curl 'https://free-api.heweather.net/s6/weather/forecast?location=城市&key=你的key' &> weather.txt
城市填你想要获取的城市,key填你在开发者平台创建应用时获取的key
注意:请求的api一定要打引号,否则curl无法识别?后的内容
这时候已经我们已经把api返回数据写入了weather.txt这个文件中,我们可以cat查看一下:
是不是头皮发麻,这个时候我们就应该认真阅读和风的开发文档,读懂这些数值的含义,那么我们如何来处理这些数据呢?我们拿cond_txt_d这个参数来举例,官方文档给的描述是:白天天气状况描述,那么我们如何获取到当天的数据呢?
这里就要大家灵活运用管道以及sed命令了:
首先我们要让这些数值的排列看起来整齐一些,我们先
cat weather.txt | sed 's/,/\n/g'
我们将所有的逗号转化为换行符,得到如下输出:
接着我们通过grep找到我们的关键字段:
cat weather.txt |<