5.12 跟踪网站变更
对于Web开发人员和用户来说,能够跟踪网站变更不无益处。但定期手动检查既麻烦也不现实,因此,我们可以编写一个定期运行的变更跟踪器(change tracker)。一旦发生变更,跟踪器便会发出声音或发送提示信息。下面看一看如何编写一个基础的网站变更跟踪器。
5.12.1 预备知识
用Bash脚本跟踪网站变更意味着要在不同的时间检索网站,然后用diff
命令进行比对。我们可以使用curl
和diff
来实现这些步骤。
5.12.2 实战演练
结合各种命令来跟踪网页变更的Bash脚本如下:
#!/bin/bash
#文件名: change_track.sh
#用途: 跟踪网页更新
if [ $# -eq 2 ];
then
echo -e "$Usage $0 URL\n"
exit -1;
fi
first_time=0
# 非首次运行
if [ ! -e "last.html" ];
then
first_time=1
# 首次运行
fi
curl --silent $1 -o recent.html
if [ $first_time -ne 1 ];
then
changes=$(diff -u last.html recent.html)
if [ -n "$changes" ];
then
echo -e "Changes:\n"
echo "$changes"
else
echo -e "\nWebsite has no changes"
fi
else
echo "[First run] Archiving.."
fi
cp recent.html last.html
分别观察一下网页发生更新与没有更新时脚本track_changes.sh的输出。
- 第一次运行
- $ ./track_changes.sh http://web.sarathlakshman.info/test.html
- [First run] Archiving..
- 第二次运行
- $ ./track_changes.sh http://web.sarathlakshman.info/test.html
- Website has no changes
- 在网页更新后,第三次运行
- $ ./test.sh http://web.sarathlakshman.info/test_change/test.html
- Changes:
- --- last.html 2010-08-01 07:29:15.000000000 +0200
- +++ recent.html 2010-08-01 07:29:43.000000000 +0200
- @@ -1,3 +1,4 @@
- <html>
- +added line :)
- <p>data</p>
- </html>
5.12.3 工作原理
脚本用 [ ! -e "last.html" ];
检查脚本本身是否是首次运行。如果last.html不存在,那就意味着这是首次运行,因此要下载网页并将其复制为last.html。
如果不是第一次运行,那么脚本应该下载一个新的网页副本(recent.html),然后用diff
检查差异。如果有变化,则打印出变更信息并将recent.html复制成last.html。
5.12.4 参考
5.4节讲解了curl
命令。