从前的某一天,我发现数码优惠购版块里面有不少带回帖奖励的帖子,卧槽,当时就激动死了,然后自己在数码2级待的时间不短了,就开始水贴升级了
coding:utf-8
**import **re
**import **time
**import **urllib
**import **urllib2
**import **cookielib
**class *phpwind():
**def **init(self,url,username,password,jumpurl=""):
self.host=url
self.username=username
self.password=password
self.hash=re.findall("var verifyhash = '.?’;",urllib.urlopen(self.host).read())[0][18:-2]
self.loginurl=self.host+"/login.php?nowtime="+self.getCurrentTime()+"&verify=%s"%self.hash
self.siginurl=self.host+’/u.php’
self.siginsss=self.host+("/jobcenter.php?action=punch&verify=%s&nowtime="+self.getCurrentTime()+"&verify=%s")%(self.hash,self.hash)
self.jumpurl =jumpurl
**if **self.jumpurl==’’:
self.jumpurl=self.host+"/index.php"
self.cookie=cookielib.CookieJar()
self.opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))
获取当前时间
@staticmethod
**def ****getCurrentTime**():
**return **str(time.time()).replace(’.’,’’)+‘0’
# 登陆 返回值为布尔类型
**def *login(self):
postdata = urllib.urlencode({
‘ajax’: ‘1’,
‘cktime’: ‘31536000’,
‘jumpurl’: self.jumpurl,
‘lgt’: ‘0’,
‘pwpwd’: self.password,
‘pwuser’: self.username,
‘step’: ‘2’
})
self.opener.open(self.loginurl, postdata)
result=self.opener.open(self.jumpurl)
**if **len(re.findall(“var windid = '”+self.username+"’;",result.read())):
self.hash=re.findall('var verifyhash = '.?’;’,self.read(self.host))[0].split("’")[1]
print “login secuss”
**return **True
# print "login faild"
**return **False
# 带cookie读取页面吧
**def ****read**(self,url):
**return **self.opener.open(url).read().decode(‘gbk’).encode(‘utf-8’)
判断是否签到 返回值布尔类型
**def ****isSigin**(self):
**if **“每日打卡” **in **self.opener.open(self.siginurl).read().decode(‘gbk’).encode(‘utf-8’):
**return **False
**return **True
# 签到 返回值布尔类型
**def **sigin(self):
postdata = urllib.urlencode({
‘step’: ‘2’
})
**if **“你已经打卡,请明天再试” **in **self.opener.open(self.siginsss, postdata).read().decode(“gbk”).encode(“utf-8”):
**return **True
**return **False
# 获取版块帖子 返回值为列表
**def *getCard(self,fid,page):
result=]
**for **x **in **re.findall(’\w\W]?’,self.read(‘http://bbs.mydigit.cn/thread.php?fid=’+str(fid)+’&search=all&page=’+str(page))):
result.append((x.split(’"’)[1],x.split(’"’)-1][1:-4]))
**return **result
添加关注 添加成功为True,无法判断成功返回服务器字符串
**def ****addFollow**(self, uid):
result = self.read(‘http://bbs.mydigit.cn/pw_ajax.php?action=addattention&touid=’ + str(uid) + ‘&recommend=1&nowtime=’ + self.getCurrentTime() + ‘&verify=’ + self.hash)
**if **‘success’ **in **result:
**return **True
**if **‘不存在’ **in **result:
**return **False
**return **result
加好友 添加成功为True,无法判断成功返回服务器字符串
**def ****addFriend**(self,uid):
postdata=urllib.urlencode({
‘verify’ : self.hash,
‘job’ : ‘add’,
‘step’ : ‘2’,
‘touid’ : uid,
‘reload’ : ‘1’,
‘checkmsg’ : ‘’,
‘friendtype’ : ‘0’,
‘typename’ : ‘’
})
result = self.opener.open(‘http://bbs.mydigit.cn/pw_ajax.php?action=addfriend&nowtime=’+self.getCurrentTime()+’&verify=’+self.hash,postdata).read().decode(‘gbk’).encode('utf-8’)
**if **‘请求添加为好友,正在等待好友验证’ **in **result:
**return **True
**return **result
发送消息 返回服务器字符串
**def ****sendMessage**(self,username,title,text):
postdata=urllib.urlencode({
‘verify’:self.hash,
‘step’:‘2’,
‘pwuser’:username,
‘msg_title’:title.decode(‘utf-8’).encode(‘gbk’),
‘atc_content’:text.decode(‘utf-8’).encode(‘gbk’)
})
result = self.opener.open(‘http://bbs.mydigit.cn/pw_ajax.php?action=msg&nowtime=’ + self.getCurrentTime() + ‘&verify=’ + self.hash,postdata).read().decode(‘gbk’).encode(‘utf-8’)
**return **result
通过id获取用户名 用户不存在为False,存在为用户名
**def ****getNameById**(self, uid):
try:
**return **re.findall(’\w\W]*?’,self.read(‘http://bbs.mydigit.cn/u.php?uid=’+str(uid)))[0][22:-9]
except:
**return **False
# 取帖子回复数阅读数,刷沙发专用
**def getReplyAndRead(self,turl):
html=self.read(self.host+’/’ + turl)
reply=re.findall(’.?’,html)[0][25:-5]
read=re.findall(’
**return **int(reply),int(read)
回复帖子 能判断就为true,判断失败返回服务器字符串
**def ****reply**(self,addr,text):
**if **self.host **not in **addr:
addr=self.host+’/’+addr
html=self.read(addr)
hexie,verify,fid,title=self.getHiddenInfo(html)
postdata = urllib.urlencode({
’_hexie’ : hexie,
‘action’ : ‘reply’,
‘ajax’ : ‘1’,
‘atc_autourl’ : ‘1’,
‘atc_content’ : str(text).decode(‘utf-8’).encode(‘gbk’),
‘atc_convert’ : ‘’,
‘atc_title’ : ‘’,
‘atc_usesign’ : ‘1’,
‘cyid’ : ‘’,
‘fid’ : fid,
‘iscontinue’ : ‘0’,
‘isformchecked’: ‘1’,
‘step’ : ‘2’,
‘stylepath’ : ‘wind’,
‘tid’ : addr.split(‘tid’)[1].split(’&’)[0].split(’=’)[1],
‘type’ : ‘ajax_addfloor’,
‘usernames’ : ‘’,
‘verify’ : verify
})
repurl=self.host+’/post.php?fid=’+str(fid)+’&nowtime=’+self.getCurrentTime()+’&verify=’+verify
repdata=self.opener.open(repurl, postdata).read().decode(‘gbk’).encode(‘utf-8’)
return text in self.opener.open(reputl, postdata).read().decode(‘gbk’).encode(‘utf-8’)
**return **True **if **len(repdata)>1000 **or **'<?xml version="1.0" encoding="gbk"?><ajax><![CDATA[]]></ajax>' **in **repdata **else **repdata
return self.opener.open(reputl, postdata).read().decode(‘gbk’).encode(‘utf-8’)
# 获取回复需要隐藏参数
**def ****getHiddenInfo**(self,html):
string= re.findall(’
\w\W]?
’,html)[0]fid = string.split(’"’)[5].split(’?’)[1].split(‘fid’)-1].split(’=’)[1].split(’&’)[0]
title = string.split(’’)[1].split("<a")[0]
hexie = re.findall("document.FORM._hexie.value = '.?’;",html)[0].split("’")[1]
verify= re.findall(’’,html)[0].split(’"’)[3]
**return **hexie,verify,fid,title
评分 返回值布尔类型
**def ****score**(self,addr,text,num=1 ,reply=True):
**if **self.host **not in **addr:
addr=self.host+’/’+addr
html=self.read(addr)
verify=re.findall(’’,html)[0].split(’"’)[3]
postdata = urllib.urlencode({
‘addpoint]’ : str(num),
‘atc_content’ : str(text).decode(‘utf-8’).encode(‘gbk’),
‘cid]’ : ‘money’,
‘ifpost’ : ‘1’ **if **reply **else **‘0’,
‘page’ : ‘1’,
‘selid]’ : ‘tpc’,
‘step’ : ‘1’,
‘tid’ : addr.split(‘tid’)[1].split(’&’)[0].split(’=’)[1],
‘verify’ : verify
})
repurl = self.host+’/operate.php?action=showping&ajax=1&nowtime=’+self.getCurrentTime()+’&verify=’+verify
repdata = self.opener.open(repurl, postdata).read().decode(‘gbk’).encode(‘utf-8’)
**return **‘success’ **in **repdata
打印站点信息
**def ****pinfo**(self):
**print **’=====================================’
**print **‘站点名称: %s’%re.findall(".*?",self.read(self.host))[0][7:-8]
**print **‘用户: %s %s’%(self.username,“已经签到” **if **self.isSigin() **else **“并没有签到”)
**for **x **in **re.findall("
**print **x[4:-5]
**print **’=====================================’
上面是模块代码,下面说说怎么用a=phpwind(“http://bbs.mydigit.cn”,“username”,‘password’)
**if **a.login():
a.pinfo()
上面是登陆,签到
**print **a.getNameById(123)
这个会通过id获取名字,是用来加别人关注的(一部分人会互相关注你。。),用户不存在返回False
a.addFollow(123)上面这句是添加关注用户123
a.score(‘http://bbs.mydigit.cn/read.php?tid=1964462’,'厉害了我的小程序’,1,True)
这句是评分这个帖子,地址可以是/read开始的字符串,可以用getCard函数的返回值里面的元组里面的第一个值
a.reply(‘http://bbs.mydigit.cn/read.php?tid=1964462’,'厉害了我的小程序’)
这句是回复帖子我,我就用这个函数水贴,但是水贴注意时间,15秒之内只能回复一次
a.getCard(137,1) 这个是获取137版块的第一页 http://bbs.mydigit.cn/thread.php?fid=137&search=all 这个就是137版块,fid就是版块的号码,这个版块大家都是发的广告,乱回复估计也没问题,但是回复的内容不让是一样的
**for **page **in **xrange(1,500):
**for **addr,title **in **a.getCard(137,page)[1:]:
**print addr,title,a.reply(addr,title)
time.sleep(16)
这个是我平时水贴的代码,数码2级的时候每天水贴90,升级到1级的时候每天水贴一百
这个a.reply在水贴到达上限的时候,显示的是<?xml version="1.0" encoding="gbk"?>
根据等级不同,回复帖子的刷量也不同
看数码之家有个勋章是发给沙发的,,然后就有了getReplyAndRead这个函数用法是这样的for **page **in **xrange(1,500):
**for **addr,title **in **a.getCard(137,page)[1:]:
reply,read=a.getReplyAndRead(addr)
**if **reply==0:
**print **addr,title,a.reply(addr,title)
time.sleep(16) # 十五秒防水
**print **addr,title,reply,read
判断如果回复等于0就回复一下下
祝大家水贴愉快,当然还有一个小细节,数码之家作为比较大的网站(我lowbee,见过的大站少),是有防火墙的!!注意代码中间插延时哦。。
我在刷关注别人的时候被封了,大概关注了四百多个人,就被墙了