国内常见博客的采集办法
发表于 2009-02-16 23:17 | 3 条评论
接到一个客户的单子,采集国内常见博客指定用户的文章。经整理发现,这些博客都加上了防采集技术。主要是采用隐藏或者Js获取文章列表、内容采用多模板防采集技术等。
说一下近期开发的自动预发布接口和自动审核程序
发表于 2009-02-15 07:44 | 2 条评论
一,先给个定义。 什么是发布接口: 发布接口,一般来说,是放在服务器端的一个页面。 对火车而言,其实是一个入库程序。对于一般的CMS而言,接口就是内容发布页面了。 简单来理解,就是一般的网站后台发布数据的那个程序页面。 一般情况下,我们可以用默认的发布程序来处理相关数据,这种情况呢,不需要我们修改任何文件 ,可以直接使用在每个相同程序的网站上。这种以默认发布程序做的发布模块,有一个好处就是,模块制作方便且通用性强。我们一般都采用这样的方式来发布采集的数据。 随着采集技术的提高和SEO理念的成熟,很多站长已经不满足于单一的数据采集,而是想尽量丰富和完善网站内容,甚至有把采集的数据变成原创甚至超原创的内容。使用默认的网站发布程序,肯定不能满足我们的要求了。主要表现在几个方面。 第一,默认的网站程序都需要登陆 ,需要登陆就涉及到一个保存Cookie的问题,每次发布数据都需要用火车登陆一下网站,否则就无法发布数据,这样极大增加了发布的难度和操作的复杂性,很多新手始终找不到错误原因。 第二,发布的内容单一。一般来说,默认的发布页面只能发布标题,内容,作者和时间等字段内容等字段,有的网站作者还是限定为发布者。像一些招聘网站,发布求职信息的用户名都是不一样的,使用默认程序发布出来的数据,都是同一个用户,这个显然不合实际。 第三,功能单一,无个性化。 针对这些问题,我们提出了发布接口的这么一个概念。这个接口,可以理解为,个性化的内容发布程序,这个程序可以是手工写的,也可以是直接修改原发布程序而来。可能这个发布接口,其实仅仅就是取消了一段原程序的登陆验证代码,实现不需要登陆的功能。这样的程序呢,我们就叫接口程序。 不同的接口,可以实现不同的功能。
DEDE_V5.6/V5.5/V5.3 文章和评论,实现自动采集、发布与定时更新并生成静态页面
发表于 2009-02-12 22:33 | 15 条评论
DEDE_V5.6/V5.5/V5.3文章和评论,实现自动采集、发布与定时更新并生成静态页,这是一套快速的、准确的、完整的、经过长期测试的DEDE网站内容建设解决方案。 我们将这个功能定义为“预发布”。 可以实现大批量内容连带评论同时采集,然后发布为预审核内容存放在数据库中,最后通过前台无人值守的激活方式把文章和评论发布出来,模仿高逼真的发布效果。 这是一个自动的、简单的、功能强大的、颠覆手工与迎合搜索引擎优化的内容采集与发布方案,可以完全解决手工采集的繁杂与工作量,可以解决普通采集程序无法实现的搜索引擎优化与用户体验问题,高度模仿真实内容的发布状态,堪称国内网站内容采集第一方案。 预发布文章和评论,实现自动采集、发布与定时更新并生成静态页,这一套程序主要包括内容预发布处理程序,前台内容审核程序,前台静态页面生成程序构成。 本程序于2010年5月11日最后更新,请商业用户联系升级。
MYSQL 数据库函数库备忘
发表于 2009-02-3 20:26 | 3 条评论
一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然对数的底)的x次方 FLOOR(x) 返回小于x的最大整数值 GREATEST(x1,x2,...,xn) 返回集合中最大的值 LEAST(x1,x2,...,xn) 返回集合中最小的值 LN(x) 返回x的自然对数 LOG(x,y) 返回x的以y为底的对数 MOD(x,y) 返回x/y的模(余数) PI() 返回pi的值(圆周率) RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 SIGN(x) 返回代表数字x的符号的值 SQRT(x) 返回一个数的平方根 TRUNCATE(x,y) 返回数字x截短为y位小数的结果 二、聚合函数(常用于GROUP BY从句的SELECT查询中) AVG(col) 返回指定列的平均值 COUNT(col) 返回指定列中非NULL值的个数 MIN(col) 返回指定列的最小值 MAX(col) 返回指定列的最大值 SUM(col) 返回指定列的所有值之和 GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果 三、字符串函数 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2...,sn) 将s1,s2...,sn连接成字符串 CONCAT_WS(sep,s1,s2...,sn) 将s1,s2...,sn连接成字符串,并用sep字符间隔 INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果 FIND_IN_SET(str,list) 分析逗号分隔的list列表,如果发现str,返回str在list中的位置 LCASE(str)或LOWER(str) 返回将字符串str中所有字符改变为小写后的结果 LEFT(str,x) 返回字符串str中最左边的x个字符 LENGTH(s) 返回字符串str中的字符数 LTRIM(str) 从字符串str中切掉开头的空格 POSITION(substr,str) 返回子串substr在字符串str中第一次出现的位置 QUOTE(str) 用反斜杠转义str中的单引号 REPEAT(str,srchstr,rplcstr)返回字符串str重复x次的结果 REVERSE(str) [...]
收集的DEDE的SEO办法
发表于 2009-02-1 16:31 | 4 条评论
在DEDE使用过程中,发现DEDE确实是个好东西,不知道是使用时间长了还是怎么的,感觉其它CMS怎么比都比不上DEDE。 昨天一个客户的一个单子做一个Ecms的预发布接口,搞了数个小时才搞明白Ecms的基本架构,我对其后台的错综复杂和数据表的庞杂,表示非常不解。 虽然有点偏题,但是我还是要问一下,为什么DEDEV5以上版本都会引入了一个主表,来处理相同字段的数据,Ecms却不这样做呢?给我感觉最严重的问题就是,二次开发极难。 当然,DEDE并不是完美无缺的,以下仅从SEO方面说一下自己的建议。 列表页和内容页目录式优化 页面Title优化 Keywords和Description优化 列表页实现多模板、自定义排序 由于写此文是刚刚在写一个模板时发现的,于是先把第一条整理下来。 列表页的目录式优化,最简单的,是要把默认在路径中携带的index.html去掉。 在解决这个问题时,我也到DEDE论坛搜索了一把,找到几个不错的解决办法。总的来说,以下这个方法是最好的解决办法。 栏目导航列表修改办法: {dede:channel type='top' row='7' currentstyle="<LI class='nokia'><A href='~typelink~'><SPAN>~typename~</SPAN></A> </LI>"}<LI><A href='[field:typelink function='preg_replace("/\/index\.html$/i","/",@me)'/]'><SPAN>[field:typename/]</SPAN></A> </LI>{/dede:channel} 这里使用正则替换,把默认路径中的Index.html替换掉,而不是只进行简单的替换,也不是把数据表中的文件名改成空白。 这里特别说明一下,mb5u给的解决办法也不是可以(http://bbs.dedecms.com/116595-1.html),但是你得注意,这样操作的最大问题就是,会造成你生成列表文件时无法将列表第一页复制成首页。也就是说,你非得在生成列表页时再执行一个SQL将默认文件名再改回来。 页面Title的优化。 页面Title的优化,主要是把栏目从子级栏目到高级栏目调用,类似 三级栏目_二级栏目_一级栏目_网站名称 的顺序,我个人觉得这样会有效提升子栏目的权重,实际效果未考证。 DEDEV5.3的修改办法是: 1。将官方原来的排列方式反过来,找到include/typelink.class.php第164行 $this->valuePositionName = $tinfos['typename'].$this->SplitSymbol.$this->valuePositionName; 修改为: $this->valuePositionName = $this->valuePositionName.$this->SplitSymbol.$tinfos['typename']; 接下来将模板的标题标签改这样 <title>{dede:field.title/} - {dede:global.cfg_webname/}</title> 文章内容特殊字段的处理。 比如Body字段中的关键字替换,段落重排等。 <p>{dede:field.body runphp='yes'} @me = preg_replace("@<div[^>]{0,}>@isU",'',@me); @me = preg_replace("@</div>@isU",'',@me); @me = preg_replace("@ {1,}@isU",' ',@me); [...]
Ecms实现文章定时预发布功能。
发表于 2009-01-31 23:52 | 没有评论
一,开发笔记: Ecms的频道表各自独立,给这个接口的开发造成了最大的困难。为了方便,这个接口开始使用新表来存放未审核文档的缓存数据。 Ecms有比较成熟的计划任务功能,于是,这个接口想比DEDE,在前台调用这个接口将会变得更加容易。 此接口目前处于测试状态。 二,使用方法: 先安装接口,即运行 e/tasks/aotunew.php ,将自动创建数据表,添加一条计划任务 修改文档发布程序,发布生成HTML的未审核文档,修改 ecms/e/class/comdofun.php 添加代码。 if($sql) { //文档生成静态文件以后,将文档设置为未审核 $empire->query("UPDATE `{$dbtbpre}ecms_news` SET `checked`='0' WHERE (`id`='$id');"); $empire->query("INSERT INTO `{$dbtbpre}aotunew` (`aid`,`class`,`classid`) VALUES ('$id','".$class_r[$add[classid]][tbname]."','$add[classid]');"); insert_dolog("classid=$add[classid]<br>id=".$id."<br>title=".$add[title]);//操作日志 printerror("AddNewsSuccess","AddNews.php?enews=AddNews&bclassid=$add[bclassid]&classid=$add[classid]"); } else { printerror("DbError",""); } 前台调用 /* * 作者:尘缘 * Q Q : 130775 * 版本: PHP5 + Ecms 5.1+ * 使用说明:http://www.4wei.cn/?p=431 * 安装方法:第一次运行时会自动安装相关数据表,然后修改 * 本接口支持Ecms计划任务直接运行,也支持Js链接调用,第一次运行时会自动安装相关数据表 * [...]
DEDE使用火车采集器实现的自动实时发布文章和更新HTMl的功能
发表于 2009-01-15 05:41 | 19 条评论
一,为什么有这个想法: 使用火车发布文章,有三大不足。 需要登陆发布,受DEDE系统限制太大 就是一次发布的数量有限制,可能造成一次性发布太多遭K的恶果 如果网站首页是静态文件,则不能更新首页,用户就不知道网站的更新情况 如果没有一台可以一直运行的服务器,使用火车采集器的自动更新功能就不太现实 火车采集器的自动更新功能是收费的,呵呵。 自己需要咯,想挑战一下自己咯等。 二,Do it. 首先想到,让火车发布大量数据,且将文章属性设置为未审核状态,这个问题很简单,使用DEDEv5.3.1时却遇到DEDE的一个Bug。就是未审核的文章居然会在前台显示。先是对DEDE一气臭骂,后来找了一些原因,发现了DEDEv5.3.1中的一个Bug.经修复后可以实现未审核的文章不在前台显示。1月13号到DEDE报告Bug以后,1月14号DEDE出的补丁中修复了这个问题,呵呵,所以,1月15号,就是今天咯,开始正式整理此开发文档。 实际发现,发布和保存大量未审核文章不成问题,难在如何实现随机激发发布功能。想了很久,觉得使用时间限制最好。当前台JS调用了审核文章的链接,传递一个访问用户的信息,程序取得用户的IP并保存为SESSION信息,此时,审核一篇文章并生成文章与首页静态文件。一个用户在一定的时间内,只能激活限定数量的文章,且,发布时使用此用户的IP信息,呵,挺个性的。 激活文章,生成文章静态页和首页静态文章,受网站模板的影响,可能会比较慢,则会出现首页未生成完页面就被关闭的问题。所以,最好的办法是,在发布时文章时就生成文章静态文件,然后把文章设置为未审核状态。激活文章时则只需要很短的查询。首页或者列表页尽量使用动态页,这两个问题不好处理,只能以此法代之。 完整的过程就是,发布文档时,将文档设置为未审核状态;调用程序时,先判断上一次查询的缓存有没有超时,如果超过缓存时间,则清除缓存,以显示最新的文章。清除缓存以后,查询出一定数量属性为未审核的文档,将Archives和Arctiny表中的未审核属性取消,并更新一下文档的Pubdate字段,实现一点随机化。最后写入缓存,禁止缓存有效期内的重复更新! 三,文件使用方法: 发布文档时请把文档属性设置为未审核状态,即发布时提交的文档属性参数为:arcrank=-1,这时为动态浏览; 如果你想生成静态文档,请将文档状态设置为正常浏览状态,即arcrank=0;然后修改默认文档添加程序。 如:arcticle_add.php,在文件最下边“//生成HTML”处添加一段代码: //生成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');"); 然后,上传New.php到你的网站根目录,到Dede后台设置系统基本设置中,将性能选项卡中的arclist标签调用缓存时间设置为一个合适的数,如3600表示一个小时刷新一次缓存。 最后,在模板文件顶部调用一段代码即可: “ <script type="text/javascript" src="{dede:global.cfg_cmsurl/}/new.php"></script> ”。 支持的参数: no=每次随机更新的数量,为空时默认为5; typeid=栏目ID,为空则是全站数据 order=排序方式,支持Desc:倒序,Asc:顺序,Rand:随机,默认为随机查询。 如:“ <script type="text/javascript" [...]
火车采集器搭配DEDE V5.X 实现指定用户自动登陆发布文章的解决办法.
发表于 2009-01-15 05:38 | 1 条评论
一,现在的DEDE网站后台采用Cookie和Session验证,当你登陆以后长时间没有刷新,也会注销你的登陆,所以,要想长时间保持在线,只能采用不断刷新,或者注销后自动登陆的办法. 二,今天只说注销后自动登陆的解决办法.要修改的文件也只有简单的几句话. 三,打开你的管理员目录,默认为DEDE目录,修改Config.php这个文件,大约在201行,你需要添加以下绿色的内容 . //检验用户登录状态 $cuserLogin = new userLogin(); if($cuserLogin->getUserID()==-1){ //当没有用户信息时,先进行尝试登陆一次 if($locoy_auto_login_admin){ $cuserLogin = new userLogin($admindir); $res = $cuserLogin->checkUser($locoy_auto_login_admin,$locoy_auto_login_pwd); if($res==1) $cuserLogin->keepUser(); } //vus520注:如果登陆不成功,则要求登陆,增加了一次登陆判断 if($cuserLogin->getUserID()==-1) { header("location:login.php?gotopage=".urlencode($dedeNowurl)); exit(); } header("location:login.php?gotopage=".urlencode($dedeNowurl)); exit(); } locoy_auto_login_admin和locoy_auto_login_pwd可以由你自己设定,分别表示用户名和密码,你可以在Config.php直接定义,也可以在发布数据时携带在发布的POST数据里.前者比较方便,但是安全性后者更高一些.
