Discuz教程网

Discuz X2论坛的机器人程序,实现了登录,签到,发贴及回帖等功能

[复制链接]
authicon dly 发表于 2012-8-3 20:20:47 | 显示全部楼层 |阅读模式
Discuz!论坛的机器人程序,实现了登录,签到,发贴及回帖等功能

Discuz! X2 下测试通过
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. ''' DiscuzRobot - Discuz!论坛的机器人程序,实现了登录,签到,发贴及回帖等功能
  4. by Conanca
  5. '''

  6. import urllib2, urllib, cookielib, re, time

  7. class DiscuzRobot:

  8. def __init__(self, forumUrl, userName, password, proxy = None):
  9. ''' 初始化论坛url、用户名、密码和代理服务器 '''
  10. self.forumUrl = forumUrl
  11. self.userName = userName
  12. self.password = password
  13. self.formhash = ''
  14. self.isLogon = False
  15. self.isSign = False
  16. self.xq = ''
  17. self.jar = cookielib.CookieJar()
  18. if not proxy:
  19. openner = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.jar))
  20. else:
  21. openner = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.jar), urllib2.ProxyHandler({'http' : proxy}))
  22. urllib2.install_opener(openner)

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

  35. def initFormhashXq(self):
  36. ''' 获取formhash和心情 '''
  37. content = urllib2.urlopen(self.forumUrl + '/plugin.php?id=dsu_paulsign:sign').read().decode('gbk')
  38. rows = re.findall(r'<input type="hidden" name="formhash" value="(.*?)" />', content)
  39. if len(rows)!=0:
  40. self.formhash = rows[0]
  41. print 'formhash is: ' + self.formhash
  42. else:
  43. print 'none formhash!'
  44. rows = re.findall(r'<input id=.* type="radio" name="qdxq" value="(.*?)" style="display:none">', content)
  45. if len(rows)!=0:
  46. self.xq = rows[0]
  47. print 'xq is: ' + self.xq
  48. elif u'已经签到' in content:
  49. self.isSign = True
  50. print 'signed before!'
  51. else:
  52. print 'none xq!'

  53. def reply(self, tid, subject = u'',msg = u'支持~~~顶一下下~~嘻嘻'):
  54. ''' 回帖 '''
  55. 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)
  56. postData = urllib.urlencode({'formhash': self.formhash, 'message': msg.encode('gbk'), 'subject': subject.encode('gbk'), 'posttime':int(time.time()) })
  57. req = urllib2.Request(url,postData)
  58. content = urllib2.urlopen(req).read().decode('gbk')
  59. #print content
  60. if u'发布成功' in content:
  61. print 'reply success!'
  62. else:
  63. print 'reply faild!'

  64. def publish(self, fid, typeid, subject = u'发个帖子测试一下下,嘻嘻~~~',msg = u'发个帖子测试一下下,嘻嘻~~~'):
  65. ''' 发帖 '''
  66. url = self.forumUrl + '/forum.php?mod=post&action=newthread&fid={}&extra=&topicsubmit=yes'.format(fid)
  67. 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' })
  68. req = urllib2.Request(url,postData)
  69. content = urllib2.urlopen(req).read().decode('gbk')
  70. #print content
  71. if subject in content:
  72. print 'publish success!'
  73. else:
  74. print 'publish faild!'

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

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

  101. if __name__ == '__main__':
  102. robot = DiscuzRobot('http://bbs.xxx.com', 'username', 'userpwd')
  103. robot.login()
  104. robot.sign()
  105. robot.speak()
  106. robot.publish(41,36)
  107. robot.reply(107137)
复制代码




上一篇:登陆Discuz 类型论坛的通用python代码
下一篇:discuz的image类使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2024-6-18 22:16

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表