5.12 跟踪网站变更

对于Web开发人员和用户来说,能够跟踪网站变更不无益处。但定期手动检查既麻烦也不现实,因此,我们可以编写一个定期运行的变更跟踪器(change tracker)。一旦发生变更,跟踪器便会发出声音或发送提示信息。下面看一看如何编写一个基础的网站变更跟踪器。

5.12.1 预备知识

用Bash脚本跟踪网站变更意味着要在不同的时间检索网站,然后用diff命令进行比对。我们可以使用curldiff来实现这些步骤。

5.12.2 实战演练

结合各种命令来跟踪网页变更的Bash脚本如下:

  1. #!/bin/bash
  2. #文件名: change_track.sh
  3. #用途: 跟踪网页更新
  4. if [ $# -eq 2 ];
  5. then
  6. echo -e "$Usage $0 URL\n"
  7. exit -1;
  8. fi
  9. first_time=0
  10. # 非首次运行
  11. if [ ! -e "last.html" ];
  12. then
  13. first_time=1
  14. # 首次运行
  15. fi
  16. curl --silent $1 -o recent.html
  17. if [ $first_time -ne 1 ];
  18. then
  19. changes=$(diff -u last.html recent.html)
  20. if [ -n "$changes" ];
  21. then
  22. echo -e "Changes:\n"
  23. echo "$changes"
  24. else
  25. echo -e "\nWebsite has no changes"
  26. fi
  27. else
  28. echo "[First run] Archiving.."
  29. fi
  30. cp recent.html last.html

分别观察一下网页发生更新与没有更新时脚本track_changes.sh的输出。

  • 第一次运行
  1. $ ./track_changes.sh http://web.sarathlakshman.info/test.html
  2. [First run] Archiving..
  • 第二次运行
  1. $ ./track_changes.sh http://web.sarathlakshman.info/test.html
  2. Website has no changes
  • 在网页更新后,第三次运行
  1. $ ./test.sh http://web.sarathlakshman.info/test_change/test.html
  2. Changes:
  3.  
  4.  
  5. --- last.html 2010-08-01 07:29:15.000000000 +0200
  6. +++ recent.html 2010-08-01 07:29:43.000000000 +0200
  7. @@ -1,3 +1,4 @@
  8. <html>
  9. +added line :)
  10. <p>data</p>
  11. </html>

5.12.3 工作原理

脚本用 [ ! -e "last.html" ]; 检查脚本本身是否是首次运行。如果last.html不存在,那就意味着这是首次运行,因此要下载网页并将其复制为last.html。

如果不是第一次运行,那么脚本应该下载一个新的网页副本(recent.html),然后用diff检查差异。如果有变化,则打印出变更信息并将recent.html复制成last.html。

5.12.4 参考

5.4节讲解了curl命令。