linux下使用飞信机器人发送天气信息
2009-09-26 16:06:10 Administrator

飞信是中国移动推出的“综合通信服务”,即融合语音(IVR)、GPRS、短信等多种通信方式,覆盖三种不同形态(完全实时、准实时和非实时)的客户通信 需求,实现互联网和移动网间的无缝通信服务。飞信不但可以免费从PC给手机发短信,而且不受任何限制,能够随时随地与好友开始语聊,并享受超低语聊资费。 飞信实现无缝链接的多端信息接收,MP3、图片和普通OFFICE文件都能随时随地任意传输,让您随时随地都可与好友保持畅快有效的沟通,工作效率高,快 乐齐分享!

上面介绍飞信方面的一些知识,我们在来看一下天气预报方面:一般用户在手机上都是使用wap来浏览网页,看天气当然不会另外。 中国天气网(www.weather.com.cn)是中国气象局面向公众提供气象信息服务的核心门户,集成了中国气象局下属各业务部门最新更新的气象业 务服务产品和及时丰富的气象资讯。中国天气网由中国气象局公共气象服务中心主办,并进行具体的开发、运行和维护。由于其授权严格,请不要滥用其资源。手机 看天气的地址在:(http://wap.weather.com.cn/wap/),点击”国内天气”再输入相关城市即可以查看其相关天气信息了(当然 在电脑的浏览器也可以看到)。

那么我们可以在linux下面来安装飞信机器人每天凌晨来获取信息来发送到我们相关人员的手机上岂不更好?那好,我们来实现:
环境:
debian5.0 x64
fetion2009(原2008已经不在支持了)

一、fetion安装
关于更多linux下fetion的安装使用,请参考网站:http://www.it-adv.net/
1、基本环境搭建
#mkdir –p /usr/local/fetion
#mkdir –p /usr/local/fetion/lib
#cd /usr/local/fetion
下载fetion运行时所需要的库
#wget http://www.it-adv.net/fetion/downng/library_linux.tar.gz
下载fetion主程序
#wget http://www.it-adv.net/fetion/downng/fetion20090406003-linux.tar.gz
#tar -zxvf library_linux.tar.gz -C ./lib
#tar -zxvf fetion20090406003-linux.tar.gz
2、加入动态库
将fetion所需要的库添加到动态链接库
#vim /etc/ld.so.conf
增加一行
include /etc/ld.so.conf.d/*.conf

#vim /etc/ld.so.conf.d/fetionlib.conf
增加一行(fetion所需要库的目录)
/usr/local/fetion/lib

添加到动态链接库的缓存文件
#ldconfig -v
输出中会显示这些动态库的路径及相关文件。
3、安装相关开发库依赖
如果是64位系统需要安装32位类库,fetion2009的是基于32位系统编译的。
#apt-get install lib64stdc++6(lib32stdc++6)
#apt-get install lib64z1(lib32z1)
注:括号里是x86系统的的开发库。
4、简单测试
进入fetion的 instll目录,执行
#./fetion 
显示用法就说明安装成功了。

常用指令
手机号登陆直接发送短信内容(这里显示地声明了编码)
fetion --mobile=137xxxxxxxx --pwd=mypwd --to=137xxxxxxxx --msg-utf8=测试
手机号登陆直接发送短信内容文件
fetion --mobile=137xxxxxxxx --pwd=mypwd --to=137xxxxxxxx --file-utf8=/path/sms.txt
飞信号登陆
fetion --sid=6630321 --pwd=mypwd --to=137xxxxxxxx --msg-utf8=测试
配置文件登陆
fetion --config=sample.conf --index=1 --to=137xxxxxxxx --msg-utf8=测试

发送消息中如果需要换行,请用 \n 
// 以下为 sample.conf 内容,文件内容中, #号为注释行 
# This config file is for fetion robot tool.
# Usage demo: ./fetion --config=/etc/fetion.conf --index=1
# ID Mobile Password
1 137xxxx 1234234
多个号码可以用”,”分割。

至此,飞信安装调试成功完毕。

二、处理天气信息
我们在取得天气信息后,如何来处理它使之成为我们最相要的信息呢。不可能把整个页面的内容发过去吧,取得的html代码会产生不知多少条短信,极大的浪费了资源,而且收到的用户也会觉得烦,所以我们必须想办法来达到最好的效果。

我们先转储这个网页文件:
#wget -nv -O weather.html http://wap.weather.com.cn/wap/58367/h24/
这里取了上海24小时的天气预报信息,并转储为 weather.html文件。
好,接下来我们来分析其内容,使之刚好成为一条有用的短信:
#more weather.html|grep -v "img src"|html2text|sed '/^$/d'|sed -n '2,8p'|sed 's/':'/':'/p'|sed 's/^[ ]//g'|sed '/^\[/d'|uniq
当然也可以跟据需要来自己改动,”html2text”这个包可能要另外安装。最后得到了如下一些信息:
2009年6月22日 星期一
天气:中雨转阵雨
气温:32度到24度
风向风力:西南风3-4级转西风3-4级
紫外线指数:弱
穿衣指数:炎热


笔者测试过,刚好一条短信,不多不少,加上农历的话就要超过了。至此天气信息处理算是成功了。

三、整合
我是强烈建议写成一脚本来执行,而不是单纯的命令调用。这里是我写的一个脚本程序,工作的很好:
#!/bin/bash
mobilelist="1582176xxxx,1392176xxxx"
#注意,这里要用引号括起来,用逗号来分隔。
#取得天气信息
wget -nv -O weather.html http://wap.weather.com.cn/wap/58367/h24/
weather_msg=$(more weather.html|grep -v "img src"|html2text|sed '/^$/d'|sed -n '2,8p'|sed 's/':'/':'/p'|sed 's/^[ ]//g'|sed '/^\[/d'|uniq)
rm -fv weather.html

#循环发送
for phone in $mobilelist
do
/usr/local/fetion/install/fetion --mobile='1391603xxxx' --pwd='jaxxxx6' --to=$phone --msg-utf8="$weather_msg"
#echo $phone
done


保存为htsms.sh,加入cron。这样就可以在你上班出发前得到当天的天气情况了。