当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 23 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 天气预报DIY
帖子发表于 : 2008-11-05 12:04 

注册: 2008-02-25 11:21
帖子: 21
送出感谢: 0 次
接收感谢: 0 次
感谢 xiooli 的265网站代码,我又做了修改,现在的代码不再使用临时文件,而且可以自动获取自己城市的代码了(有误差,估计是用纯真ip库推算的)

[color=#FF0000天气网的WAP页面偶尔会出现问题,因此本帖的脚本有时失效,我在12楼补充了一个新脚本,适应更好一些。[/color]

Screenlets里面自带的天气预报插件不好用,很多城市都没有,于是自己动手做了一个简单的。

首先就是要启动output插件。这个插件的作用是定时的执行一个命令,并把结果显示出来。可以设置命令、显示的宽度和高度等,刚好适合DIY。

然后就是得准备一个能够显示天气的脚本了。代码如下
代码:
#!/bin/bash

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

# disable cwcolor
export NOCOLOR=1

get_weather()
{
    url="http://wap.weather.com.cn/wap/$1/h$2/"
    # wget -e "http_proxy=http://user:passwd@192.168.0.1:8080" -O $city.txt $url
    # Select useful part, Remove HTML tags, Cut verbose words
    LINES=`wget -q -O - $url| sed '1,/顶部LOGO区结束/d;/48小时天气预报/,1000d;' | sed 's/<[^>]*>//g;/<!--/d' \
    | sed 's/&nbsp;//g;s/&deg;C//g;s/^\s*//g;/^$/d' \
    | sed '11,$d;' \
    | sed 's/天气//g;s/气温//g;s/风向风力//g;s/://g;s/指数//g;s/ //g;'`
    # Format file content
    MES=`echo "$LINES"| sed -n '4p' | tr -d '\r\n'`,
    MES=$MES`echo "$LINES"| sed -n '5p' | tr -d '\r\n'`,
    MES=$MES`echo "$LINES"| sed -n '6p' | tr -d '\r\n'`,
    MES=$MES`echo "$LINES"| sed -n '7p' | tr -d '\r\n'`,
    MES=$MES`echo "$LINES"| sed -n '8p' | tr -d '\r\n'`
    echo "$MES"
}

get_my_city()
{
  CITY=`wget -q -O - http://www.265.com/lookupcity | sed "s/window.www265com.SetCity('//g;s/')//g;s/;//g"`
}

# 以下是自动获取自己城市的例子
get_my_city
date "+襄樊 %F %A"
echo -n "今天: "
get_weather $CITY 24
echo -n "明天: "
get_weather $CITY 48
echo -n "后天: "
get_weather $CITY 72

# 以下是指定城市代码的例子
CITY=59488
date "+珠海 %F %A"
get_weather $CITY 24
echo -n "明天: "
get_weather $CITY 48
echo -n "后天: "
get_weather $CITY 72


把代码保存为weather.sh,然后添加执行权限:
代码:
chmod a+x weather.sh


最后设定output插件,默认的命令是dmesg,改成weather.sh的完整路径名,再把刷新时间改大一些,比如一个小时(3600秒),调整一下宽高度,就可以了。

注意:
各位要根据自己的需要,把脚本里面的城市代换成自己的。如果不清楚自己的城市代码,可以去http://www.265.com看看。


附件:
文件注释: 天气插件显示效果
web2.png
web2.png [ 1.29 MiB | 被浏览 3635 次 ]



最后由 wenbob 编辑于 2008-11-09 18:20,总共编辑了 12 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: DIY一个自己的screenlets天气预报插件
帖子发表于 : 2008-11-05 12:16 

注册: 2008-11-05 12:15
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
不错,研究中~!
:em01


页首
 用户资料  
 
3 楼 
 文章标题 : Re: DIY一个自己的screenlets天气预报插件
帖子发表于 : 2008-11-05 12:22 

注册: 2008-11-05 12:19
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
:em38
很好 很强大
:em37
港谢谢 你很牛 很风骚


页首
 用户资料  
 
4 楼 
 文章标题 : Re: DIY一个自己的screenlets天气预报插件
帖子发表于 : 2008-11-05 12:57 

注册: 2008-06-21 14:56
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
还没diy出来,不过先顶一个。预言:本帖将会很火,预先占个座! :em04 :em04


页首
 用户资料  
 
5 楼 
 文章标题 : Re: DIY一个自己的screenlets天气预报插件
帖子发表于 : 2008-11-05 16:01 

注册: 2008-09-28 15:11
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
不错的说``支持一把``


页首
 用户资料  
 
6 楼 
 文章标题 : Re: DIY一个自己的screenlets天气预报插件
帖子发表于 : 2008-11-05 20:16 

注册: 2008-11-05 12:15
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
继续关注中~!
:em03


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-11-06 21:49 
头像

注册: 2006-04-19 10:48
帖子: 50
地址: 成都
送出感谢: 0 次
接收感谢: 0 次
很是不错的


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-11-06 23:06 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
代码:
#!/bin/bash
#Copyright (c) 2008 xiooli (xioooli[at]yahoo.com.cn)
#License: GPLv3
#version 20081106

#城市代码,留空可自动检测(自动检测不一定精确),城市代码可在 http://weather.265.com 上查询,是个5位的数字
#受bones7456及wenbob的天气脚本启发,并经修饰以适应conky的显示。
#加上参数-n输出城市名称
#wid=56294
[ -z ${wid} ] && \
if [ -f "/tmp/city" ] ;then
   wid="$(cat /tmp/city)"
else
   wget -q -O /tmp/weather.html 'http://www.265.com/lookupcity';
   wid=`awk -F "'" '{print $2}' /tmp/weather.html`;
    echo ${wid}>/tmp/city;
fi
get_weather() {
    wget -q -O /tmp/weather.html "http://wap.weather.com.cn/wap/${wid}/h24/";
    w3m -dump /tmp/weather.html |sed -n "5,9p"
}

if [ "$1" = "-n" ];then
    if [ -f /tmp/city_name ];then
        cat /tmp/city_name
    else
        w3m -dump /tmp/weather.html |sed -n "4p"|sed 's/\ .*$//'|tee /tmp/city_name
    fi
else
    get_weather
fi


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-11-07 20:57 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
貌似那个网站坏了,今天一下午我的conky上都没有天气预报,唉 :em19


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-11-07 22:15 
头像

注册: 2007-10-20 11:30
帖子: 1132
送出感谢: 1
接收感谢: 0 次
mark~~
up~~


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-11-07 22:41 
头像

注册: 2008-09-17 13:37
帖子: 344
系统: arch|centos
送出感谢: 0 次
接收感谢: 1
powers of scripts
mark it:em11


_________________
拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧
渣浪:@CodewalkerDotMe
推特:@codewalkertse
博客:http://codewalker.me/


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-11-08 4:59 

注册: 2008-02-25 11:21
帖子: 21
送出感谢: 0 次
接收感谢: 0 次
我又做根据现在的网页做了一个更全面的天气预报脚本,同样是不写临时文件,每次查天气会从两个网页中取数据,一个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插件不能支持复杂一点的脚本,可能与输出长度或者栈有关吧,原因待查。这个脚本用于显示更详细的预报信息。前面的脚本内容简短,更适合屏幕插件。结合命令行飞信程序,每天定时运行一次,就成了免费的短信提示了 :em09
代码:
#!/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/&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


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-12-08 8:32 

注册: 2008-11-30 14:52
帖子: 81
送出感谢: 0 次
接收感谢: 0 次
顶 !!! 很强。


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-12-08 12:59 

注册: 2008-10-09 0:20
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
很好很强大


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 天气预报DIY
帖子发表于 : 2008-12-09 8:57 
头像

注册: 2008-09-11 0:33
帖子: 309
地址: 中国地球
送出感谢: 0 次
接收感谢: 0 次
做个记号,~~~
很强大~~


_________________
我的记忆里只有未来没有过去


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 23 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译