Chinaunix首页 | 论坛 | 博客
  • 博客访问: 81907
  • 博文数量: 31
  • 博客积分: 2048
  • 博客等级: 大尉
  • 技术积分: 353
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-24 22:28
文章分类

全部博文(31)

文章存档

2011年(1)

2009年(30)

分类: LINUX

2009-04-23 23:29:45

在实现 的天气预报功能时,google 偶然发现了这么一个有趣的工具:命令行下,从电脑发送短信到手机的飞信软件。这个程序是 写的。原文链接如下:
http://blog.solrex.cn/articles/diy-free-weather-forecast-sms.html

在 的这篇文章里,已经把原理讲得很明白了。我就不再赘述。

我用了他的 sendsms 程序(见附件,也可以去 solrex 的博客下载),不过自己写了抓天气的 Perl 脚本。代码如下:

#!/usr/bin/perl

use strict;
my %weather;
my @date = ("24", "48", "72");
my %user_list = (

    # 各个城市用户的手机号或飞信号,多个用户以逗号相隔(需事先加为飞信好友)
    "南京" => "159*,139*,158*,138*",
    "杭州" => "158*",
    "上海" => "137*,139*",
    "宁波" => "150*",
    "北京" => "134*",
);

my %code_of_city = (

    # http://wap.weather.com.cn 各城市代码

    "南京" => 58238,
    "杭州" => 58457,
    "上海" => 58367,
    "宁波" => 58563,
    "北京" => 54511,
);

foreach my $city (keys %user_list) {
    foreach my $date (@date) {
        my $result = "";
        my @info = `w3m -dump -no-cookie http://wap.weather.com.cn/wap/$code_of_city{$city}/h$date/`;

        if ($date eq "24") {
            $result = "${city}天气\n今天" . join('', @info[4,5,6]);
        } elsif ($date eq "48") {
            $result = "\n明天" . join('', @info[4,5,6,7,8]);
        } elsif ($date eq "72") {
            $result = "\n后天" . join('', @info[4,5,6]);
        }

        $result =~ s//°C/g;
        $result =~ s/°C到/-/g;
        $result =~ s/(今天|明天|后天)天气/$1/g;
        $weather{$city} .= $result;
    }
}

open LOG, ">>", "/home/sapiens/log/sendsms.log" or die "Can't write to sendsms.log: $!";
print LOG `date`;
close LOG;

foreach my $city (keys %user_list) {
    `sendsms -v -l -f 159* -p passwd -t $user_list{$city} "$weather{$city}"`;
#    print "To $user_list{$city} in $city:\n$weather{$city}\n";
    sleep 3;
}


此脚本获取的天气信息示例:

南京天气
今天:阵雨转多云
气温:20-12°C
风向风力:东南风4-5级转北风4-5级

明天:晴
气温:20-10°C
风向风力:北风4-5级转3-4级
紫外线指数:中等
穿衣指数:温凉

后天:晴转多云
气温:21-11°C
风向风力:北风3-4级转东风小于3级


先编译安装 sendsms ,然后把这个脚本扔到 crontab 里,就可以每天定时的给一群人发送天气预报啦!

$ crontab -l

0 19 * * * /home/sapiens/bin/weather.pl >> /home/sapiens/log/sendsms.log 2>&1




Edit: 发现用 crontab 定期执行的时候可能出现乱码,原因是 crontab 不读取用户的大部分环境变量。解决方法是在执行命令前加上 "LANG=zh_CN.UTF-8":

0 19 * * * LANG=zh_CN.UTF-8 /bin/weather.pl >> /log/sendsms.log 2>&1


附: sendsms 程序

文件:sendsms.tar.bz2
大小:739KB
下载:下载

阅读(3489) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-05-29 21:47:35

我在Ubuntu下试了一下。 $ apt-file search libcurl.a libcurl4-gnutls-dev: /usr/lib/libcurl.a 所以只要安装 libcurl4-gnutls-dev 这个软件包就行了。

chinaunix网友2009-05-23 01:19:10

/usr/bin/ld: cannot find -lcurl 缺少相关的库文件,-lcurl 选项意味着 ld 要搜索 libcurl.a 或 libcurl.so 文件,在 Arch 下这两个文件是由 curl 这个软件包提供的,所以建议您检查一下 curl 是否已经正确安装了。

chinaunix网友2009-05-23 00:57:40

下载以后,需要自己编译安装,执行: $ make install 后得到 sendsms,执行 $ ./sendsms -? 查看用法。 压缩包自带了一个编译好的二进制文件(sendsms),如果自己编译通不过,可以试试它自带的那个。

chinaunix网友2009-05-18 23:45:57

高手,编译出现这情况是啥意思? make g++ sendsms.o lib/libfetion_32.a -lcurl -pthread -o sendsms /usr/bin/ld: cannot find -lcurl collect2: ld returned 1 exit status make: *** [sendsms] Error 1

chinaunix网友2009-05-18 21:06:22

请问这个sendsms程序如何使用?下载下来,解压后并不可直接执行