由于google天气预报总是月末让我手机访问某个网址,让没有开手机上网的我很不爽,于是找到linuxtoy上的飞信天气预报来尝试了一下
做了一些改进
方案:
使用Solrex的命令行飞信工具作为最终发送工具
使用linuxtoy上 fangvv的方法抓取天气
参考数据与代码分离的思想,设计一个文本用来存放数据,使得增加群发对象和城市的时候不用修改代码
第一版文本格式:
[user]
13*********
[pass]
passwd
[city]
54161 长春
[to]
FetionId_1 自己
FetionId_2 nick
…..
[city]
59493 深圳
[to]
FetionId_1 nick
这个数据结构看起来很清晰,但是写起代码来判断比较多,最终awk脚本大概50多行代码。扫了一下unix编程艺术之后,参考.netrc做了如下改进:
第二版文本格式:
user 13*********
pass passwd
city 54161 长春
to FetionId_1 nick
to FetionId_2 nick
…..
send Yes
city 59493 深圳
to FetionId_1 nick
…..
send Yes
使用这个格式进行编码,awk脚本用了30行多点,代码如下
#!/usr/bin/awk -f
BEGIN{
SmsPath = “/home/conan/bin/weather/”
}
#支持注释
{
if (substr($1,1,1) == “#”)
next
}
#跳过空行
NF < 2{ next }
#设置用户名密码等信息
$1 != “to”{
Data[$1] = $2
}
#格式化群发列表
$1 == “to”{
if (Data["to"] == 0 )
Data["to"] = $2
else
Data["to"] = Data["to"] “,” $2
}
#获取天气并发送
Data["send"] == “Yes”{
Data["send"] = “No”
system(“wget -qnv -O ” Data["city"] ” http://wap.weather.com.cn/wap/” Data["city"] “/h24/”)
system(“sed -i -n ’15,31p’ ” Data["city"])
system(“sed -i ‘s/<[^<]*>//g’ ” Data["city"])
system(“sed -i /^$/d ” Data["city"])
#下面一行可以加上你要的内容
system(“sed -i ’1 i\**气象台为你预报’ ” Data["city"])
system(“sed -i ‘:a;N;s/\\n/ /g;ta’ ” Data["city"])
print (SmsPath “sendsms -vl -f ” Data["user"] ” -p ” Data["pass"] ” -t ” Data["to"] ” \”`cat ” Data["city"] “`\”")
system (“sleep 1″)
system (SmsPath “sendsms -vl -f ” Data["user"] ” -p ” Data["pass"] ” -t ” Data["to"] ” \”`cat ” Data["city"] “`\”")
print “——————–”
delete Data["to"]
delete Data["city"]
}
这版个人评价:不如上一版清晰明了,但是在人可以接收的情况下比较有利于编码。
由于google天气预报总是月末让我手机访问某个网址,让没有开手机上网的我很不爽,于是找到linuxtoy上的飞信天气预报来尝试了一下
做了一些改进
方案:
使用Solrex的命令行飞信工具作为最终发送工具
使用linuxtoy上 fangvv的方法抓取天气
参考数据与代码分离的思想,设计一个文本用来存放数据,使得增加群发对象和城市的时候不用修改代码
第一版文本格式:
[user]
13*********
[pass]
passwd
[city]
54161 长春
[to]
FetionId_1 自己
FetionId_2 nick
…..
[city]
59493 深圳
[to]
FetionId_1 nick
这个数据结构看起来很清晰,但是写起代码来判断比较多,最终awk脚本大概50多行代码。扫了一下unix编程艺术之后,参考.netrc做了如下改进:
第二版文本格式:
user 13*********
pass passwd
city 54161 长春
to FetionId_1 nick
to FetionId_2 nick
…..
send Yes
city 59493 深圳
to FetionId_1 nick
…..
send Yes
使用这个格式进行编码,awk脚本用了30行多点,代码如下
#!/usr/bin/awk -f
BEGIN{
SmsPath = “/home/conan/bin/weather/”
}
#支持注释
{
if (substr($1,1,1) == “#”)
next
}
#跳过空行
NF < 2{ next }
#设置用户名密码等信息
$1 != “to”{
Data[$1] = $2
}
#格式化群发列表
$1 == “to”{
if (Data["to"] == 0 )
Data["to"] = $2
else
Data["to"] = Data["to"] “,” $2
}
#获取天气并发送
Data["send"] == “Yes”{
Data["send"] = “No”
system(“wget -qnv -O ” Data["city"] ” http://wap.weather.com.cn/wap/” Data["city"] “/h24/”)
system(“sed -i -n ’15,31p’ ” Data["city"])
system(“sed -i ‘s/<[^<]*>//g’ ” Data["city"])
system(“sed -i /^$/d ” Data["city"])
#下面一行可以加上你要的内容
system(“sed -i ’1 i\**气象台为你预报’ ” Data["city"])
system(“sed -i ‘:a;N;s/\\n/ /g;ta’ ” Data["city"])
print (SmsPath “sendsms -vl -f ” Data["user"] ” -p ” Data["pass"] ” -t ” Data["to"] ” \”`cat ” Data["city"] “`\”")
system (“sleep 1″)
system (SmsPath “sendsms -vl -f ” Data["user"] ” -p ” Data["pass"] ” -t ” Data["to"] ” \”`cat ” Data["city"] “`\”")
print “——————–”
delete Data["to"]
delete Data["city"]
}
这版个人评价:不如上一版清晰明了,但是在人可以接收的情况下比较有利于编码。