巧用谷歌Reader订阅最新春运信息
又快到了一年一次的人类大迁移啦,怎样掌握最新的票务信息时当前每一个想回家的人最想做的事情,之前跟我同住的同事用自己的电脑wGet监控回家的飞机票信息,如果有打折机票就使用飞信接口自动发送到自己的手机上~
快到放寒假的时候,有些学生没有订票或者要自己去车站买票,可是不知道什么时候开始发售20天车票,今天我突发奇想,想用php抓取某一火车站的公告(以福州火车站为例)自动生成Rss,可以使用谷歌Reader订阅,甚至可以使用飞信的PHP接口发送最新的消息到自己的手机,这是一个思想,以后要有什么事情可以巧用谷歌Reader啦~(*^__^*) 嘻嘻……~挺聪明的方法~自己夸一夸~
言归正传,下面开始用php来写一个抓取火车站公告,并且自动生成RSS的php程序。
原理分析
使用cURL(cURL用法详解请查阅文章《cURL常用的几个PHP函数》)请求网页,使用PHP的正则匹配来匹配出想要的最新公告链接地址,以及公告信息的文章名称。然后使用一个PHP类RSS.class.php(详细用法以及下载地址,请查阅文章《PHP生成RSS类:RSS.class.php》)生成Rss文件。
使用google Reader订阅这个php地址就可以啦。
抓取以及正则匹配部分代码
首先感谢公司的同事吴昊,帮我写的正则匹配代码,本人这方面很菜的哦~O(∩_∩)O哈哈~
请求的地址为福州火车站的公告信息,地址为:http://www.fzhcz.com/noticelist.asp
代码如下:
<?php $search_url='http://www.fzhcz.com/noticelist.asp'; $ch=curl_init(); curl_setopt($ch, CURLOPT_URL,$search_url) ; curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//设置返回值 $returnPage=curl_exec($ch); curl_close($ch); //<li><span>[2009年12月16日]</span><a href="notice.asp?id=114">关于12月20日起增开五趟动车组列车的通知</a> </li> //开始正则匹配,原网址采用GB2312编码,进行UTF-8转码 if($j = preg_match_all('/<li><span>\[([^\]]*)\]<\/span><a\shref=\"([^\"]*?)\">([^<]*)<\/a>[^<]*<\/li>/is',iconv('gb2312','utf-8',$returnPage),$matchResult,PREG_SET_ORDER)) for($i=0;$i<$j;$i++) { //显示匹配结果,文章名称、链接地址 echo $matchResult[$i][1].'-->'.$matchResult[$i][2].'-->'.$matchResult[$i][3]."\n"; } ?>
这样就显示出文章的地址以及文章的名称。
使用PHP生成Rss订阅文件
此处采用PHP类:RSS.class.php来轻松的完成RSS订阅功能,代码如下:
<?php include_once("class/RSS.class.php"); $RSS= new RSS("福州车站最新公告","http://www.fzhcz.com/noticelist.asp","订阅福州火车站最新公告,程序由2Fool.cn提供,地址:http://js8.in"); if($j = preg_match_all('/<li><span>\[([^\]]*)\]<\/span><a\shref=\"([^\"]*?)\">([^<]*)<\/a>[^<]*<\/li>/is',iconv('gb2312','utf-8',$returnPage),$matchResult,PREG_SET_ORDER)) for($i=0;$i<$j;$i++) { $name=$matchResult[$i][3]; $url=$matchResult[$i][2]; $desc=$matchResult[$i][1]."最新消息:".$matchResult[$i][3]; $RSS->AddItem($name,$url,$desc,$matchResult[$i][1]); // echo $matchResult[$i][1].'-->'.$matchResult[$i][2].'-->'.$matchResult[$i][3]."\n"; } $RSS->Display(); ?>
这样子就可以实现了Rss订阅功能啦~最终代码为:
<?php $search_url='http://www.fzhcz.com/noticelist.asp'; $ch=curl_init(); curl_setopt($ch, CURLOPT_URL,$search_url) ; curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//设置返回值 $returnPage=curl_exec($ch); curl_close($ch); include_once("class/RSS.class.php"); $RSS= new RSS("福州车站最新公告","http://www.fzhcz.com/noticelist.asp","订阅福州火车站最新公告,程序由2Fool.cn提供,地址:http://js8.in"); if($j = preg_match_all('/<li><span>\[([^\]]*)\]<\/span><a\shref=\"([^\"]*?)\">([^<]*)<\/a>[^<]*<\/li>/is',iconv('gb2312','utf-8',$returnPage),$matchResult,PREG_SET_ORDER)) for($i=0;$i<$j;$i++) { $name=$matchResult[$i][3]; $url=$matchResult[$i][2]; $desc=$matchResult[$i][1]."最新消息:".$matchResult[$i][3]; $RSS->AddItem($name,$url,$desc,$matchResult[$i][1]); // echo $matchResult[$i][1].'-->'.$matchResult[$i][2].'-->'.$matchResult[$i][3]."\n"; } $RSS->Display(); ?>
PHP文件测试地址为:http://love.2fool.cn/fuzhouchezhan.php
Google Reader订阅
打开Google Reader:http://www.google.com/reader,点击“添加订阅”,输入自己编写的PHP网址就可以啦。如:http://love.2fool.cn/fuzhouchezhan.php,点击添加就可以啦~
当然你也可以使用其他的订阅器,并且可以发送到自己的邮箱去。
PS:本方法主要是提出一种解决问题的方法~希望可以启发大家开发出更有趣的工具,想出更好地方法

