README:一个能向指定邮箱推送所关心新闻内容的插件,测试环境:LAMP+Chrome/Firefox,分下面几个步骤实现:
1.获取目标网站源代码:
实现方法:PHP的curl类
ubuntu下的安装方法:
#sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
然户重启Apache服务:
#sudo /etc/init.d/apache2 restart
[代码]php代码:
1function GetHtmlCode($url){
2$ch = curl_init();//初始化一个cur对象
3curl_setopt ($ch, CURLOPT_URL,$url);//设置需要抓取的网页
4curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//设置crul参数,要求结果保存到字符串中还是输出到屏幕上
5curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,1000);//设置链接延迟
6$HtmlCode = curl_exec($ch);//运行curl,请求网页
7return $HtmlCode;
8}function GetHtmlCode($url){
$ch = curl_init();//初始化一个cur对象
curl_setopt ($ch, CURLOPT_URL, $url);//设置需要抓取的网页
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//设置crul参数,要求结果保存到字符串中还是输出到屏幕上
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,1000);//设置链接延迟
$HtmlCode = curl_exec($ch);//运行curl,请求网页
return $HtmlCode;
}
2.用正则表达式截取出源代码中的所有链接:
//参数说明:$string=GetHtmlCode($url)
[代码]php代码:
01function GetAllLink($string) {
02$string =str_replace("r","",$string);
03$string =str_replace("n","",$string);
04$regex[url] ="((http|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;@=_~%?/.,+-]+)";
05$regex[email] ="([a-z0-9_-]+)@([a-z0-9_-]+.[a-z0-9-._-]+)";
06
07
08//去掉网页中的[]
09$string =eregi_replace("[|]","",$string);
10
11//去掉JAVASCRIPT代码
12$string =eregi_replace("","",$string);
13
14//去掉非的HTML标签
15$string =eregi_replace("?[^aA][^<>]*>","",$string);
16//分割$string中的所有链接
17$output = split('',$string);
18for($i=0;$i
19$output_1 = split("
20}
21return $output_1;
22}
function GetAllLink($string) {
$string = str_replace("r","",$string);
$string = str_replace("n","",$string);
$regex[url] = "((http|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;@=_~%?/.,+-]+)";
$regex[email] = "([a-z0-9_-]+)@([a-z0-9_-]+.[a-z0-9-._-]+)";
//去掉网页中的[]
$string = eregi_replace("[|]","",$string);
//去掉JAVASCRIPT代码
$string = eregi_replace("","", $string);
//去掉非
$string = eregi_replace("?[^aA][^<>]*>","",$string);
//分割$string中的所有链接
$output = split('
', $string);for($i=0; $i
$output_1 = split("
}
return $output_1;
}
3.这步则是获取用户关心的链接:
//参数说明:$test=GetAllLink($string);$keywords是用户提交的关键字(支持多关键字,他们之间使用";"隔开);$url是目标根网站目录(为某些链接加上根链接)
[代码]php代码:
01function GetUserCareNews ($test,$keywords,$url) {
02$messTxt ="";
03$k=0;
04$key =explode(";",$keywords);
05
06//自动为网站加载上http,避免网易邮箱链接错误,有一定的局限性
07if(!ereg("http",$url)){
08$url ="http://".$url;
09}
10
11for($i=0;$i
12$test[$i] =eval('return'.iconv('gbk','utf-8',var_export($test[$i],true)).';');//修改编码
13if(ereg("href",$test[$i]) && !ereg("href='#'",$test[$i])){//去掉无效链接
14for($j=0;$j
15if(strpos($test[$i],$key[$j])!==false){
16$mess[$k++]=ereg_replace($key[$j],"".$key[$j]."",$test[$i]);//高亮关键字
17}
18}
19}
20}
21$mess =array_unique($mess);//数组去重
22
23//处理好发送链接,为链接加上网站根目录
24for($l=0;$l
25if(!ereg("http",$mess[$l]) && (strlen($mess[$l]) != 0)){//去掉空数组,这步很重要,如果不去掉直接影响后面链接的质量
26$mess[$l] =eregi_replace("href=["']","",$mess[$l]);
27$mess[$l] =$url.$mess[$l];
28$mess[$l] =eregi_replace(" /","/",$mess[$l]);
29if(ereg("'",$mess[$l])){
30$mess[$l]="