公布两个天气预报的脚本(2)

sh/bash/dash/ksh/zsh等Shell脚本
回复
wenbob
帖子: 21
注册时间: 2008-02-25 11:21

公布两个天气预报的脚本(2)

#1

帖子 wenbob » 2008-11-10 16:53

第二个,详细版本的。效果如下:

代码: 全选

$ ./weatherx.sh 
襄樊 2008-11-10 星期一 天气实况: 14.2℃,北风小于3级(2.4m/s),湿度:62%
晾晒适宜,晨练不宜,感冒较易发,中暑无,交通良好,路况干燥,旅游适宜,划船适宜
感觉舒适,洗车适宜,紫外线弱,钓鱼适宜,空调较少开启,运动较不宜,穿衣舒适,化妆保湿
10日星期一: 多云转晴,17度到8度,西南风小于3级转东南风小于3级
11日星期二: 晴转多云,18度到9度,东南风小于3级
12日星期三: 多云转阴,17度到10度,东南风小于3级
代码如下

代码: 全选

#!/bin/bash

#Copyright (c) 2008 wenbob (wenbob[at]gmail.com)
#License: GPLv3
#version 20081109

# 地区名及其地区代码,可在 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/&nbsp;//g;s/&deg;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/&nbsp;//g;s/&deg;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/&nbsp;//g;s/&deg;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
头像
zhyond
帖子: 70
注册时间: 2008-09-30 13:05

Re: 公布两个天气预报的脚本(2)

#2

帖子 zhyond » 2008-11-10 17:00

挺有意思滴
:em01
我以为白了就没有人看得到了,没有用的!象我这样出色的签名,无论在什么地方,都像漆黑中的萤火虫一样,那样的鲜明,那样的出众。
头像
xyy_xx
帖子: 344
注册时间: 2008-09-17 13:37
系统: arch|centos

Re: 公布两个天气预报的脚本(2)

#3

帖子 xyy_xx » 2008-11-10 17:08

看样子应该有图片的吧
拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧
渣浪:@CodewalkerDotMe
推特:@codewalkertse
博客:http://codewalker.me/
头像
fengjie
帖子: 130
注册时间: 2008-03-19 14:20

Re: 公布两个天气预报的脚本(2)

#4

帖子 fengjie » 2008-11-10 21:21

图片呢?楼主可不可以打包传上来啊
主板:ASUS P8Z77-V
CPU:Intel 酷睿i3 3200
内存:ADTA DDRⅢ 1600 8G
显卡:Intel® HD Graphic
声卡:Realtek ALC 892
有线网卡:Intel® 82579V
无线网卡:Qualcomm Atheros AR9485
硬盘:WDC WD6401AALS
电源:长城ATX-350SD静音大师
显示器:Samsung S24A350H
bszhjy
帖子: 12
注册时间: 2007-12-14 18:27

Re: 公布两个天气预报的脚本(2)

#5

帖子 bszhjy » 2008-11-10 21:43

line 32: [: too many arguments
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 公布两个天气预报的脚本(2)

#6

帖子 xiooli » 2008-11-10 22:09

好吧,我把我conky里面的天气预报也共献出来。再加上一个天气预报语音播报脚本:viewtopic.php?f=21&t=153526

代码: 全选

#!/bin/bash
#Copyright (c) 2008 xiooli (xioooli[at]yahoo.com.cn) 
#License: GPLv3
#version 20081106

#此脚本需要安装w3m,debian系linux可以通过命令安装:sudo apt-get install w3m
#城市代码,留空可自动检测(自动检测不一定精确),城市代码可在 http://weather.265.com 上查询,是个5位的数字
#受bones7456和wenbob的天气脚本启发,并经修饰以适应conky的显示。
#加上参数-n输出城市名称
wid=56294 #这儿是城市代码,须自己改,未赋值会自动查询。

[ -z "${wid}" ] && \
if [ -f "/tmp/city" ] ;then
	wid="$(cat /tmp/city)"
else
    wid="`wget -q -O - 'http://www.265.com/lookupcity'|awk -F "'" '{print $2}'`"
    echo ${wid}>/tmp/city;
fi

[ ! -z "${wid}" ] && weather_txt="`w3m -dump "http://wap.weather.com.cn/wap/${wid}/h24/"`"

[ -z "${weather_txt}" ] && echo "      未能获取天气 :(" && exit

if [ "$1" = "-n" ];then
    echo "${weather_txt}"|sed -n "4p"|sed 's/\ .*$//'
else
    echo "${weather_txt}"|sed -n "5,9p"|sed "s/^/      /"
fi
回复