数码之家全操作机器人

从前的某一天,我发现数码优惠购版块里面有不少带回帖奖励的帖子,卧槽,当时就激动死了,然后自己在数码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(’

  • .?
  • 阅读’,html)[0][8:-16]
    **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("

  • .{1,8}:.{1,16}
  • ",self.read(self.host)):
    **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,见过的大站少),是有防火墙的!!注意代码中间插延时哦。。
    我在刷关注别人的时候被封了,大概关注了四百多个人,就被墙了

    :(完了,发出来又是乱七八糟的颜色了。。。

    :(喜讯,,我的数码之家账号因为水贴被封了