自制DiscuzX发帖机器人

其实做发帖机器人用php更方便:在discuz目录里面一放,include一下函数,然后直接伪造POST数据后调用discuz的代码就行了,我以前也这么干过,那是discuz7的事了,经过X这个版本大改后,代码早已作废。

况且用php这么处理还是有缺陷的:一、无法伪造发帖时间等数据;二、性能实在抱歉。Discuz发帖那代码粗粗扫过,判断条件繁多,数据库操作复杂,平时还好,我是因为想把simplecd的数据导入DiscuzX测试DX的性能才写的机器人,那30万条条目和500万条回复,用调用php的方式一秒钟不知道能不能处理完10条数据+回复,真是要发到猴年马月去了。

其实嘛,机器人发个帖而已,更新完关键数据库不就完了么,log、status什么的我才懒得去理。呃,所以就草草研究了一下discuzx的数据库结构,然后写了这个python类来发帖。修改了一下以便发布,未测试,bug可能还是会有不少的,自行解决吧。

使用方法,更新以下变量:

MYSQLDB = '' #数据库名
MYSQLUSER = '' #数据库用户名
MYSQLPASS = '' #数据库密码
MYSQLCHARSET = 'utf8' #编码方式
UCHOME_PRE = 'cdb_uc_' #uc_server的前缀
DISCUZ_PRE = 'dzx_' #discuz论坛前缀

然后接口为:

dz = DiscuzX()
tid = dz.new_thread(fid,typeid,author,subject,message,\
                    dateline=None,updatefeed=True)
dz.new_reply(tid,user,message,dateline=None,updatefeed=True)
dz.update_thread(tid,subject,message,dateline=None,updatefeed=True)

fid为论坛id
typeid为分类id,如无分类可填0
author/user为用户名,如果不存在,会自动调用new_user函数胡乱创建。
subject为标题
message为正文,为方便起见我设定了发帖格式直接为html的方式
dateline是epochtime,用于伪造发帖时间,不填则自动为当前系统时间
updatefeed选择是否向uc_server推送发帖/回帖事件
返回tid即为所发主题的id
reply时会自动随机更新点击量信息

代码在此: http://obmem.info/wp-content/uploads/2010/11/discuzx.py

LICENSE为:WTFPL

PS,忘了说明了,为了防止不明真相的人误解,这不是用于第三方灌水,而是用于服务器端直接更新论坛内容的东东。灌水是不对地。

---

原文:http://obmem.info/?p=745

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。