Discuz!X2采集程序(火车采集器发布接口)开发完成

Discuz!X2 Beta版已经发布了几天,这段时间在把玩X2中,同时也完成了对DX2系列接口的开发。

Discuz!X2接口实现的功能和以往的DX采集接口功能基本上一致,正式版中可能会考虑加入部份SEO功能。以前的版本可以参考:Discuz!X 全能发布接口,最强大的Discuz!X采集程序

Discuz!数据表thread字段displayorder详解

我们在做开发时,要调用某些列表的帖子,可以根据帖子的权重调用不同级别的帖子,displayorder这个字段在Discuz论坛中就存储了帖子不同级别的信息。

让帖子列表中不显示已经被删除的帖子和待审核的帖子,就是限制cdb_threads.displayorder字段。
当displayorder=0时,表示正常帖子
当displayorder=-1时,被删除的帖子
当displayorder=-2时,表示待审核的帖子

除此以外,还有其他几个值:

当displayorder=1时,表示板块置顶帖子
当displayorder=2时,表示分类置顶帖子
当displayorder=3时,表示全局置顶帖子

于是,我们在写SQL的时候,使用大于小于来筛选数据。

只调用置顶贴

SELECT t.tid,t.subject
		FROM pre_forum_thread t
		WHERE t.displayorder > 0
		limit 10;

只调用普通贴

SELECT t.tid,t.subject
		FROM pre_forum_thread t
		WHERE t.displayorder = 0
		limit 10;

Discuz!X全能接口附件大小修正补丁,2010-11-13。

Discuz!X全能接口附件大小修正补丁,适用X1,X1.5的discuz采集接口:火车采集器 For Discuz!X 全能发布接口

  1. 部分UTF-8编码的用户,在附件目录中使用了中文,造成附件大小为0KB,附件却能下载的Bug。
  2. 部份图片尺寸获取不正常,宽度为0的bug。

请有此问题的用户下载补丁,解压到论坛根目录运行!:locoy.patcher

附:部份用户启用了自定义表情包,可以用以下SQL更新表情,以解决不能显示表情的问题!

UPDATE `pre_forum_post`
SET `smileyoff`='0'
WHERE message like "%{:%";

"您的请求来路不正确或表单验证串不符"的另类解决办法

function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
	if(!getgpc($var)) {
		return FALSE;
	} else {
		global $_G;
		if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_G['gp_formhash']) && $_G['gp_formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
		preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
			if(checkperm('seccode')) {
				if($secqaacheck && !check_secqaa($_G['gp_secanswer'], $_G['gp_sechash'])) {
					showmessage('submit_secqaa_invalid');
				}
				if($seccodecheck && !check_seccode($_G['gp_seccodeverify'], $_G['gp_sechash'])) {
					showmessage('submit_seccode_invalid');
				}
			}
			return TRUE;
		} else {
			showmessage('submit_invalid');
		}
	}
}

从这个函数可以看出,DZ在检查用户的请求时,有判断HASH值和来路。
判断Hash值能检查用户请求的合法性,实际运用中也很有用,那强制检查肯定是非常有用的。
再看REFERER检查,我个人觉得多此一举,因为要做模拟POST,浏览器头是很容易就能模拟出来的,再加有部份网站做了负载均衡,或者使用代理服务器的话,就会出现“您的请求来路不正确或表单验证串不符,无法提交。请尝试使用标准的web浏览器进行操作。”的错误。

在部署代理服务器以后,Discuz的代码要改成这样:

function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
	if(!getgpc($var)) {
		return FALSE;
	} else {
		global $_G;
		if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_G['gp_formhash']) && $_G['gp_formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
		preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST']) ||
		'www.a.com' == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])
		))) {
			if(checkperm('seccode')) {
				if($secqaacheck && !check_secqaa($_G['gp_secanswer'], $_G['gp_sechash'])) {
					showmessage('submit_secqaa_invalid');
				}
				if($seccodecheck && !check_seccode($_G['gp_seccodeverify'], $_G['gp_sechash'])) {
					showmessage('submit_seccode_invalid');
				}
			}
			return TRUE;
		} else {
			showmessage('submit_invalid');
		}
	}
}

其中,www.a.com是被代理服务器的真实域名。

X1用户注册后无法跳回来源页的bug修正

在所有页面中搜索以下代码:

$_G['referer'] = isset($_G['referer']) ? dhtmlspecialchars($_G['referer']) : dreferer();

改成:

$_G['referer'] = dreferer();

此问题一般出现在用户注册的时间,无法跳回来源页面,可以直接在moudle/member/member_logging.php中修改。

错误在于只判断了变量是否定义,未检测变量是否有值,修改以后则会主动去记录用户的来源页面,此处有可能是笔误。

Discuz!X1取消注册必填项

如果我们需要用户填写某项必填项,可以在后台设置用户栏为必填,但并不一定就要在注册时填写,无谓增加用户的注册时间成本。

可以通过以下的办法解决,用户注册以后再填写必填项。

修改/moudle/member/member_register.php,大约70行左右


require_once libfile('function/profile');
$_G['cache']['fields_required'] = array();//添加此段代码

即在注册的时候不显示也不验证必填项。

DISCUZ调用小头像的方法

Discuz!的帖内头像灰常大,用户的回帖还没有头像多,浪费空间真是严重呐。
于是,将用户头像改成小头像吧。

			<!--{if $_G['setting']['bannedmessages'] & 2 && (($post['authorid'] && !$post['username']) || ($post['groupid'] == 4 || $post['groupid'] == 5) || ($post['status'] & 1))}-->
				<div class="avatar">{lang member_avatar_banned}</div>
			<!--{elseif $post['avatar'] && $showavatars}-->
				<div class="avatar" onmouseover="showauthor(this, 'userinfo$post[pid]')"><a href="home.php?mod=space&uid=$post[authorid]" target="_blank"><!--{echo discuz_uc_avatar($post[authorid], 'small')}--></a></div>
			<!--{/if}-->


这里呢,就是调用小头像了,其它有middle和big可选。

Discuz!X1应用中心不能显示应用名称

不能显示应用名称的原因是模板中没有加上应用的变量,解决办法有两个。

1,在模板title标记中加入应用标题,如:“{if !empty($app['appname'])}$app['appname'] {/if}”;
2,在userapp.php中,给{if !empty($topic['title'])}$topic['title'] {/if}变量赋值:

打开source\module\userapp\userapp_app.php,在末尾加上:$topic['title'] = $app['appname'];

预览地址:http://bbs.xiaogou.com/userapp.php

全能版接口专用的国内省市随机IP库

此前开发的全能版采集接口,均使用随机IP生成手段,这个方法生成的IP,可能遍布全球,看起来真实性不高。

针对这个问题,在PHPwind全能版接口中,我增加了一个国内IP随机的功能。这个功能,可以从指定的IP列表中,随机抽取一些国内IP作为用户的活动IP,这样看起来貌似会增加论坛的真实性。

后程序交付客户使用,客户反映效果非常良好。于是,我又将这个功能复制到Discuz!X接口中,并在今天对接口做了升级。

这个IP库是从纯真IP库中,反向剥离出来的,IP数据非常全面。考虑到发布时的实际需求,我将IP库条数限制为了10万条,经过简单压缩,文件大约在2M左右。

下面提供的IP库是我从一些省市中随机生成的,并不针对某一个城市,如果有需要需要特定国家或者地区的IP地址,可以联系我生成。

简单演示:

使用方法:

  1. 下载IP文件列表文件
  2. 解压后上传到论坛的data目录(Dz!X和PW都是data目录,discuz 7.x 在 forumdata)即可
  3. 本文件基于纯真IP库2010-5-31生成
  4. 为了避免资源占用过高,本程序生成的IP地址条数为10万条

点击下载:locoy.ip.rar

Discuz!X 文章/相册/日志全能发布接口

尘缘致力于提供完善的、稳定的、可持续服务的火车采集器论坛采集解决方案。Discuz!X 文章/相册/日志全能发布接口是Discuz!X系列接口的重要组成部份,2010年6月15日开发完成。至此,尘缘开发的Discuz!X系列接口,正式涵盖Discuz!X论坛、门户、群组、日志、相册几大模块。是目前国内功能最强大、模块最丰富的Discuz!X采集工具。

目前最新版本为X2_2011-05-28,兼容X2,X1.5,X1,请广大用户下载新的授权并更新。
继续阅读Discuz!X 文章/相册/日志全能发布接口

Discuz!X采集接口,增加一个随机回复的功能

此功能为用户可选功能,需要的童鞋可以将以下面的代码加到locoy.config.php中。
功能是从配置的随机回复内容是随机读取3条以上内容,并发布到帖子里。

//以下是随机回复设置,多条回复用|||分开
$replymessage           =       "回复1|||回复2|||回复3|||回复4|||回复5|||回复6|||回复7|||回复8|||回复9|||回复10|||回复11|||回复12|||回复13|||回复14|||回复15|||回复16|||回复17|||回复18|||回复19|||回复20|||回复21|||回复22|||回复23|||回复24|||回复25|||回复26|||回复27|||回复28|||回复29|||回复30";
$replymessage = explode('|||', $replymessage);shuffle($replymessage);
$replycount =   rand(3, count($replymessage));                     //随机回复条数
for($i=0;$i<$replycount;$i++) $_G['gp_message'] .= '|||'.$replymessage[$i];

Discuz!X 全能发布接口,最强大的Discuz!X采集程序

hi,欢迎使用史上功能最强大的Discuz!发布接口。
火车采集器 For Discuz! X全能发布接口是尘缘开发的、基于火车采集器的、可以完美模拟发帖的Discuz!X接口。

本接口历经万名Discuz!站长的使用和考验,我们开发的接口已经成为Discuz 论坛采集的最佳软件组合。Discuz! X全能发布接口为免费版和部分功能收费模式,有需求的用户往下看:

注意:
请不要拿本接口与其它收费或者免费接口对比,因为其它人开发的接口没有任何优势和可比性。
本接口是目前为止功能最强大、发布效果最好、技术支持最权威的接口版本,拒绝被忽悠。

请商业用户登陆授权中心更新。
继续阅读Discuz!X 全能发布接口,最强大的Discuz!X采集程序

Discuz!X采集发布模块[X1][X1.5][帖子][文章][群组][日志][09-03更新]

感谢您使用 尘缘(ID:vus520; QQ:130775) 开发的 Discuz! X1.5/X1 web发布模块

模块更新日志:

  1. 2010-09-03,基于X1.5RC发布X1.5模块
  2. 2010-05-25,增加日志、记录模块
  3. 2010-05-21, 增加群组发布模块
  4. 2010-05-20,修正文章发布模块,确认支持Discuz!X 1 正式版
  5. 2010-05-16,发布测试模块

适用版本及程序参数设置:

  1. Discuz! X1.5,Discuz! X1,Discuz! X1 Beta
  2. 基于默认模板开发,未启用登陆验证码,未启用发贴验证码
  3. 网站根地址填写:http://www.4wei.cn/bbs/,末尾加/

模块密码:

  1. “www.4wei.cn”,不含引号

常见问题及解决办法:

  1. 有登陆验证码或者使用经典登陆不成功,请使用内置浏览器获取Cookie!
  2. 登陆错误及提示“您还未登录”的解决办法及视频教程:http://www.4wei.cn/archives/1000446
  3. 发布内容出现数据丢失,请使用Urlencode发布

Discuz! X1.5全套模块打包下载,ALLInOne:Discuz!_X1.5_Allinone

Discuz! X1全套模块下载:

  1. 帖子发布模块下载:Discuz X BBS
  2. 文章发布模块下载:Discuz X News
  3. 群组发布模块下载:Discuz X Group,本模块无法完全获取分类,请手工指定分类ID
  4. 日志发布模块下载:Discuz X Blog
  5. 记录发布模块下载:Discuz X Doing,本模块不需要刷新分类

其它说明:

  1. Cwr文件,为火车采集器模块文件,在火车采集器中 打开->导入web发布模块即可
  2. 部分用户使用本模块,无法正常,建议大家使用模拟登陆,同时关闭后台的登陆验证。
  3. 如果使用模拟登陆、使用Cookie登陆都不能成功的话,一般估计是由于火车采集器的user-agent设置不正确,修改将火车的选项修改一下。具体的修改办法及视频教程请见:http://www.4wei.cn/archives/1000446