DEDE使用火车采集器实现的自动实时发布文章和更新HTMl的功能

by 尘缘 on 一月 15th, 2009 // Filed Under → DEDE, LocoySpider

一,为什么有这个想法:

  1. 使用火车发布文章,有三大不足。
    • 需要登陆发布,受DEDE系统限制太大
    • 就是一次发布的数量有限制,可能造成一次性发布太多遭K的恶果
    • 如果网站首页是静态文件,则不能更新首页,用户就不知道网站的更新情况
  2. 如果没有一台可以一直运行的服务器,使用火车采集器的自动更新功能就不太现实
  3. 火车采集器的自动更新功能是收费的,呵呵。
  4. 自己需要咯,想挑战一下自己咯等。

二,Do it.

  1. 首先想到,让火车发布大量数据,且将文章属性设置为未审核状态,这个问题很简单,使用DEDEv5.3.1时却遇到DEDE的一个Bug。就是未审核的文章居然会在前台显示。先是对DEDE一气臭骂,后来找了一些原因,发现了DEDEv5.3.1中的一个Bug.经修复后可以实现未审核的文章不在前台显示。1月13号到DEDE报告Bug以后,1月14号DEDE出的补丁中修复了这个问题,呵呵,所以,1月15号,就是今天咯,开始正式整理此开发文档。
  2. 实际发现,发布和保存大量未审核文章不成问题,难在如何实现随机激发发布功能。想了很久,觉得使用时间限制最好。当前台JS调用了审核文章的链接,传递一个访问用户的信息,程序取得用户的IP并保存为SESSION信息,此时,审核一篇文章并生成文章与首页静态文件。一个用户在一定的时间内,只能激活限定数量的文章,且,发布时使用此用户的IP信息,呵,挺个性的。
  3. 激活文章,生成文章静态页和首页静态文章,受网站模板的影响,可能会比较慢,则会出现首页未生成完页面就被关闭的问题。所以,最好的办法是,在发布时文章时就生成文章静态文件,然后把文章设置为未审核状态。激活文章时则只需要很短的查询。首页或者列表页尽量使用动态页,这两个问题不好处理,只能以此法代之。
  4. 完整的过程就是,发布文档时,将文档设置为未审核状态;调用程序时,先判断上一次查询的缓存有没有超时,如果超过缓存时间,则清除缓存,以显示最新的文章。清除缓存以后,查询出一定数量属性为未审核的文档,将Archives和Arctiny表中的未审核属性取消,并更新一下文档的Pubdate字段,实现一点随机化。最后写入缓存,禁止缓存有效期内的重复更新!

三,文件使用方法:

  1. 发布文档时请把文档属性设置为未审核状态,即发布时提交的文档属性参数为:arcrank=-1,这时为动态浏览;
  2. 如果你想生成静态文档,请将文档状态设置为正常浏览状态,即arcrank=0;然后修改默认文档添加程序。
    如:arcticle_add.php,在文件最下边“//生成HTML”处添加一段代码:

  3. //生成HTML
    InsertTags($tags,$arcID);
    $artUrl = MakeArt($arcID,true,true);
    if($artUrl=='')
    {
    $artUrl = $cfg_phpurl."/view.php?aid=$arcID";
    }
    $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET `arcrank`='-1' WHERE (`id`='$arcID');");
    $dsql->ExecuteNoneQuery("UPDATE `#@__arctiny` SET `arcrank`='-1' WHERE (`id`='$arcID');");

  4. 然后,上传New.php到你的网站根目录,到Dede后台设置系统基本设置中,将性能选项卡中的arclist标签调用缓存时间设置为一个合适的数,如3600表示一个小时刷新一次缓存。
  5. 最后,在模板文件顶部调用一段代码即可:
    <script type="text/javascript" src="{dede:global.cfg_cmsurl/}/new.php"></script> ”。
  6. 支持的参数:
    • no=每次随机更新的数量,为空时默认为5;
    • typeid=栏目ID,为空则是全站数据
    • order=排序方式,支持Desc:倒序,Asc:顺序,Rand:随机,默认为随机查询。
    • 如:“ <script type="text/javascript" src="{dede:global.cfg_cmsurl/}/new.php?no=100&typeid=2&order=desc"></script>
    • 排序为Desc的时候,是按先发布的文章先审核的方式进行发布的,Asc反之,Rand为随机。

四,这是我们在数据处理方面做的一个尝试,也许这种新的模式会是一次突破。祝大家使用愉快。有Bug或者建议请回复于后。

点此下载文件:dedecms_v53_autonew
注:此处为5.3时发布的测试版程序,后测试也可运行在DEDE5.5。

你可以任意转摘“DEDE使用火车采集器实现的自动实时发布文章和更新HTMl的功能”,但请保留本文出处和版权信息。
作者:尘缘,QQ:130775,来源:http://www.4wei.cn/archives/405

有 19 条评论啦

Posted on 2009年01月23号 at 05:06:13

枫子 :

哇..好HIGH..真强..这都可以想出来..顶

Posted on 2009年01月27号 at 12:04:39

游客 :

呵呵 测试下

Posted on 2009年02月4号 at 14:33:51

soler :

其他都弄好了。只是不知道首页和列表怎么自动更新
难道只能手动或者使用动态页么。。

回复:请付费购买我提供的高级服务

Posted on 2009年03月5号 at 04:09:20

游客 :

no=每次随机更新的数量,为空时默认为5;

这个是在new.php文件里改还是只改JS代码就行呢???

如果你懂PHP,可以修改PHP文件,建议只修改JS中的参数。

Posted on 2009年03月5号 at 18:23:40

游客 :

请问 这里面的no=10 这个10是代表总共生成10篇文章还是每个IP生成10篇文章呢???
还有每天总共生成多少篇文章在哪里控制呢???
谢谢老大回答!~~~

Posted on 2009年03月7号 at 01:29:05

游客 :

老大...帮帮忙吧...这的很希望您能解答这个问题!~~~

请问 这里面的no=10 这个10是代表总共生成10篇文章还是每个IP生成10篇文章呢???
还有每天总共生成多少篇文章在哪里控制呢???
谢谢老大回答!~~~

no=10 是每次一共生成的数量,没有每天控制总数的控制。

Posted on 2009年04月9号 at 18:21:59

游客 :

发布文档时请把文档属性设置为未审核状态,即发布时提交的文档属性参数为:arcrank=-1,这时为动态浏览;
如果你想生成静态文档,请将文档状态设置为正常浏览状态,即arcrank=0;然后修改默认文档添加程序。
如:arcticle_add.php,在文件最下边“//生成HTML”处添加一段代码:

——————————————————————————————————
这一点有点困惑

是不是说如果我把火车头的发布模块中 arcrank改为-1的话

就不用在做下面的步骤了 直接上传new.php就可以了吗

还是都得去做

并且arcticle_add.php 跟你提供的示例文件并不一样啊

反倒是arcticle_add.php_action.php有点像还是不一样

现在我只是把文档做了未审核,放上new.php 模板放上代码

不知道行不行 我自己刷新了一下缓存 不行

请赐教

new.php可以将未审核的文档审核并发布,所以,你在模块里把文档属性设置为-1,就可以不做以下的工作了,但需要手动生成静态文件。

Posted on 2009年05月7号 at 22:58:23

游客 :

指定栏目好像没效哦!!!

Posted on 2009年05月29号 at 09:23:47

游客 :

“在发布时文章时就生成文章静态文件,然后把文章设置为未审核状态。......首页或者列表页尽量使用动态页。”
实际只是实现了自动审核功能。
完全可以进一步自动更新首页、列表页、生成文章静态html。请参考某斑竹(x梦缘x)的自动更新插件。

Posted on 2009年07月12号 at 23:08:10

游客 :

新云也有很多用户,拜托关照下新云用户吧。

目前用PHP开发,Asp已经快一年没写了。

Posted on 2009年10月11号 at 21:35:27

尘缘您好 :

请教一个问题:
怎么每次刷新页面都会自动审核文章,而不是按照arclist标签调用缓存时间进行,

如何控制隔多长时间审核文章?

程序设计是按系统缓存间隔时间进行更新的。系统后台可以进行控制。

Posted on 2009年10月13号 at 19:51:14

尘缘您好: :

按照步骤:先正常发布,然后将属性改为-1(即待审核状态),是为了先生成静态,待自动发布时不用再次生成。但是,先生成静态之后,tag标签内会显示未发布的文档。请教尘缘兄台,如何解决?

Posted on 2009年11月11号 at 23:55:46

Kenny :

是否支持DEDE 5.5 呢

支持

Posted on 2009年11月14号 at 23:06:06

kenny :

new.php 是否可以单独运行页面,或者单独做成个html,自己手动访问呢?这样可以控制每天审核数量。谢谢!

当然可以人工手动访问。

Posted on 2009年12月21号 at 21:25:52

游客 :

非常感谢尘缘提供这么好的功能!
我用的是DEDE5.3,使用该功能后效果非常好。可后来换了空间,出现一个问题,就是审核不按设定的Asc顺序了,会跳着审核,不知道是什么原因。中间用过一个首页自动生成静态插件,后来取消也不行,不知道跟这个有没有关系,请教尘缘有什么办法能够让网站还能按Asc顺序审核,谢谢!

Posted on 2010年04月4号 at 13:38:19

yes :

请教一个问题:
怎么每次刷新页面都会自动审核文章,而不是按照arclist标签调用缓存时间进行,
如何控制隔多长时间审核文章?
我也是这个问题,希望的到您的会大 你说:“程序设计是按系统缓存间隔时间进行更新的。系统后台可以进行控制。”
我在后台设置缓存了 可是还不能啊

Posted on 2010年04月14号 at 22:44:06

打听1下 :

自己在论坛找到一篇文章!发布到这里 我试验一下 如果ok 会发帖告诉大家的
5.5中一个解决未审核文章显示在前台的办法。将已审核文章转为未审核

可能有一些朋友遇到了根我一样的问题,就是采集回来文章以后,执行sql命令把文章转为未审核,但是在文章列表页却依然显示未审核的文章。

在论坛找了很久,没找到个准确答案。

其实原因在于论坛中流传的那个sql语句并不是十分准确,因为不单要修改一张表(dede_archives),同时也要修改dede_arctiny表(控制在列表页不显示),还有dede_taglist表(控制在tag标签页不显示)。

也就是说要执行下面两条sql语句才能真正将已审核的文章转为未审核。
复制代码
update dede_archives set arcrank=-1;
update dede_arctiny set arcrank=-1;
update dede_taglist set arcrank=-1;

Posted on 2010年04月14号 at 22:45:15

打听1下 :

先生成静态之后,tag标签内会显示未发布的文档

Posted on 2010年07月7号 at 18:39:29

123213 :

我用的是5.6 按照步骤:先正常发布,然后将属性改为-1(即待审核状态),是为了先生成静态,待自动发布时不用再次生成。但是,没有实现自动审核功能



走过路过,千万不要飞过,那是鸟人: