某社区自动顶贴python源码
关注https://www.o200.cn自动化测试平台
#登录获取sessionkey 原来的已登录会失效
def get_key(phone,psw):
#密码加密
input_name = hashlib.md5()
input_name.update(psw.encode("utf-8"))
pswmd5=(input_name.hexdigest()).lower()
#设备码
c=["0","1","2","3","4","5","6","7","8","9","c","e","f","b","d"]
randcode=random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+"-"+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+"-"+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+"-"+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+"-"+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)+random.choice(c)
url="http://xxx.com/account/login/ANDROID/4.0?platform=2&gkey=000000&app_version=4.0.1.9.1&versioncode=309&market_id=tool_web&_key=&device_code=%5Bw%5D02%3A00%3A00%3A00%3A00%3A00%5Bd%5D"+randcode
header={"Content-Type":"application/x-www-form-urlencoded","User-Agent":"okhttp/3.8.1","Host":"xxx.com"}
param={"login_type":"2"}
param["account"]=phone
param["password"]=pswmd5
res=requests.post(url,data=param,headers=header)
if "avatar" in res.text:
key=re.findall(r'key":"(.+?)"',res.text)
key=key[0]
return key,randcode
else:
return "loginfail"
下面调用上面的登录方法获得到sessionkey
#执行顶贴
@csrf_exempt
def hlxrun(request):
uname=request.session.get("username","")
user_exist=bkuser.objects.filter(bkuser_name=uname)
admin_exist=bkadmin.objects.filter(bkadmin_name=uname)
if user_exist:
userinfo=bkuser.objects.get(bkuser_name=uname)
hconf=hlxconf.objects.get(hlxtoplinkuser_id=userinfo.id)
if request.method=="POST":
phone=request.POST.get("phone")
psw=request.POST.get("psw")
postid=request.POST.get("postid")
content=request.POST.get("content")
tophour=request.POST.get("tophour")
topmin=request.POST.get("topmin")
topsec=request.POST.get("topsec")
rands=request.POST.get("rands")
rande=request.POST.get("rande")
loginres=get_key(phone,psw)
#校验
hourinfo=""
minuteinfo=""
secondinfo=""
if tophour =="0":
hourinfo=0
if tophour !="0":
hourinfo=tophour
if topmin =="0":
minuteinfo=0
if topmin !="0":
minuteinfo=topmin
if topsec =="0":
secondinfo=0
if topsec !="0":
secondinfo=topsec
if phone=="":
return HttpResponse('{"topcode":"phonefail"}',content_type="application/json")
elif psw=="":
return HttpResponse('{"topcode":"pswfail"}',content_type="application/json")
elif postid=="" or (not (re.findall(r"^\d+$",str(postid)))):
return HttpResponse('{"topcode":"idfail"}',content_type="application/json")
elif content=="":
return HttpResponse('{"topcode":"contentfail"}',content_type="application/json")
elif not (re.findall(r"^\d+$",str(tophour))) or int(tophour)<0 or int(tophour)>23:
return HttpResponse('{"topcode":"hourfail"}',content_type="application/json")
elif not (re.findall(r"^\d+$",str(topmin))) or int(topmin)<0 or int(topmin)>59:
return HttpResponse('{"topcode":"minfail"}',content_type="application/json")
elif not (re.findall(r"^\d+$",str(topsec))) or int(topsec)<0 or int(topsec)>59:
return HttpResponse('{"topcode":"secfail"}',content_type="application/json")
elif int(tophour)==int(topmin)==int(topsec)==0:
return HttpResponse('{"topcode":"zerofail"}',content_type="application/json")
elif hconf.hlxtop_status==0:
return HttpResponse('{"topcode":"noAuthority"}',content_type="application/json")
elif not re.findall(r"【.+?】",str(content)):
return HttpResponse('{"topcode":"refail"}',content_type="application/json")
elif rands=="" or rande=="":
return HttpResponse('{"topcode":"randnull"}',content_type="application/json")
elif (not re.findall(r"^[0-9]\d*$",rands)) or (not re.findall(r"^[0-9]\d*$",rande)):
return HttpResponse('{"topcode":"randint"}',content_type="application/json")
elif rande<rands:
return HttpResponse('{"topcode":"randsmall"}',content_type="application/json")
elif loginres=="loginfail":
return HttpResponse('{"topcode":"loginfail"}',content_type="application/json")
else:
key=loginres[0]
devicecode=loginres[1]
topinfo=hlxtopinfo.objects.filter(hlxtopinfolinkuser_id=userinfo.id)
if topinfo:
topinfo=hlxtopinfo.objects.get(hlxtopinfolinkuser_id=userinfo.id)
topinfo.hlxtopinfo_postid=postid
topinfo.hlxtopinfo_content=content
topinfo.hlxtopinfo_hour=tophour
topinfo.hlxtopinfo_minute=topmin
topinfo.hlxtopinfo_second=topsec
topinfo.hlxtopinfo_status=1
topinfo.hlxtopinfo_sessionkey=key
topinfo.hlxtopinfo_phone=phone
topinfo.hlxtopinfo_psw=psw
topinfo.hlxtopinfo_randstart=rands
topinfo.hlxtopinfo_randend=rands
topinfo.save()
#执行定时器
sched.add_job(trigger='interval',func=hlx_top,args=[postid,content,devicecode,key,rands,rande],hours=int(hourinfo),minutes=int(minuteinfo),seconds=int(secondinfo),id="hlx_"+uname)
return HttpResponse('{"topcode":"success"}',content_type="application/json")
else:
hlxtopinfo.objects.get_or_create(hlxtopinfo_postid=postid,
hlxtopinfo_content=content,
hlxtopinfolinkuser_id=userinfo.id,
hlxtopinfo_hour=tophour,
hlxtopinfo_minute=topmin,
hlxtopinfo_second=topsec,
hlxtopinfo_status=1,
hlxtopinfo_sessionkey=key,
hlxtop_name="hlx_"+uname,
hlxtopinfo_phone=phone,
hlxtopinfo_psw=psw,
hlxtopinfo_randstart=rands,
hlxtopinfo_randend=rande
)
sched.add_job(trigger='interval',func=hlx_top,args=[postid,content,devicecode,key,rands,rande],hours=int(hourinfo),minutes=int(minuteinfo),seconds=int(secondinfo),id="hlx_"+uname)
return HttpResponse('{"topcode":"success"}',content_type="application/json")
elif admin_exist:
return redirect("/boss/")
else:
return redirect("/login/")
定时器执行顶贴任务
def hlx_top(postid,content,devicecode,key,rands,rande):
tsleep=random.randint(int(rands),int(rande))
time.sleep(tsleep)
url="http://xxx.com/comment/create/ANDROID/2.0?platform=2&gkey=000000&app_version=4.0.1.9.1&versioncode=309&market_id=tool_web&_key="+key+"&device_code=%5Bw%5D02%3A00%3A00%3A00%3A00%3A00%5Bd%5D"+devicecode
header={"Content-Type":"application/x-www-form-urlencoded","User-Agent":"okhttp/3.8.1","Host":"xxx.com"}
param={"comment_id":"0","patcha":"","images":"","remindUsers":""}
param["post_id"]=postid
contentlist=re.findall(r"【(.+?)】",content)
#随机取回复列表的值
con=random.choice(contentlist)
cont=parse.quote(con)
param["text"]=cont
test=requests.post(url,data=param,headers=header)
print(test.text)
有执行就有暂停就是kill掉任务就行
#暂停顶贴
@csrf_exempt
def hlxstop(request):
uname=request.session.get("username","")
user_exist=bkuser.objects.filter(bkuser_name=uname)
admin_exist=bkadmin.objects.filter(bkadmin_name=uname)
if user_exist:
userinfo=bkuser.objects.get(bkuser_name=uname)
if request.method=="POST":
#状态改为0
hlxinfo=hlxtopinfo.objects.get(hlxtopinfolinkuser_id=userinfo.id)
hlxinfo.hlxtopinfo_status=0
hlxinfo.save(update_fields=["hlxtopinfo_status"])
#暂停顶贴
sched.remove_job("hlx_"+uname)
return HttpResponse('{"topcode":"success"}',content_type="application/json")
elif admin_exist:
return redirect("/boss/")
else:
return redirect("/login/")
比如有到期时间的话就得实时校验是否过期
#顶贴时间过期校验
def checkhlxtop():
hlxtopall=hlxconf.objects.filter()
for topone in hlxtopall:
userinfo=bkuser.objects.get(id=topone.hlxtoplinkuser_id)
todaytime=datetime.datetime.now()
offset = datetime.timedelta(hours=8) #服务器时间少8小时
re_date = (todaytime + offset).strftime('%Y-%m-%d %H:%M:%S')
re_date=datetime.datetime.strptime(re_date,"%Y-%m-%d %H:%M:%S")
re_date=datetime.datetime.strftime(re_date,"%Y%m%d%H%M%S")
endtime=datetime.datetime.strftime(topone.hlxtop_endtime,"%Y%m%d%H%M%S")
# 权限过期
if int(re_date)>=int(endtime):
# 用户权限关闭
topone.hlxtop_status=0
topone.save(update_fields=["hlxtop_status"])
#任务权限关闭
taskone=hlxtopinfo.objects.filter(hlxtopinfolinkuser_id=topone.hlxtoplinkuser_id)
if taskone:
taskone=hlxtopinfo.objects.get(hlxtopinfolinkuser_id=topone.hlxtoplinkuser_id)
if taskone.hlxtopinfo_status==1:
taskone.hlxtopinfo_status=0
taskone.save(update_fields=["hlxtopinfo_status"])
#任务移除
sched.remove_job("hlx_"+userinfo.bkuser_name)
接口自动化https://www.o200.cn
本文地址:https://blog.csdn.net/zfs1570/article/details/110421458
上一篇: 你所不知道的肉类的蛋白质含量
下一篇: 果皮作用大,其实吃苹果可以不削皮你知道吗