用wttr查阅天气
llin82
·
2026-04-29
·
via Debian中文论坛 - 最新帖子
查看天气的核心命令: curl “wttr.in/福州?n&lang=zh-cn” 输出福州最近三天的白天和晚上天气。(可换成你想要的城市) 问题:wttr网站连接较慢,需要时间,而且不一定能连上。 解决:后台运行脚本weather.sh,每半小时下载一次天气到日志文件,而且如果下载不成功则重复,最多重复3次。 问题:天气单词翻译不完全,有些是未翻译的英文。 解决:写perl程序transweather.pl,用正则表达式截取英文天气词组,译成中文。 问题:显示不够美观。 解决:用DispWeather输出日志文件(调用transweather.pl翻译天气),输出时修饰下。 天气显示脚本: --------weather.sh-------- #!/bin/bash # 通过wttr显示天气 #读取天气 #curl -s 禁止输出信息 #每半小时下载一次天气 ,结果写入到weather.log LogFile=~/LOG/weather.log while true; do WeRes=$(curl -s --max-time 3 “wttr.in/福州?n&lang=zh-cn”) #如果成功返回 ,则输出文本到日志文件供查看。查看时用less -R确保能正确处理ANSI彩色 if [ $? -eq 0 ]; then echo -e “\033[1;35m$(date)\033[0m” > $LogFile #将天气输入到日志文件 echo -e “$WeRes” >> $LogFile fi sleep 30m done ---------------- --------transweather.pl-------- #!/usr/bin/perl #将天气文件中的英文天气翻译为中文 use strict; use warnings; #将每段英文天气词组翻译为中文天气 ,并在后面添加合适数目的空格,使长度相等 sub repl { my ($old_text) = @_ _; my $text = $old_text; #翻译后置的nearby $text =~ s/^(.*) ne[a-z]*$/附近$1/; #定义替换字符串 my@old_subs@old_subs = (", ", “rain shower”, “clear”, “sunny”, "partly ", “cloudy”, "light ", “rain”, "patchy ", "moderate ", “drizzl@new_subs”); my @new_subs = (“转”, “阵雨”, “晴朗”, “晴”, “局部”, “多云”, “小”, “雨”, “零星小”, “中”, “毛毛雨”); # 替换并添加空格(认为全部替换成汉字,每个汉字长度为3,所以要/3*2,变成长度为2) for (my $i = 0; $i < @old_subs ; $i++) { $text =~ s/$old_subs[$i]/$new_subs[$i]/ig; } if ($text ne $old_text) { my $total_length_diff = length($old_text) - length($text)/3*2; # 在末尾添加足够的空格以达到原始长度(如果有必要的话) $text .= ’ ’ x ($total_length_diff > 0 ? $total_length_diff : 0); } return $text; } #从控制台读入收信信息 my $str=‘’; while(defined(my $line = )){ $str = $str . $line; } #unicode模式下将省略号替换为空格 ,以免匹配出错 $str =~ s/…/ /ug; #搜索天气词汇并替换 $str =~ s/[A-Z,][A-Za-z ]*[a-z]/repl($&)/ge; print $str; ---------------- --------DispWeather-------- #!/bin/bash #显示天气 LOGFILE=~/LOG/weather.log #显示翻译后的天气 head -n 2 $LOGFILE | sed “s/:: /:\x1b[1;32m/” #显示翻译后的天气 (去掉尾部) tail -n +3 $LOGFILE | head -n -3 | transweather.pl ---------------- 在xfce4的启动执行脚本中写入: #每半小时查看一次天气 nohup weather.sh &> /dev/null & 环境变量设置: # less默认行为:支持ANSI彩色,搜索忽略大小写 export LESS=“-i -R” 在面板中添加一项"查看天气",内容为: bash -ic ‘echo -ne “\033]0;天气\007” && DispWeather | less’ 最后输出(因为用了less,所以可以按Page Up和Page Down翻页): 2 个帖子 - 2 位参与者 阅读完整话题
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。