读吧书网官方论坛's Archiver

good860508 发表于 2008-8-11 14:13

3.5可以利用系统任务实现定时采集吗!?

因为我们不可能每时每分都去增加文章管理可以像*奇那样利用系统任务实现定时采集吗!?.*奇的做法:
[quote]
一、windows环境下做法
windows里面可以用系统的任务计划来实现定时执行程序,不过首先需要制作一个批处理文件,在这个文件里面用命令来调用浏览器来执行采集url。需要注意的是命令只能打开浏览器而不会采集好之后自动关闭,要实现采集完自动关闭可以通过javascript实现。自动关闭本窗口的js代码为:
<script language="javascript"> self.opener=null; setTimeout("window.close();", 3000); </script>
这里的参数 3000 是指延迟关闭时间,单位是毫秒,3000表示延迟3秒关闭。
这段代码可以在两个地方加入:
一个是加入到提示信息模板 /themes/风格名称/msgwin.html 里面,<body>和</body>之间加入上面那段js。这样的效果是整个系统任何提示信息页面都会在3秒钟后自动关闭。
如果您希望仅仅自动关闭采集成功后的提示页面,可以在采集提示信息的语言包里面加入以上javascript,这个配置文件是 /modules/article/lang/lang_collect.php, 里面 $*qiLang['article']['batch_collect_success'] 是采集成功的提示信息,这个值原来是:
'恭喜您,全部文章采集完成!';
改成下面这样即可自动关闭
'恭喜您,全部文章采集完成!<script language="javascript"> self.opener=null; setTimeout("window.close();", 3000); </script>';
建立批处理文件方法如下:
在任意目录建立一个后缀名为 .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&notaddnew=0&*qi_username=admin&*qi_userpassword=1234"
"explorer" "http://www.domain.com/modules/article/admin/batchcollect.php?action=bcollect&siteid=1&batchids=123,234,345&*qi_username=admin&*qi_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&notaddnew=0&*qi_username=admin&*qi_userpassword=1234"
wget -qO - "http://www.domain.com/modules/article/admin/batchcollect.php?action=bcollect&siteid=1&batchids=123,234,345&*qi_username=admin&*qi_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的定时任务都可以设置多个,但是要避免同一本书在同一时间开多个浏览器同时采集,这样在判断最新章节时候会出错。

[/quote]

页: [1]