获取实时天气信息的Perl脚本
前段时间捣鼓Perl的时候,根据Yahoo!提供的天气状况API写了一个脚本,用来分析并获取实时天气状况的信息。现在这个脚本已经被我用在了FVWM桌面的天气状况显示上,另外,使用第三方的飞信API,还可以把信息发到手机上,呵呵,还是蛮实用的。
#!/usr/bin/perl
###################
#根据http://developer.yahoo.com/weather/提供的API写的获取天气信息的脚本
#作者:一介农夫
###################
use strict;
use Encode;
use LWP::Simple;
my $wid = "2161664"; #中山,各个具体的wid可以到http://weather.yahoo.com/去搜索
my $url = "http://weather.yahooapis.com/forecastrss?w=$wid&u=c";
my $data = get($url);
$data =~ s/<yweather\:forecast\s+(.*?)\>//g; #去掉后面重复的两行信息,暂时未知如何处理。
my $use_data = "";
my @temp_data = split /\n/, $data;
foreach my $temp_data (@temp_data) {
if ($temp_data =~ m/<yweather\:\w+\s+(.*?)\>/ig) {
$use_data .= " ".$1."\n";
}
}
my %info ="";
my %text = (
"0" => "龙卷风",
"1" => "热带风暴",
"2" => "飓风",
"3" => "雷暴",
"4" => "雷暴",
"5" => "雨夹雪",
"6" => "雨夹雪",
"7" => "雨夹雪",
"8" => "冻雨",
"9" => "冻雨",
"10" => "冻雨",
"11" => "阵雨",
"12" => "阵雨",
"13" => "小雪",
"14" => "阵雪",
"15" => "风吹雪",
"16" => "雪",
"17" => "冰雹",
"18" => "冻雨",
"19" => "沙尘",
"20" => "模糊",
"21" => "薄雾",
"22" => "污染",
"23" => "坏天气",
"24" => "有风",
"25" => "冷",
"26" => "阴天",
"27" => "多云",
"28" => "多云",
"29" => "少云",
"30" => "少云",
"31" => "晴",
"32" => "睛",
"33" => "睛",
"34" => "睛",
"35" => "雨夹冰雹",
"36" => "热",
"37" => "局部雷暴",
"38" => "分散雷雨",
"39" => "分散雷雨",
"40" =>"零星阵雨",
"41" => "大雪",
"42" => "零星阵雪",
"43" => "大雪",
"44" => "多云",
"45" => "雷阵雨",
"46" => "阵雨",
"47" => "雷阵雨",
"3200" => "未知",
);
my @condition = split /\"\s+/, $use_data;
foreach my $condition (@condition) {
if ($condition =~ m/^(\w+)\s*=\s*\"(.*?)\s*$/) {
$info{"$1"} = "$2";
}
}
my $message = decode ("utf8","中山天气状况:$text{$info{code}},温度:$info{temp}C,湿度:$info{humidity}%,能见度:$info{visibility}KM,气压:$info{pressure}MB,日出时间:$info{sunrise},日落时间$info{sunset}。$info{date}");
$message = encode("gb2312","$message"); #中文编码处理
my $send_url = "http://sms.api.bz/fetion.php?username=手机号码&password=飞信密码&sendto=要发送的手机&message=$message";
#print $message;
my $send = get($send_url);