杰奇CMS定时采集配置方法
前言
要实现采集,默认方式是根据配置好的采集规则,在浏览器提交相应的参数即可完成后面的采集入库全部动作。
而实现定时采集,与人工在浏览器提交有些区别,主要分两大步骤:
一、编写采集的url和相关参数,访问这个url即可实现想要的采集模式。(这个url直接在浏览器提交同样可以实现采集)
二、把定时访问这个url的功能加到系统的定时任务里面,实现无人值守的定时采集。
具体实现方法请参考下面内容:
1、对采集配置文件的解释
任何一个采集都会用到两个采集配置文件(跟后台采集规则配置对应),都可以用文本编辑器打开查看。
其中 /configs/article/collectsite.php 是对总的采集站点配置,记录了一共允许采集哪几个站点。
里面包含类似这样的内容:
$jieqiCollectsite['1']['name'] = '采集站点一'; $jieqiCollectsite['1']['config'] = 'abc_com'; $jieqiCollectsite['1']['url'] = 'http://www.abc.com'; $jieqiCollectsite['1']['subarticleid'] = 'floor($articleid/1000)'; $jieqiCollectsite['1']['enable'] = '1'; $jieqiCollectsite['2']['name'] = '采集站点二'; $jieqiCollectsite['2']['config'] = 'def_net'; $jieqiCollectsite['2']['url'] = 'http://www.def.net'; $jieqiCollectsite['2']['subarticleid'] = ''; $jieqiCollectsite['2']['enable'] = '1';
参数含义解释如下:
['1'] - 这里的 1 表示采集网站的数字序号,不同的采集站序号不能重复。
['name'] - 采集网站名称。
['config'] - 网站英文标识,这个网站采集规则配置文件有关,比如这个值是 abc_com ,那么采集规则配置文件就是 /configs/article/site_abc_com.php。
['url'] - 采集网站网址。
['subarticleid'] - 采集网站,文章子序号运算方式,本项目主要为了兼容以前程序,新版本里面文章子序号可以通过采集获得。
['enable'] - 是否允许采集,1 表示允许,0 表示禁止,默认为 1。
如前面所说,每个采集网站有个专门的采集规则配置文件,/configs/article/ 目录下以 site_ 开头的php文件,如 /configs/article/site_abc_com.php。
里面内容都与后台采集规则设置相对应,具体细节不一一解释。需要了解的是本文件里面内容分两大部分,前面内容都是对网站内容采集规则的配置,而最后面 $jieqiCollect['listcollect']['0'],$jieqiCollect['listcollect']['1'] 这样的设置是对网站"批量采集规则"的配置,比如按最近更新采集、按排行榜采集,可以设置多个。['0'] 这里的数字 0 表示批量采集类别的数字序号,同一个网站也不能重复。
2、编写采集内容的url及参数
这里的采集是针对多篇文章批量采集,分两种模式:
一、按页面批量采集,比如采集最新更新列表或者排行榜列表,每个链接采集一页。
链接格式如下:
http://www.domain.com/modules/article/admin/pagecollect.php?action=collect&siteid=1&collectname=0&startpageid=1&maxpagenum=1&notaddnew=0&jieqi_username=admin&jieqi_userpassword=1234
参数含义解释如下:
www.domain.com - 是指您的网址。
action - 字符串,程序执行的动作命令,固定值为 collect。
siteid - 数字类型,要采集的网站序号,具体哪个网站对应什么序号见配置文件collectsite.php。
collectname - 数字类型,按页面批量采集的类别序号,见配置文件site_xxxx.php里面下面的。$jieqiCollect['listcollect']['0'] 这样配置的数字。
startpageid -- 页码标志,表示从列表的第几页开始采集。一般是数字类型,有些网站也可能是字符串。
maxpagenum -- 数字类型,表示表示一共采集几页。(默认为 1 ,如果要采集多页,是需要浏览器跳转的,只有在windows环境下调用浏览器时候有效,linux下调用wget时候最多只能采集一页,需要采集多页可设置多个采集命令。)
notaddnew -- 数字类型,0-表示采集全部文章,1-表示只更新本站已有的文章。
jieqi_username - 字符串,用户名(这个用户必须是本站有权限采集的用户)。
jieqi_userpassword - 字符串,用户密码。
二、按照文章序号批量采集
链接格式如下:
http://www.domain.com/modules/article/admin/batchcollect.php?action=bcollect&siteid=1&batchids=123,234,345&jieqi_username=admin&jieqi_userpassword=1234
参数含义解释如下:
www.domain.com - 是指您的网址。
action - 字符串,程序执行的动作命令,固定值为 bcollect。
siteid - 数字类型,要采集的网站序号,具体哪个网站对应什么序号见配置文件collectsite.php。
batchids - 要采集的对方网站文章序号(不是本地的文章序号),采集多个文章,序号用英文逗号分开,如 123,234,345。
jieqi_username - 字符串,用户名(这个用户必须是本站有权限采集的用户)。
jieqi_userpassword - 字符串,用户密码。
注:一个url需要放到IE浏览器里面提交的时候,整个url最大长度度不要超过2083字节,所以一般建议这里的url不要设置成太长,文章多的可以拆分成多个url。
3、利用系统任务实现定时采集
一、windows环境下做法
windows里面可以用系统的任务计划来实现定时执行程序,不过首先需要制作一个批处理文件,在这个文件里面用命令来调用浏览器来执行采集url。需要注意的是命令只能打开浏览器而不会采集好之后自动关闭,要实现采集完自动关闭可以通过javascript实现。自动关闭本窗口的js代码为:
<script type="text/javascript" language="javascript">// <![CDATA[ self.opener=NULL; setTimeout("window.close();", 3000); // ]]></script>
这里的参数 3000 是指延迟关闭时间,单位是毫秒,3000表示延迟3秒关闭。
这段代码可以在两个地方加入:
一个是加入到提示信息模板 /themes/风格名称/msgwin.html 里面,和之间加入上面那段js。这样的效果是整个系统任何提示信息页面都会在3秒钟后自动关闭。
如果您希望仅仅自动关闭采集成功后的提示页面,可以在采集提示信息的语言包里面加入以上javascript,这个配置文件是 /modules/article/lang/lang_collect.php, 里面 $jieqiLang['article']['batch_collect_success'] 是采集成功的提示信息,这个值原来是:
'恭喜您,全部文章采集完成!';
改成下面这样即可自动关闭
'恭喜您,全部文章采集完成!';
建立批处理文件方法如下:
在任意目录建立一个后缀名为 .bat 的文件,比如 D:\collect.bat,然后用文本编辑器输入类似下面的代码
@echo off "explorer" "http://www.domain.com/modules/article/admin/pagecollect.php?action=collect&siteid=1&collectname=0&startpageid=1&maxpagenum=1¬addnew=0&jieqi_username=admin&jieqi_userpassword=1234" "explorer" "http://www.domain.com/modules/article/admin/batchcollect.php?action=bcollect&siteid=1&batchids=123,234,345&jieqi_username=admin&jieqi_userpassword=1234" exit
其中
第一句 @echo off 是表示关闭显示
最后一句 exit 表示执行完退出
中间每行表示一个采集命令(可以设置多行),就是利用系统的浏览器来执行前面编辑好的采集url。
使用这样的格式:
"explorer" "url"
前面部分是命令,后面是采集的url,也可以使用这样的格式:
"%programfiles%\Internet Explorer\IEXPLORE.EXE" "url"
前面部分是ie浏览器的路径,后面是采集的url。
这两种命令模式的区别是,有多行命令的时候,前者会打开多个浏览器窗口同时执行;而后者先打开浏览器执行第一个命令,必须等这个浏览器关闭后才会重新打开一个浏览器执行第二个命令。
编辑好上面的bat文件后,开始在任务计划里面添加执行这个任务,主要步骤如下(每半小时执行一次采集):
a、打开"控制面板",进入"任务计划"。
b、点"添加任务计划"打开任务计划向导进行添加任务。
c、点"下一步",然后点"浏览"选择要执行的程序。(例子里面就是选择 D:\collect.bat)
d、设置任务名称及执行频率,比如选择"每天",点"下一步"。
e、选择最开始执行的时间和日期,一般设置比当前时间后面一点就行,点"下一步"。
f、设置执行的用户名和密码(本操作系统的帐号),点"下一步"。
g、选择"在单击"完成"时,打开此任务的高级属性",点"完成"。
h、在"日程安排"里面,点"高级",选择"重复任务",设置"每30分钟"执行一次。
i、保存以上设置后即完成系统任务计划。
二、linux环境下做法
linux下可以利用的系统定时任务来执行,也同样需要先制作一个批处理的脚本,方法如下
在任意目录建立一个后缀为 .sh 的文件,比如 /www/collect.sh ,需要赋值可执行权限,如 chmod 755 /www/collect.sh
里面内容如下:
wget -qO - "http://www.domain.com/modules/article/admin/pagecollect.php?action=collect&siteid=1&collectname=0&startpageid=1&maxpagenum=1¬addnew=0&jieqi_username=admin&jieqi_userpassword=1234" wget -qO - "http://www.domain.com/modules/article/admin/batchcollect.php?action=bcollect&siteid=1&batchids=123,234,345&jieqi_username=admin&jieqi_userpassword=1234"
其中每行表示一个采集命令(可以设置多行),是利用系统的wget命令调用url执行,并取消输出。
每行命令如下:
wget -qO - url
前面 "wget -qO - "是wget命令及参数,后面url是编辑好的采集url
编辑好 sh 文件后,用 crontab 命令添加定时任务,主要步骤如下:
a、用 crontab -e 命令,打开定时任务编辑器,里面一行表示一个定时任务。
b、用vi命令,增加一行定时执行批处理脚本的命令,格式如下:
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推。
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推。
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推。
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推。
program 为要执行的命令或者程序文件名
例1:每30分钟执行一次采集
*/30 * * * * /www/collect.sh
例2:每小时的第10分钟时候执行一次采集
10 * * * * /www/collect.sh
c、crontab命令详细用法请参看相关文档,一般网上也能搜索到。
注:windows的任务计划和linux的定时任务都可以设置多个,但是要避免同一本书在同一时间开多个浏览器同时采集,这样在判断最新章节时候会出错。
共有 0 条评论