首页 > Python > discuz x2.5自动登录 签到 发帖 回帖程序python程序

discuz x2.5自动登录 签到 发帖 回帖程序python程序

程序片段一

# -*- coding: utf-8 -*-
#! /usr/bin/env python
# -*- coding: utf-8 -*-
''' DiscuzRobot - Discuz!论坛的机器人程序,实现了登录,签到,发贴及回帖等功能
by Conanca
'''
import urllib2, urllib, cookielib, re, time
class Robot:
    def __init__(self, forumUrl, userName, password, proxy = None):
        ''' 初始化论坛url、用户名、密码和代理服务器 '''
        self.forumUrl = forumUrl
        self.userName = userName
        self.password = password
        self.formhash = ''
        self.isLogon = False
        self.isSign = False
        self.xq = ''
        self.jar = cookielib.CookieJar()
        if not proxy:
            openner = urllib2.build_opener(
	    urllib2.HTTPCookieProcessor(self.jar))
        else:
            openner = urllib2.build_opener(
	    urllib2.HTTPCookieProcessor(self.jar), 
	    urllib2.ProxyHandler({'http' : proxy}))
        urllib2.install_opener(openner)


程序片段二

    def login(self):
        ''' 登录论坛 '''
        url = self.forumUrl + "/member.php?mod=logging
		&action=login&loginsubmit=yes&infloat=yes&inajax=1";
        postData = urllib.urlencode({'username': self.userName, 
		'password': self.password, 'answer': '', 
		'cookietime': '2592000', 'handlekey': 'ls', 
		'questionid': '0', 'quickforward': 'yes', 
		'fastloginfield': 'username'})
        req = urllib2.Request(url,postData)
        content = urllib2.urlopen(req).read()
        if self.userName in content:
            self.isLogon = True
            print 'logon success!'
            self.initFormhashXq()
        else:
            print 'logon faild!'

    def initFormhashXq(self):
        ''' 获取formhash和心情 '''
        content = urllib2.urlopen(self.forumUrl + '/plugin.php
		?id=dsu_paulsign:sign').read().decode('gbk')
        rows = re.findall(r'<input type=\"hidden\" 
		name=\"formhash\" value=\"(.*?)\" />', content)
        if len(rows)!=0:
            self.formhash = rows[0]
            print 'formhash is: ' + self.formhash
        else:
            print 'none formhash!'
        rows = re.findall(r'<input id=.* type=\"radio\" name=\"qdxq\" 
		value=\"(.*?)\" style=\"display:none\">', content)
        if len(rows)!=0:
            self.xq = rows[0]
            print 'xq is: ' + self.xq
        elif u'已经签到' in content:
            self.isSign = True
            print 'signed before!'
        else:
            print 'none xq!'

    def reply(self, tid, subject = u'',msg = u'支持~~~顶一下下~~嘻嘻'):
        ''' 回帖 '''
        url = self.forumUrl + '/forum.php?mod=post&action=reply
		&fid=41&tid={}&extra=page%3D1&replysubmit=yes
		&infloat=yes&handlekey=fastpost&inajax=1'.format(tid)
        postData = urllib.urlencode({'formhash': self.formhash, 
		'message': msg.encode('gbk'), 
		'subject': subject.encode('gbk'), 
		'posttime':int(time.time()) })
        req = urllib2.Request(url,postData)
        content = urllib2.urlopen(req).read().decode('gbk')
        #print content
        if u'发布成功' in content:
            print 'reply success!'
        else:
            print 'reply faild!'

    def publish(self, fid, typeid, subject = u'发个帖子测试一下下,
		嘻嘻~~~',msg = u'发个帖子测试一下下,嘻嘻~~~'):
        ''' 发帖 '''
        url = self.forumUrl + '/forum.php?mod=post&action=newthread
		&fid={}&extra=&topicsubmit=yes'.format(fid)
        postData = urllib.urlencode({'formhash': self.formhash, 
		'message': msg.encode('gbk'), 'subject': subject.encode('gbk'),
		'posttime':int(time.time()), 'addfeed':'1', 
		'allownoticeauthor':'1', 'checkbox':'0', 'newalbum':'',
		'readperm':'', 'rewardfloor':'', 'rushreplyfrom':'', 
		'rushreplyto':'', 'save':'', 'stopfloor':'', 
		'typeid':typeid, 'uploadalbum':'', 'usesig':'1',
		'wysiwyg':'0' })
        req = urllib2.Request(url,postData)
        content = urllib2.urlopen(req).read().decode('gbk')
        #print content
        if subject in content:
            print 'publish success!'
        else:
            print 'publish faild!'

    def sign(self,msg = u'哈哈,我来签到了!'):
        ''' 签到 '''
        if self.isSign:
            return
        if self.isLogon and self.xq:
            url = self.forumUrl + '/plugin.php?id=dsu_paulsign:sign
		&operation=qiandao&infloat=1&inajax=1'
            postData = urllib.urlencode({'fastreply': '1',
		'formhash': self.formhash, 'qdmode': '1', 
		'qdxq': self.xq, 'todaysay':msg.encode('gbk') })
            req = urllib2.Request(url,postData)
            content = urllib2.urlopen(req).read().decode('gbk')
            #print content
            if u'签到成功' in content:
                self.isSign = True
                print 'sign success!'
                return
        print 'sign faild!'

    def speak(self,msg = u'hah,哈哈,测试一下!'):
        ''' 发表心情 '''
        url = self.forumUrl + '/home.php?mod=spacecp
		&ac=doing&handlekey=doing&inajax=1'
        postData = urllib.urlencode({'addsubmit': '1', 
		'formhash': self.formhash, 'referer': 'home.php',
		'spacenote': 'true', 'message':msg.encode('gbk') })
        req = urllib2.Request(url,postData)
        content = urllib2.urlopen(req).read().decode('gbk')
        #print content
        if u'操作成功' in content:
            print 'speak success!'
        else:
            print 'speak faild!'

if __name__ == '__main__':
    robot = Robot('http://www.jz-net.cn', 'thrbowl', '118')
    robot.login()
    #robot.sign()
    #robot.speak()
    robot.publish(92,51, u'头 痛 ', u""" 一位女士对医生说她头痛,
	医生建议她出嫁。过了一年,医生偶然遇见了这位女士:
	“喂,怎么?你出嫁了吗?”
    “谢谢,出嫁了。”
    “头还痛吗?”
    “不痛了,可我丈夫的头开始痛了。”""")
    #robot.reply(107137)

除非注明,文章为IT热血青年原创,欢迎转载!转载请注明本文地址,谢谢。
本文地址:http://blog.itblood.com/discuz-x2-5-automatic-posting-program.html

  1. 风中骄子
    2013年7月17日20:22 | #1

    你好,有Discuz! X3版本的自动登录 签到 发帖 回帖程序python程序吗?
    正在学习python,可以加Q详聊吗?136354553

  2. coolxll
    2013年10月4日21:34 | #2

    没有验证码还是很方便的

  3. 2015年2月8日22:41 | #3

    on

  1. 2014年10月15日15:47 | #1
  2. 2014年11月7日06:34 | #2
  3. 2014年11月13日04:56 | #3