安徽11选五走势图:python:Discuz发帖器的实现

作者:网络 来源:佚名 更新时间:2009-11-13 00:45:55 点击:

安徽25选5直播 www.by7yj.cn 首先要清楚discuz论坛发帖的流程,简单地说就是以下流程:

进入登录页 ->登录 -> 进入版面 ->发帖

登录和发帖时要获取到页面的formhash值,否则会失败,如果启用了验证码,还得去分析验证码,这就比较复杂了。这里只用python来描述这一系列过程,涉及到验证码还请大家自行去实现。

 

#!/usr/bin/env python
#coding=utf-8
from urllib import urlencode
import cookielib, urllib2,urllib
import os,sys
import urllib2,cookielib,urllib,httplib,re
import getpass
import time
from queue import queue
import threading
class discuz:
def __init__(self,uid,pwd,debug = false,**param):
self.username = uid
self.password = pwd
self.para = param
#self.timelimit = timelimit
self.regex = {
loginreg:,
postreg:
}
self.opener = none
self.request = none
self.islogin = false
self.donecount = 0
self.__login()
self.threadcount = 10
def __login(self):
try:
loginpage = urllib2.urlopen(self.para[loginurl]).read()
formhash = re.search(self.regex[loginreg],loginpage)
formhash = formhash.group(1)
print start login......
cookiejar = cookielib.cookiejar()
self.opener = urllib2.build_opener(urllib2.httpcookieprocessor(cookiejar))
values = {
formhash:formhash,
username:self.username,
password:self.password,
loginsubmit:true
}
data = urllib.urlencode(values)
self.request = urllib2.request(self.para[loginsubmiturl], data)
rq = self.opener.open(self.request)
print login success......
self.islogin = true
except exception ,e:
print e
def post(self,subject,wysiwyg,content):
threads = []
for i in range(self.threadcount):
t = threading.thread(
target=self.__posttopic,
kwargs={_subject:subject,_wysiwyg:wysiwyg,_body:content}
)
threads.append(t)
for i in range(self.threadcount):
threads[i].start()
for i in range(self.threadcount):
threads[i].join()
print done
def __posttopic(self,**para):
if not self.islogin:
print please login......
return
while true:
try:
self.request = urllib2.request(self.para[posturl])
rq = self.opener.open(self.request)
data = rq.read()
formhash = re.search(self.regex[postreg],data)
formhash =  formhash.group(1)
postdata = {
addtags:+可用标签,
checkbox:0,
formhash:formhash,
iconid:,
message:para[_body],
subject:para[_subject],
tags:,
updateswfattach : 0,
wysiwyg : para[_wysiwyg]
}
self.request = urllib2.request(self.para[postsubmiturl],urllib.urlencode(postdata))
self.opener.open(self.request)
self.donecount+=1
print %d done..... % self.donecount
except exception,e:
print e
time.sleep(2)
if __name__==__main__:
name = raw_input(username:)
password = getpass.getpass(password:)
dz = discuz(name,password,
loginurl=//xxx/logging.php?action=login,
loginsubmiturl=//xxx/logging.php?action=login&loginsubmit=yes,
posturl=//xxx/post.php?action=newthread&fid=5,
postsubmiturl=//xxx/post.php?&action=newthread&fid=5&extra=&topicsubmit=yes)
content=这是帖子内容
dz.post(这是帖子内容,1,content)

discuz类中只有一个公开方法
def post(self,subject,wysiwyg,content)
三个参数,分别是帖子标题、是否是可视化编辑、帖子内容。
类实例化时会进行登录操作,并同时记录下cookie以备用,post方法中会启用多个线程执行私有方法__posttopic(self,**para)进行真正的发帖操作。
所以,基本上discuz生成的formhash就是一个鸡肋 -_-

  • 当蔚来照进现实 场地初试蔚来ES8 2019-06-25
  • 清明五一假期将至 韩国酒店为迎中国游客各出奇招 2019-06-24
  • 社会主义社会按劳分配是建立在公有制和私有制并存基础上的,共产主义社会按需分配是建立在公有制基础上的,所有制基础不同,其分配形式也就不同。所谓“共产主义... 2019-06-24
  • 编造传播虚假信息 “曹山石”被证监会处罚20万元 2019-06-23
  • 【新时代 新作为 新篇章】创新突破封锁线 2019-06-23
  • 90岁老夫妇也玩王者荣耀真人cosplay? 2019-06-23
  • 新疆举办高考招生咨询会 2019-06-23
  • 在强国论坛和新浪微博上也就说了几句国产80后伟大的钢琴家,嚯!粉丝不干了,邮箱里塞满男性女性生殖器的骂声和愤慨声。其实,真没有诋毁的意思。比如,美国一家男性内衣 2019-06-22
  • 共产党新闻网—资料中心—中国共产党重要会议 2019-06-22
  • “个十百千万”打造5G之城 “五横七纵”共筑产业联盟 2019-06-21
  • 倒着走能治腰颈椎痛?假的! 2019-06-21
  • 拥有大智慧的中国古人就把“子”和“女”结合在一体,造出一个会意字“好”字。一直就用这个“好”的感觉结果去衡量其它任何生存环境中的万物万事所给人的感觉。 2019-06-20
  • “ONE NIGHT 给小孩”北京站探访 周迅刘雯共奏可爱“交响曲” 2019-06-20
  • 人民网舆情分析专家:陈丽 2019-06-20
  • 图画书《一只特立独行的猪》用布艺风格讲故事 2019-06-19
  • 020期香江话特码 ag真人 江苏e球彩3场走势图 九十四期码报 中彩票是拿现金吗 贵州快三的开奖结果和值走势图 2019129专家绝杀红球 内蒙古11选5开奖结果笔 2014白姐透码诗全年 在线真人龙虎斗 彩票江西快3 江苏时时彩开奖视频直播 淘宝快3那里玩 河北体彩20选5 华东15选5胆拖计算器