当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 31 篇帖子 ]  前往页数 1, 2, 3  下一页
作者 内容
1 楼 
 文章标题 : 天气墙纸脚本:wallther [已死,2012-8-4]
帖子发表于 : 2009-05-11 23:02 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
详情请见 http://joolix.com/2009/05/weather-wallpaper-wallther/

点此下载 (包含脚本及图标和壁纸素材)

看LinuxToy时发现了一个天气墙纸的程序http://linuxtoy.org/archives/weather-wallpaper.html,貌似依赖不少的Gnome组件,很不方便,于是就萌生了用bash脚本写一个相同功能的脚本的想法,经过几个小时的奋战终于搞定了,呵呵,主要是convert等处理图片的软件用得不熟。
这个东东可以自动去获取天气信息(你甚至都不用管城市代码,当然可能有些地方会不准),然后根据获得的天气找到对应的图标,然后将图标和天气情况的文字(是否绘制文字信息可选)合成到背景图片中去,然后将这个合成的图片设置为壁纸。
初次使用需要配置一些东西,主要就是字体,因为我用的雅黑你可能没有。
这里有一张生成的图片大家可以感受一下:
附件:
wallpaper.png
wallpaper.png [ 349.58 KiB | 被浏览 2859 次 ]


代码如下:
代码:
#!/bin/bash
#Copyright (c) 2009 xiooli (xioooli[at]yahoo.com.cn, http://joolix.com)
#Name wallther
#License: GPLv3
#Version 20090511

#此脚本需要安装 w3m 和 imagemagick
#城市代码,留空可自动检测(自动检测不一定精确)
#城市代码可在 http://weather.265.com 上查询,是个5位的数字
#受bones7456和wenbob的天气脚本启发。

#这儿是城市代码,须自己改,未赋值会自动查询。
Wid=101280101
#天气图标的位置
pwd="`dirname $0`"
if [ "$pwd" = "." ]; then pwd="`pwd`"; fi
Icondir="$pwd/icons"
#欲用作背景的图片
BackPic="$Icondir/background.jpg"
#最终输出的图片位置
OutPic="/dev/shm/wallpapertmp.png"
#壁纸路径(此为 OutPic 的副本)
Wallpaper="/dev/shm/wallpaper.png"
#是否在图片上绘制文字天气信息,yes/no
DrawText="yes"
#文字的字体,若不是中文字体则中文可能无法正常显示
#Font="/usr/share/fonts/winfonts/msyh.ttf"
Font="/home/leros/.fonts/sthei.ttf"
#文字的大小
FontSize=24
#文字的颜色
TxtColor="white"
#文字信息绘制的位置
TxtPosX=700
TxtPosY=350
#隔多大距离绘制下一行(此距离包括本行的宽度)
TxtYIncr=35
#天气图标绘制的位置
PicGeometry="+650+80"
#壁纸更换的时间间隔(默认 30 分钟)
ChangeTime="30m"

WeatherCN=("晴" "多云" "阴" "雨" "雷阵雨" "雾" "雪" "雨夹雪")
WeatherEN=("sun" "suncloud" "cloud" "rain" "storm" "fog" "snow" "snowrain")

GET_WEATHER() {
   [ -z "${Wid}" ] &&
   if [ -f "/dev/shm/city" ] ;then
      Wid="$(cat /dev/shm/city)"
   else
      Wid="`wget -q -O - 'http://www.265.com/lookupcity'|awk -F "'" '{print $2}'`"
      echo ${Wid}>/dev/shm/city
   fi
   [ ! -z "${Wid}" ] && WeatherTxt="`w3m -dump "http://wap.weather.com.cn/wap/${Wid}/h24.shtml"`"
   
}

GEN_DRAW_TEXT() {
   [ -z "${WeatherTxt}" ] && GET_WEATHER
   if [ -z "${WeatherTxt}" ]; then
      echo "未能获取天气 :("
   else
      echo "${WeatherTxt}"|sed -n "5p"|sed 's/ .*$//'
      echo "${WeatherTxt}"|sed -n "6,10p"
   fi \
   |sed "s/^.*$/-draw \'text POSITION \"&\"\'/" \
   |while read line; do
      echo "$line"|sed "s/POSITION/$TxtPosX,$TxtPosY/"
      ((TxtPosY+=$TxtYIncr))
   done|tr "n" " "
}

GEN_WEATHER_ICON() {
   local tmp weathercn index
   [ -z "${WeatherTxt}" ] && GET_WEATHER
   [ -z "${WeatherTxt}" ] || tmp="`echo "${WeatherTxt}"|sed -n "6p"`"
   j=0; k=0
   for i in ${WeatherCN[@]}; do
      [ "${tmp//$i}" != "$tmp" ] && weathercn[$j]="$i" && index[$j]="$k" && ((j++))
      ((k++))
   done
   [ "${#weathercn[@]}" -eq 0 ] && Weather[0]="unknown"
   [ "${#weathercn[@]}" -eq 1 ] && Weather[0]="${WeatherEN[${index[0]}]}"
   [ "${#weathercn[@]}" -eq 2 ] &&
   if [ "`echo $tmp|grep "${weathercn[0]}转"`" ];then
      Weather[0]="${WeatherEN[${index[0]}]}"
      Weather[1]="${WeatherEN[${index[1]}]}"
   else
      Weather[0]="${WeatherEN[${index[1]}]}"
      Weather[1]="${WeatherEN[${index[0]}]}"
   fi
   [ "${#weathercn[@]}" -eq 3 ] &&
   {
      Weather[0]="${WeatherEN[${index[0]}]}"
      Weather[1]="${WeatherEN[${index[2]}]}"
   }
   if [ "${#Weather[@]}" -ge 2 ]; then
      convert +append "$Icondir/${Weather[0]}.png" "$Icondir/${Weather[1]}.png" /dev/shm/weathericon.png
   else
      ln -sf "$Icondir/${Weather[0]}.png" /dev/shm/weathericon.png
   fi
}

GEN_WALLPAPWE() {
   GEN_WEATHER_ICON
   [ -f $BackPic ] || BackPic="$Icondir/background.jpg"
   if [ "$DrawText" = "yes" ]; then
      draw="convert -font \"$Font\" -fill $TxtColor -pointsize $FontSize `GEN_DRAW_TEXT` \"$BackPic\" \"/dev/shm/backpictmp.png\""
      eval $draw
      composite -geometry "$PicGeometry" /dev/shm/weathericon.png /dev/shm/backpictmp.png "$OutPic"
   else
      composite -geometry "$PicGeometry" /dev/shm/weathericon.png "$BackPic" "$OutPic"   
   fi
}

while :; do
   GET_WEATHER
   [ "${WeatherTxt}" != "$tmp" ] && GEN_WALLPAPWE && tmp="${WeatherTxt}"
   if [ -f "$OutPic" ];then
      mv "$OutPic" "$Wallpaper"
      gconftool-2 -s /desktop/gnome/background/picture_filename --type=string "$Wallpaper"
   fi
   sleep "$ChangeTime"
done


附件:
wallther.tar.gz [521.21 KiB]
被下载 158 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-11 23:05 
头像

注册: 2008-02-17 23:47
帖子: 22106
地址: 美丽富饶的那啥星球
送出感谢: 11
接收感谢: 81
杀花!
LZ吃了吧?
你的脚本太棒了,那个scrot截图爽死了,你还有啥更H的脚本我瞅瞅?
谢谢喔……
:em01


_________________
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-11 23:16 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
支持个~


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-11 23:18 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
我很郁闷,俺用kde,写了这个脚本自己却不能用。。。 :em19


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-11 23:25 
头像

注册: 2008-04-26 12:41
帖子: 10971
送出感谢: 11
接收感谢: 38
先顶后用 :em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-11 23:30 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
adagio 写道:
杀花!
LZ吃了吧?
你的脚本太棒了,那个scrot截图爽死了,你还有啥更H的脚本我瞅瞅?
谢谢喔……
:em01

汗,我又不是卖摇头丸的,你爽个啥。。更爽的脚本去找阿姨要 :em06


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-11 23:34 
头像

注册: 2007-05-06 2:46
帖子: 15634
送出感谢: 0 次
接收感谢: 2
xiooli 写道:
我很郁闷,俺用kde,写了这个脚本自己却不能用。。。 :em19


知识和品味没关系撒

:em04


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 8:54 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
hcym 写道:
xiooli 写道:
我很郁闷,俺用kde,写了这个脚本自己却不能用。。。 :em19


知识和品味没关系撒

:em04

恩恩,看来得添加一个kde也能用的代码了。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 9:02 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
居然是复合图片,还这么长。下次写脚本前,先遵循下意见哦。
:em04


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 9:09 
头像

注册: 2008-09-07 14:21
帖子: 441
地址: 长沙
送出感谢: 0 次
接收感谢: 0 次
不错,回去试试


_________________
    8e3817551427c5412c735f5821b6e231f59b336112239bf8f5cb3f383eaa55d7


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 9:10 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
eexpress 写道:
居然是复合图片,还这么长。下次写脚本前,先遵循下意见哦。
:em04

阿姨可有何好建议?


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 9:21 
头像

注册: 2008-05-11 11:10
帖子: 1078
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
photor 写道:
先顶后用 :em09


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 9:37 
头像

注册: 2007-07-11 21:43
帖子: 3382
地址: 东江边
系统: archlinux
送出感谢: 15
接收感谢: 7
guiwen1158 写道:
photor 写道:
先顶后用 :em09


_________________
我来了,我看见了,我征服了!
求勾搭,不管饭。


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-12 10:22 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
这样的事情,应该写一个最简单的窗口,只带一个Image 一个Label(反正都支持pango语法)。贴到桌面。而不是复合图片。和notify的结构差不多。用perl或者C。或者抄iDesk的源码,很小的一段。相当于作一个通用的桌面显示工具
C/C++的,你可以找斗篷男作。
perl的,类似这样的,很简单。改改就是。

代码:
#my $image = Gtk2::Image->new_from_stock('gtk-dialog-authentication', 'dialog');
my $image = Gtk2::Image->new_from_file('/home/exp/媒体/d.png');
$image->show;
#$hbox->pack_start($image, FALSE, FALSE, 0);
$hbox->pack_start_defaults($image);

my $label = Gtk2::Label->new;
#$label->set_markup( "正在下载 <span size=\"large\" color=\"red\" weight=\"bold\">". $ARGV[0]. "</span>" );
$label->set_markup( $ARGV[0] );
$label->show;
#$hbox->pack_start($label, TRUE, TRUE, 0);
$hbox->pack_start_defaults($label);


_________________
● 鸣学


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 天气墙纸脚本:wallther
帖子发表于 : 2009-05-24 2:25 

注册: 2009-05-18 6:47
帖子: 11
送出感谢: 0 次
接收感谢: 0 次
不错,很 好 很强大,研究下思路


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

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Google [Bot] 和 1 位游客


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

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

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