使用 sendemail 发送天气信息
看树莓派的书,发现可以使用 sendemail 发送天气信息,闲来无事,折腾一波
获取天气数据
在这里可以使用和风天气开发者 ,注册并获取 key
进入开发文档,可以使用获取常规天气数据的接口(免费版)
https://free-api.heweather.net/s6/weather/{weather-type}?{parameters}
{weather-type}
代表不同的天气数据类型,必选。使用以下值:
weather-type 值 | 描述 |
---|---|
now | 实况天气 |
forecast | 3-10天预报 |
hourly | 逐小时预报 |
lifestyle | 生活指数 |
{parameters}
代表请求参数,包括必选和可选参数。所有请求参数使用 & 进行分隔,参数值存在中文或特殊字符的情况,需要对参数进行 url encode
parameters 值 | 描述 | 描述 |
---|---|---|
location | 需要查询的城市或地区(经纬度 / 城市名 [拼音、汉字] /IP 等) | 必选 |
lang | 多语言,可以不使用该参数,默认为简体中文 | 选填 |
unit | 单位选择,公制(m)或英制(i),默认为公制单位 | 选填 |
key | 用户认证key | 必填 |
具体请自行查看和风天气API
API 返回的数据是 json 字符串,需要对数据进行解析,这里可以安装jq
工具
> sudo apt-get install jq -y
以下是获取天气数据的代码
#!/bin/bash
# Weather Data
CITY=hefei
TOKEN=和风KEY
WEATHER=$(curl "https://free-api.heweather.net/s6/weather/lifestyle?location=${CITY}&key=${TOKEN}")
SUGGESTIONS=$(echo ${WEATHER} | jq -r '.HeWeather6[0].lifestyle| values[].txt')
echo ${SUGGESTIONS}
安装 sendemail
可以直接使用apt-get
安装sendemail
,并很有可能需要安装一些依赖
> sudo apt-get install sendemail -y
> sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl -y
发送email
#!/bin/bash
#Email Send Test
SERVER="smtp.sina.com:22"
FROM=""
TO=""
SUBJECT="test"
MESSAGE="test_content"
CHARSET="utf-8"
USERNAME=""
PASSWORD=""
sendemail \
-f ${FROM} \
-t ${TO} \
-u ${SUBJECT} \
-s ${SERVER} \
-m ${MESSAGE} \
-xu ${USERNAME} \
-xp ${PASSWORD} \
-v -o message-charset=${CHARSET}
各参数对应的内容如下:
-f: 表示发送者的邮箱
-t: 表示接收者的邮箱
-s: 表示SMTP的服务器的域名或者IP,也可以加端口号 域名:port
-u: 表示邮件主题
-m: 表示的内容
-xu: 表示SMTP验证的用户名(也就是登录邮箱的用户名)
-xp: 表示SMTP验证的密码(也就是登录邮箱的密码)
-cc: 表示抄送
-bcc: 表示暗抄送
-a: 后加文件名,会以附件的形式发送
-o message-charset=utf8 邮件内容的编码
-o message-content-type=html 邮件内容的格式
-o message-file=a.txt 把文件内容以邮件正文发出
整理如下:
#!/bin/bash
# Weather Data
CITY=hefei
TOKEN=和风KEY
WEATHER=$(curl "https://free-api.heweather.net/s6/weather/lifestyle?location=${CITY}&key=${TOKEN}")
SUGGESTIONS=$(echo ${WEATHER} | jq -r '.HeWeather6[0].lifestyle| values[].txt')
echo ${SUGGESTIONS}
#Email Send
SERVER="smtp.sina.com:22"
FROM=""
TO=""
SUBJECT="天气预报来啦"
MESSAGE=${SUGGESTIONS}
CHARSET="utf-8"
USERNAME=""
PASSWORD=""
sendemail \
-f ${FROM} \
-t ${TO} \
-u ${SUBJECT} \
-s ${SERVER} \
-m ${MESSAGE} \
-xu ${USERNAME} \
-xp ${PASSWORD} \
-v -o message-charset=${CHARSET}