用树苺派播报天气
前言
上周一个早晨,在骑车上班路上,突然下起了大雨,我被淋成了落汤鸡,要是每天有语音播报当天的天气该多好。拉开抽屉,角落里躺着一个树苺派,在搜索框输入树苺派 语音天气,还真的有。
科大迅飞sdk
先确保树苺派正常连接音响播放声音,下载科大讯飞sdk, 我使用它免费的在线合成语音,稍微改了下sample程序,使它可以从某个文本读取内容并合成声音文件。
实现脚本
生成当前时间的文字
现在要解决的如何生成文本,下面的shell脚本生成了当前时间的文字。
shell脚本内容
#!/bin/bash num2cn=(零 一 二 三 四 五 六 七 八 九 十) hour=`date +%H` if [ $(( $hour/10 )) -ge 2 ];then echo -e ${num2cn[${hour}/10]}"${num2cn[10]}\c" elif [ $(( $hour/10 )) -eq 1 ];then echo -e ${num2cn[10]}"\c" fi if [ $(( $hour%10 )) -ne 0 ];then echo -e ${num2cn[${hour}%10]}"\c" fi echo -e "点 \c" min=`date +%M` if [ $(( $min/10 )) -ge 2 ];then echo -e ${num2cn[${min}/10]}"${num2cn[10]}\c" elif [ $(( $min/10 )) -eq 1 ];then echo -e ${num2cn[10]}"\c" fi if [ $(( $min%10 )) -ne 0 ];then echo -e ${num2cn[${min}%10]}"\c" fi echo -e "分,\c"
得到当天天气
获取天气json
免费的天气预报api ,用curl命令可以得到想要的天气信息,因为接口的调用有一些限制,所以我设置了时间间隔。下面代码以杭州为例子,得到的信息为json格式,存入本地文本weather.txt。
ret=`curl -o weather.txt -s -w %{http_code} http://www.sojson.com/open/api/weather/json.shtml?city=%E6%9D%AD%E5%B7%9E` if [ $ret -ne 200 ];then sleep 6 ret=`curl -o weather.txt -s -w %{http_code} http://www.sojson.com/open/api/weather/json.shtml?city=%E6%9D%AD%E5%B7%9E` fi
用jq取得需要的内容
得到了json信息,我们需要取出我们想要的信息,这里用到了jq命令 ,可以很方便的解析json格式的文本。下面的代码,取出当日的的天气提示信息并储存到变量notice中。
notice=`cat wether.txt | jq '.data.forecast[0]' | jq '.notice' | tr -d '"'` echo -e "$notice \c"
定时运行
脚本首先生成需要的天气预报文本信息,调用科大迅飞的接口生成语音文件,然后用linux系统的播放命令播放语音文件。通过以上内容,就可以完成这样一个脚本,最后在linux系统crontab设置定时运行,就大工告成了。
10 7 * * 1-5 /home/pi/demo/start.sh
结束
一开始觉得不太可能完成,慢慢搜索几次后,发现并不难,调用几个接口处理下就完成了,虽然觉得有些简单,但觉得还是记录下过程。