from kivy.lang.builder import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
import requests
import time
import re
import threading
from kivy.uix.widget import Widget
from kivy.config import Config
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.uix.filechooser import FileChooserListView Config.set('kivy', 'default_font', [
'msgothic',
'DroidSansFallback.ttf']) tem = Builder.load_string('''
<TitleRow>
orientation: 'horizontal'
Label:
text:'name'
Label:
text:'level'
Label:
text:'map'
Label:
text:'attack'
Label:
text:'warn' <DataRow>
name:name
level:level
map:map
attack:attack
warn:warn
orientation: 'horizontal'
Label:
id:name
text:''
Label:
id:level
text:''
Label:
id:map
text:''
Label:
id:attack
text:''
Label:
id:warn
text:'' <SelectFile>
fc:fc
orientation:'vertical'
FileChooserListView
path:'./'
id:fc
size_hint_y:None
height:root.height*0.85
BoxLayout:
orientation:'horizontal'
Button:
size_hint_y:None
height:root.height*0.1
text:'confirm'
on_release:root.confirm(root.fc)
Button:
size_hint_y:None
height:root.height*0.1
text:'cancel'
on_release:root.parent.parent.parent.dismiss() <Check>
name:'check window'
run:run
fileaddr:fileaddr
orientation:'vertical'
TitleRow:
id:row1
DataRow:
id:row2
DataRow:
id:row3
DataRow:
id:row4
DataRow:
id:row5
DataRow:
id:row6
DataRow:
id:row7
DataRow:
id:row8
DataRow:
id:row9
DataRow:
id:row10
DataRow:
id:row11
BoxLayout:
orientation:'horizontal'
Button:
id:run
text:'run'
on_release:self.parent.parent.click(self)
disabled:False
Button:
id:reset
text:'reset'
on_release:self.parent.parent.reset()
Button:
id:fileaddr
size_hint_y:None
height:'40px'
addr:'test_file_addr'
text:'select account file'
on_release:self.parent.select(self)
''') class SelectFile(BoxLayout):
def confirm(self, instance):
file = str(instance.selection[0])
self.parent.parent.parent.parent.children[1].fileaddr.addr = file
self.parent.parent.parent.dismiss() class GetInfo(object):
def __init__(self, txtfile):
super(GetInfo, self).__init__()
with open(txtfile, 'r', encoding='utf-8') as f:
a = f.readlines()
f.close()
self.accounts = []
for account in a:
self.accounts.append(account.strip().split(','))
if len(self.accounts) > 13:
self.accounts = self.accounts[:13]
self.qty = len(self.accounts) def status(self, Check):
for i in range(self.qty):
Check.ids['row' + str(i + 2)].name.text = 'pending'
Check.ids['row' + str(i + 2)].level.text = 'pending'
Check.ids['row' + str(i + 2)].map.text = 'pending'
Check.ids['row' + str(i + 2)].attack.text = 'pending'
Check.ids['row' + str(i + 2)].warn.text = 'pending' def details(self, Check):
self.status(Check)
userinfo = []
for user in self.accounts:
try:
fcsrf = self.getcsrf()
time.sleep(1)
info = self.getinfo(user, fcsrf)
time.sleep(1)
except Exception as e:
info = ''
userinfo.append(eval(info)) results = []
for info in userinfo:
try:
warn = ''
if info['weight'] / info['maxweight'] > 0.5:
warn = warn + 'weight,'
if int(info['hp']) < 2:
warn = warn + 'died,'
if info['autoattack'] != 49:
warn = warn + 'no auto'
if warn == '':
warn = 'ok'
attack = 'yes_auto' if info['autoattack'] == 49 else 'no_auto'
result = [info['name'], info['base_level'], info['last_map'],attack, warn]
except Exception:
result = [None, None, None, None, None]
results.append(result) for i in range(self.qty):
try:
Check.ids['row'+ str(i+2)].name.text = str(results[i][0])
Check.ids['row'+ str(i+2)].level.text = str(results[i][1])
Check.ids['row'+ str(i+2)].map.text = str(results[i][2])
Check.ids['row'+ str(i+2)].attack.text = str(results[i][3])
Check.ids['row'+ str(i+2)].warn.text = str(results[i][4])
except Exception:
Check.ids['row' + str(i+2)].name.text = 'none'
Check.ids['row' + str(i+2)].level.text = 'none'
Check.ids['row' + str(i+2)].map.text = 'none'
Check.ids['row' + str(i+2)].attack.text = 'none'
Check.ids['row' + str(i+2)].warn.text = 'none'
Check.ids.reset.disabled = False
return True def getinfo(self, user, keys):
header = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,la;q=0.6,zh-TW;q=0.5',
'AlexaToolbar - ALX_NS_PH': 'AlexaToolbar / alx - 4.0.3',
'Connection': 'keep-alive',
'Cookie': keys[0],
'Content-Length': '125',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'www.zizi.cn',
'Origin': 'http://www.zizi.cn',
'Referer': 'http://www.zizi.cn/?r=mn/index',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36',
}
url = 'http://www.zizi.cn/?r=mn/search'
data = {
'_csrf': keys[1],
'Login[userid]': user[0],
'Login[user_pass]': user[1],
}
response = requests.post(url=url, headers=header, data=data)
content = response.content.decode('utf-8')
return content def getcsrf(self):
url = 'http://www.zizi.cn/?r=mn/index'
index = requests.get(url=url)
cookie = str(index.cookies)
patt = r'\ (.*)\ for'
cookie = re.findall(patt, cookie)[0]
index = index.content.decode('utf-8')
pattern = r'id=\"_csrf\"\ value=\"(.*)\"'
csrf = re.findall(pattern, index)[0]
return [cookie, csrf] class TitleRow(BoxLayout):
pass class DataRow(BoxLayout):
pass class Check(BoxLayout):
def click(self, obj):
file = self.fileaddr.addr
t = threading.Thread(target=GetInfo(file).details, args=[self])
t.start()
self.ids.reset.disabled = True
obj.disabled = True def reset(self):
for i in range(10):
self.ids['row'+str(i+2)].name.text = ''
self.ids['row'+str(i+2)].level.text = ''
self.ids['row'+str(i+2)].map.text = ''
self.ids['row'+str(i+2)].attack.text = ''
self.ids['row'+str(i+2)].warn.text = ''
self.ids.run.disabled = False
self.fileaddr.addr = '' def select(self, instance):
content = SelectFile()
self.popup = Popup(title="select file...", content=content,size_hint=(0.9, 0.9))
self.popup.open() class GameRo(App):
def build(self):
return Check() if __name__ == '__main__':
GameRo().run()