我又做根据现在的网页做了一个更全面的天气预报脚本,同样是不写临时文件,每次查天气会从两个网页中取数据,一个html的,一个json的,速度还比较快。因为天气网不停的改,可能过几天得调整一下。
输出效果如下
代码: 全选
$ ./weatherx.sh
襄樊 2008-11-09 星期日目前天气: 14.3℃,东北风4级(5.8m/s),湿度:69%
晾晒适宜,晨练不宜,感冒较易发,中暑无,交通良好,路况干燥,旅游适宜,划船适宜
感觉舒适,洗车适宜,紫外线中等,钓鱼适宜,空调较少开启,运动较不宜,穿衣温凉,化妆保湿
9日星期日: 晴,17度到7度,微风
10日星期一: 晴,17度到8度,西南风小于3级转东南风小于3级
11日星期二: 多云,18度到8度,东南风小于3级
似乎screenlets的output插件不能支持复杂一点的脚本,可能与输出长度或者栈有关吧,原因待查。这个脚本用于显示更详细的预报信息。前面的脚本内容简短,更适合屏幕插件。结合命令行飞信程序,每天定时运行一次,就成了免费的短信提示了
代码: 全选
#!/bin/bash
#Copyright (c) 2008 wenbob (wenbob[at]gmail.com)
#License: GPLv3
#version 20081110
# 地区名及其地区代码,可在 http://www.weather.com.cn 查询,从地址栏找到自己所在地区代码
CITY=襄樊
CODE=101200201
# disable cwcolor
export NOCOLOR=1
get_current_data()
{
# Now
url="http://www.weather.com.cn/data/sk/$CODE.html"
# wget -e "http_proxy=http://user:passwd@192.168.0.1:8080" -O - $url
LINES=`wget -q -O - $url | tr ',"{}:' ' '`
# Format file content
TEMP=`echo "$LINES" | awk '1{print $7}'`℃
WIND=`echo "$LINES" | awk '1{print $9$11 }'`"("`echo "$LINES" | awk '1{print $20}'`"m/s)"
SD=`echo "$LINES" | awk '1{print $13}'`
NOW="$TEMP,$WIND,湿度:$SD"
echo "$NOW"
}
get_fut_data()
{
THREEDAYS=`echo "$LINES" | sed '1,/fut_weather/d;/scene_weather/,1000d'`
if [ -z $THREEDAYS ]
then
THREEDAYS=`echo "$LINES" | sed '/c_1_2/,1000d'`
fi
THREEDAYS=`echo "$THREEDAYS" | sed 's/<br/\n</g;\
s/\/d00.gif/>白天晴</g;\
s/\/d01.gif/>白天多云</g;\
s/\/d02.gif/>白天阴天</g;\
s/\/d03.gif/>白天多云有零星小雨</g;\
s/\/d04.gif/>白天雷雨</g;\
s/\/d05.gif/>白天雷阵雨</g;\
s/\/d06.gif/>白天小雨夹雪</g;\
s/\/d07.gif/>白天零星小雨</g;\
s/\/d08.gif/>白天小雨</g;\
s/\/d09.gif/>白天中雨</g;\
s/\/d10.gif/>白天大雨</g;\
s/\/d11.gif/>白天暴雨</g;\
s/\/d12.gif/>白天特大暴雨</g;\
s/\/d13.gif/>白天多云转小雪</g;\
s/\/d14.gif/>白天小雪</g;\
s/\/d15.gif/>白天中雪</g;\
s/\/d16.gif/>白天大雪</g;\
s/\/d17.gif/>白天暴雪</g;\
s/\/d18.gif/>白天雾</g;\
s/\/d19.gif/>白天冰雹</g;\
s/\/d20.gif/>白天沙尘暴</g;\
s/\/d21.gif/>白天小雨</g;\
s/\/d22.gif/>白天中雨</g;\
s/\/d23.gif/>白天大雨</g;\
s/\/d24.gif/>白天暴雨</g;\
s/\/d25.gif/>白天特大暴雨</g;\
s/\/d26.gif/>白天中雪</g;\
s/\/d27.gif/>白天大雪</g;\
s/\/d28.gif/>白天暴雪</g;\
s/\/d29.gif/>白天浮尘</g;\
s/\/d30.gif/>白天扬沙</g;\
s/\/d31.gif/>白天强沙尘暴</g;\
s/\/n00.gif/>,夜晚晴</g;\
s/\/n01.gif/>,夜晚多云</g;\
s/\/n02.gif/>,夜晚阴天</g;\
s/\/n03.gif/>,夜晚多云有零星小雨</g;\
s/\/n04.gif/>,夜晚雷雨</g;\
s/\/n05.gif/>,夜晚雷阵雨</g;\
s/\/n06.gif/>,夜晚小雨夹雪</g;\
s/\/n07.gif/>,夜晚零星小雨</g;\
s/\/n08.gif/>,夜晚小雨</g;\
s/\/n09.gif/>,夜晚中雨</g;\
s/\/n10.gif/>,夜晚大雨</g;\
s/\/n11.gif/>,夜晚暴雨</g;\
s/\/n12.gif/>,夜晚特大暴雨</g;\
s/\/n13.gif/>,夜晚多云转小雪</g;\
s/\/n14.gif/>,夜晚小雪</g;\
s/\/n15.gif/>,夜晚中雪</g;\
s/\/n16.gif/>,夜晚大雪</g;\
s/\/n17.gif/>,夜晚暴雪</g;\
s/\/n18.gif/>,夜晚雾</g;\
s/\/n19.gif/>,夜晚冰雹</g;\
s/\/n20.gif/>,夜晚沙尘暴</g;\
s/\/n21.gif/>,夜晚小雨</g;\
s/\/n22.gif/>,夜晚中雨</g;\
s/\/n23.gif/>,夜晚大雨</g;\
s/\/n24.gif/>,夜晚暴雨</g;\
s/\/n25.gif/>,夜晚特大暴雨</g;\
s/\/n26.gif/>,夜晚中雪</g;\
s/\/n27.gif/>,夜晚大雪</g;\
s/\/n28.gif/>,夜晚暴雪</g;\
s/\/n29.gif/>,夜晚浮尘</g;\
s/\/n30.gif/>,夜晚扬沙</g;\
s/\/n31.gif/>,夜晚强沙尘暴</g;\
'`
THREEDAYS=`echo "$THREEDAYS" | sed 's/<[^>]*>//g;/<!--/d' | sed 's/ //g;s/°C//g;s/^\s*//g;/^$/d;s/高温//g;s/低温//g;s/℃/度/g;s/://g'`
DAY1="`echo "$THREEDAYS"| sed -n '1p' | tr -d '\r\n'`: \
`echo "$THREEDAYS"| sed -n '3p' | tr -d '\r\n'`,\
`echo "$THREEDAYS"| sed -n '4p' | tr -d '\r\n'`到\
`echo "$THREEDAYS"| sed -n '5p' | tr -d '\r\n'`,\
`echo "$THREEDAYS"| sed -n '6p' | tr -d '\r\n'`"
DAY2="`echo "$THREEDAYS"| sed -n '7p' | tr -d '\r\n'`: \
`echo "$THREEDAYS"| sed -n '9p' | tr -d '\r\n'`,\
`echo "$THREEDAYS"| sed -n '10p' | tr -d '\r\n'`到\
`echo "$THREEDAYS"| sed -n '11p' | tr -d '\r\n'`,\
`echo "$THREEDAYS"| sed -n '12p' | tr -d '\r\n'`"
DAY3="`echo "$THREEDAYS"| sed -n '13p' | tr -d '\r\n'`: \
`echo "$THREEDAYS"| sed -n '15p' | tr -d '\r\n'`,\
`echo "$THREEDAYS"| sed -n '16p' | tr -d '\r\n'`到\
`echo "$THREEDAYS"| sed -n '17p' | tr -d '\r\n'`,\
`echo "$THREEDAYS"| sed -n '18p' | tr -d '\r\n'`"
unset THREEDAYS
echo "$DAY1"
echo "$DAY2"
echo "$DAY3"
}
get_today()
{
TODAY=`echo "$LINES" | sed '1,/c_1_2/d;/box_hist/,1000d;s/<br/\n</g'`
TODAY=`echo "$TODAY" | sed 's/<[^>]*>//g;/<!--/d' | sed 's/ //g;s/°C//g;s/^\s*//g;/^$/d;s/指数://g;s/://g'`
TODAY="`echo "$TODAY"| sed -n '1p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '3p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '5p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '7p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '9p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '11p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '13p' | tr -d '\r\n'`,\
`echo "$TODAY"| sed -n '15p' | tr -d '\r\n'`"
echo "$TODAY"
unset TODAY
LIFE=`echo "$LINES" | sed '1,/box_lifeboxin/d;/right_content/,1000d;s/<br/\n</g'`
LIFE=`echo "$LIFE" | sed 's/<[^>]*>//g;/<!--/d' | sed 's/ //g;s/°C//g;s/^\s*//g;/^$/d;s/指数://g;s/舒适度/感觉/g;s/紫外线强度/紫外线/g;s/空调开启/空调/g;s/>//g;s/://g'`
LIFE="`echo "$LIFE"| sed -n '1p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '3p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '5p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '7p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '9p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '11p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '13p' | tr -d '\r\n'`,\
`echo "$LIFE"| sed -n '15p' | tr -d '\r\n'`"
echo "$LIFE"
unset LIFE
}
get_weather()
{
get_current_data
url="http://www.weather.com.cn/html/weather/$1.shtml"
LINES=`wget -q -O - $url | sed '1,/c_1_1/d;/right_content/,1000d'`
get_today
get_fut_data
unset LINES
}
date "+$CITY %F %A 天气实况: " | tr -d "\n"
get_weather $CODE
# 还可在这里加上其他城市的天气预报,如
# echo 珠海
# get_weather 101280701