帝国cms采集实现单页多点采集

2015-05-08    重症肌无力论坛 海蓝港湾

  帝国cms7.0中,如果希望在一个页面中,实现多点采集,如何办到呢?其实,列表页面的采集就是多点采集。但是内容页却没有这个功能。

  先说说什么是多点采集,看和你理解的一样吗?比如采集微博,一个页面有多条信息,我们要把他们拆解成多条分别采集下来。这就是我说的多点采集。
 
  登录后台,查看到执行采集到文件名为:e/admin/DoCj.php。研究一番。
 
======代码===========
<?php
define('EmpireCMSAdmin','1');
require("../class/connect.php");
require("../class/db_sql.php");
require("../class/functions.php");
$link=db_connect();
$empire=new mysqlquery();
//验证用户
$lur=is_login();
$logininid=$lur['userid'];
$loginin=$lur['username'];
$loginrnd=$lur['rnd'];
$loginlevel=$lur['groupid'];
$loginadminstyleid=$lur['adminstyleid'];
//验证权限
CheckLevel($logininid,$loginin,$classid,"cj");
$add=$_GET;
$classid=$add['classid'];
$count=count($classid);
if(!$count)
{
    printerror("NotChangeCjid","history.go(-1)");
}
esetcookie("recjnum",$count,0,1);
$url="ecmscj.php?enews=CjUrl";
echo"<center>采集节点的总个数为:<font color=red>$count</font>个</center><br>";
for($i=0;$i<$count;$i++)
{
    $trueurl=$url."&from=$_GET[from]&classid=".$classid[$i];
    echo"<iframe frameborder=0 height=35 name='class".$classid[$i]."' scrolling=no 
            src=\"".$trueurl."\" 
            width=\"100%\"></iframe><br>";
}
db_close();
$empire=null;
?>
<iframe frameborder=0 height=35 name="checkrecj" scrolling=no 
            src="CheckReCj.php?first=1&from=<?=$add[form]?>" 
            width="100%"></iframe>
===============代码结束==============
 
可以看到,转到/e/admin/ecmscj.php?enews=CjUrl 去执行了。
 
 
今天终于大发神威,完美解决了这个问题。只需修改/e/class/cjfun.php文件中的以下几处:
1.函数ReturnCJ_str中添加个默认为1的参数$diJiGe,表示单页面多点采集的第几个点。
//取得替换空余出来的值
function ReturnCJ_str($text,$exp,$info,$diJiGe=1){
    $e1="[phome-".$exp."]";
    $e2="[/phome-".$exp."]";
    $text=stripSlashes(stripSlashes($text));
    //替换回车
    $text=ReplaceFc($text);
    $rep="[!--".$exp."--]";
    //替换
    $num=CountCJ_site($text,$exp);//取得符号位置
    $zztext=RepInfoZZ($text,$exp,0);
    $text1=stripSlashes(preg_replace($zztext,$e1."\".$num.$e2,$info));
    
    $r=explode($e1,$text1);
    $r1=explode($e2,$r[$diJiGe]);
    $text1=$r1[0];
    
    
    return $text1;
}
 
2.大概在1570行左右,对照添加。意思是从采集页面地址中取得参数,$diJiGe.
 
    //入库数据库是否有记录
        if(empty($r[recjtheurl]))
        {
            $tmpnum=$empire->gettotal("select count(*) as total from {$dbtbpre}ecms_infotmp_".$r[tbname]." where oldurl='$nr[newsurl]' limit 1");
            if($tmpnum)
            {continue;}
        }
        //海蓝添加
        $hltemp=explode("diJiGe=",$nr[newsurl]);
        if(count($hltemp)==2){
            $diJiGe=$hltemp[1];
        }else{$diJiGe=1;}
        //海蓝添加结束
        //取得远程页面,三次取不到值的将不取值
 
3.大概在1700行左右,把
 
$zzvalue=ReturnCJ_str($r[$var],$dofield,$info);
 
修改为:
 
$zzvalue=ReturnCJ_str($r[$var],$dofield,$info,$diJiGe);
 
 
  就这个三个地方。修改好了后,在采集节点设置中,当需要多点采集单页面时,只要在页面地址后添加?diJiGe=n 就可以实现多点采集了。特别的,还可以使用[page]变量,一下子全部采集到。
 
  原文地址见此