VERSION 1.0
本文檔介紹使用python和其他後台的web應用與maClient的通信方式
github:https://github.com/fffonion/maClient
maClientGUI:http://mac.yooooo.us/maClientGUI.zip
Python後台應用
典型的使用方法如下:
1 2 3 4 |
import maclient mac = maclient.maClient() xml=mac.login(uname='xxxx',pwd='xxxx') mac.initplayer(xml) |
初始化完成之後可以使用tasker來執行任務
1 |
mac.tasker('set_card factor|factor_battle') |
有關tasker的使用方法請參閱readme
其他後台的應用
你需要繼承並擴展maclient_remote類 除了下面提到的屬性和方法,其他內容是中間變量或被類自動管理,無需修改
屬性
name 名稱
home 應用的home url
status 啟動狀態
iprofile 保存了玩家信息
task 下一步maclient要執行的命令
方法
init
初始化時有四個須傳入的參數:name=”,home=”,statusloop=30,profileloop=180
分別為名稱(隨便取),應用的home url,查詢工作狀態的周期,上傳玩家信息的周期
也可以直接在__init__中賦值,這樣就不用在新建實例的時候傳入
每次工作狀態的檢查都只發生在maclient進行網絡操作時,這表示工作狀態的改變不一定會在設定的statusloop時間內反映在maclient中
login
當maclient的set_remote被調用後自動被執行,須返回一個元組,內容為(是否登錄成功,提示信息)
比如,可以在這個方法中得到一個cookie以供後續操作。無需顯式地處理cookie,maclient_remote自動使用得到的cookie
需要繼承maclient_remote的login方法
queryloop
查詢工作狀態的代碼,通過應用返回值來重新設定self.status,可選有STARTED,STOPPED
還可以設定self.task字符串,以通知maclient下一步要執行的命令
upload_profile
上傳玩家信息的代碼,玩家信息會被實時更新到self.iprofile字典中,目前可用的內容有ap_current, ap_max, bc_current, bc_max, gold
fckfairy
當玩家進行一次妖精戰時,本方法被調用一次,傳入一個名為fairy的object_dict,可得到fairy.name, fairy.lv, fairy.hp等屬性值
當需要網絡操作時,可以使用方法self.do(uri=”,param=”,method=’GET’),傳入uri,上傳的內容(POST或GET中分別表示post data和query string),方法(’POST’,’GET’),返回值為回調內容 已支持cookie
在maclient_plugin_test中可以是這樣的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import maclient_remote class test(maclient_remote.maRemote): def __init__(self,uname='',pwd=''): maRemote.__init__(self,name='test',home='http://abcd-maclient.rhcloud.com/',statusloop=30,profileloop=180) self.uname=uname self.pwd=hashlib.md5('123%s1232'%pwd).hexdigest() #return self.login() def login(self): res=self.do(uri='login.php',param=urllib.urlencode({'u':self.uname,'p':self.pwd},method='POST')) if res=='0': maclient_remote.maRemote.login(self) return True,'login successfully' return False,'login failed' def queryloop(self): res=self.do(uri='query.php')) #print res if res=='start': self._set_status(self.STARTED) elif res=='stop': self._set_status(self.STOPPED) def upload_profile(self): self.do(uri='profile.php',param=urllib.urlencode( {'AP':self.iprofile['ap_current'], 'BC':self.iprofile['bc_current']}, method='POST')) def fckfairy(self,fairy): self.do(uri='fairy.php')) |
在完成一個擴展的maclient_remote後(假設為maclient_plugin_test),你需要使用maclient(假設存在一個實例mac1)的set_remote方法綁定這個擴展
1 2 3 |
import maclient_plugin_test as test mpt=test.test(uname='test',pwd='test') mac1.set_remote(mpt) |