一个爬取“今日哈工大”新闻的Shell Script

Mar 12, 2011

最近给网络中心那边做一个类似iMIT的iphone上的应用,作为一款C2C(很无耻的...)应用,我们将这款应用取名为iHIT,主要功能也是同步校内新闻,学校官方微博,校内地图等等信息。

新闻主要来自today.hit.edu.cn,由于是面向移动互联网的应用,服务器端的工作自然是少不了的,server端主要负责定期从today.hit.edu.cn上爬取新闻等。就从RSS中提取新闻分类到不同的文件下而言,由于不涉及到大量数据操作,所以我们没有采用数据库存储新闻、图片等信息,改用bash shell对文件操作的方式实现,xml的解析也都是用sed完成的。

主要工作机制就是定期下载,解析RSS文件,将新闻组成一个环形队列,循环更新新闻,然后给客户端提供最后更新的时间、头节点、尾节点的信息。客户端在得到这些信息之后每次只需依次下载头节点至尾节点的新闻即可。

定期从today.hit.edu.cn上爬取新闻。就从RSS中提取新闻分类到不同的文件下而言,由于不涉及到大量数据操作,所以没有采用数据库存储新闻、图片等信息,改用bash shell对文件操作的方式实现,xml的解析也都是用sed完成的。


使用说明:

  1. 首先运行init.sh 该脚本只需在初次运行脚本或者修改了新闻数目参数后运行一次即可:
  2. 修改loadRSS.sh中的新闻数目使其与init.sh中的新闻数目相同;
  3. 修改loadRSS.sh中的httpserver变量使其指向你运行脚本的服务器;
  4. 在crontab种添加如下配置:
     MAILTO=name@yourserver
        0 * * * * /usr/local/iHIT/loadRSS.sh 2>/tmp/maildata
        5 * * * * cat /var/www/iHIT/info >> /tmp/maildata
        6 * * * * mail -s "loadRSS.sh running station..." name@yourserver < /tmp/maildata
    

TIPS:

Crontab的配置使loadRSS.sh每隔一小时运行一次,同时将运行结果发送到name@yourserver中,将错误信息以“loadRSS.sh running station…”为主题发送到邮箱中。

crontab的自动邮件发送需要mailx的支持,如需要运行结果的推送,请安装mailx,并将mailx设置为internet模式

首先是初始化脚本,该脚本只需在初次运行脚本或者修改了新闻数目参数后运行一次即可:


在github上下载该脚本

Posted by admin project , Programming , bash , RSS parser

Comments

  1. 一直对技术人员保持尊敬啊

    Avatar

Get In Touch With Us ...