对dz非任意用户名发帖的一点想法
任意用户名发帖,容易闹笑话。对非任意用户名发帖问题,一直是思考的内容,想做,但是不敢动手。需要构建一个php文件。采集部分:
比如采集火车论坛的 http://bbs.locoy.com/spider-36894-1-1.html ,1-10楼。1楼是主题帖,2-10楼是回复贴。
需要采集板块Id, 主题帖标题,主题帖内容,会员名,会员id,主题帖时间,主题帖附件(包含图片),回复贴内容(标题略),回复贴会员名,回复贴id,回复贴时间,回复贴附件(含图片)。考虑到发布时提交到网站的返回值不能存储到采集表中,因此循环采集的时候不能分为多条记录,必须将所有内容保存到一个记录中。
表设计:
板块Id:53
主题帖id:36894
主题帖标题:UCenter Home 1.5日志发布模块
会员id:96977|||96977|||109800|||……
会员名:懷念過去↑文|||懷念過去↑文|||huangmin1111 |||……
发表时间:2009-3-25 05:15|||2009-3-25 05:15|||2009-3-25 06:21|||……
帖子内容:使用前请先看下面这张帖子……|||沙发 |||来学习了。新手。感觉很难学呀。|||……
(帖子内容中含图片,附件,过滤 版主 管理员之类的词汇,将本站网址替换或过滤掉)
完毕。
发布的时候其实比较简单的,就是提交,但提交到哪里?自然不能使论坛自带的发布程序,而需要另外设计发布页面。
发布页面不需要用户名认证。因为涉及多个用户名,也没办法进行一次次登录。
修改数据表:
用户表增加两个字段,字段名 oldid(存储原会员id),oldusername(存储原会员名)
帖子和主题帖表中增加一个oldid字段,目的是存储采集网站的帖子id,使得入库回复内容的时候不至于出错。
提交页面需要做到:
1. 如果是多个网站向一个网站喂数据,则将要考虑用户id重复的问题。比如A网站的ID100是小张,B网站的id是小李。如果都以id为100来提交,但就是张冠李戴,到时候容易不相干的人插嘴,闹笑话。做法是,在火车提交规则上,将会员id前加上特殊数字,如1-,2-之类,提交到oldid的时候,原来的96977编程1-96977,因此oldid一定要是字符型,而不是数字型,否则会出错。
2. 检测oldid,oldusername,如没有,则先在用户表中建立用户名,密码随机。提交内容时,先搜索出oldid对应的新id,再将数据入库。因为用火车采集的这些的不是真人,所以密码无所谓,不留空,别被人猜出来就行。
3. 由于是循环采集,|||是分隔符,所以采集的时候要先过滤所有的|||,以免闹出问题。发布接收页面需要用到数组处理变量。
4. 当数组中的第一组值,也就是主题帖需要提交到两个表,一个是主题帖表,一个帖子表。然后查询这个表的新id,使得后面入库回复贴的时候不至于错乱。
5. 假如从3-4个网站采集喂同一个网站,还设计到原来站点和本站点已有的用户名重名的问题。比如前面已经A站点采集过来的人叫小张,从B站点也采集过来一个叫小张的,则必须将“小张”重命名。比如小李,小王,最好是3位英文字母+5位数字。这样显得真实,不容易出错。 (用户Id重复和用户名重复是两个概念哦),因为dz论坛是以用户id为主导,用户名是一个代号而已。
基本就这些吧,觉得采集第一页就可以,最多3-5页。如果采集的内容太多,比如采集所有回复,那一个帖子可能有上千回复,这样提交的话,接收页面可能要做1000次用户名查询,提交,再查询,用户id查询,提交,1000次帖子内容的查询入库等等,再加上火车发布的又比较快,容易造成程序崩溃。
总之,这种采集不能快,慢慢来。
至于程序怎么写,暂时在研究。不知道哪位兄弟已经有了啊? 程序也要慢慢写 直接对数据库进行查询 没有的用户名进行注册 已有的用户名 则跳过注册直接发布!
实际就是POST 对数据库提交!
可以看看我的那个图片附件中的查询重复标题 兄弟,用户名的问题,我觉得是这样,
假如你的网站是T网站,你从A网站采集,那问题在于,假如这个用户名是T网站的人手动注册的,而不是系统自带的。那人家明明没有发布的帖子,你却说是他发布的,他肯定不愿意的。 只要解决查询没有注册用户自动注册就可以实现论坛搬家了。。。。。
我目前做论坛搬家是分2次采集,第一次是注册相关会员的账户,第二次发布。。。。
页:
[1]