最近有用到開源版的禪道系統,版本10.0,爲了更方便地獲取禪道信息,我參照官方的說明寫了禪道api調用的腳本。因爲網上能搜到的博客基本沒有,我就把本身的成果分享一下。在此申明,此文章內容是我本身原創,並不涉及公司機密,同時請各位請尊重個人勞動成果。php
廢話很少說,直接上代碼再解釋吧。web
import requests import json class Zentao_cli(object): session = None #用於實現單例類,避免屢次申請sessionID sid = None def __init__(self, url, account, password, override = False): self.url = url self.account = account #帳號 self.password = password #密碼 self.session_override = override #是否覆蓋原會話 self.pages = { "sid": "/index.php?m=api&f=getSessionID&t=json", #獲取sid的接口 "login": "/index.php?t=json&m=user&f=login&account={0}&password={1}&sid={2}", #登陸的接口 "get_story_list_by_projectID": "/index.php?t=json&m=story&f=ajaxGetProjectStories&projectID={0}", "get_story_list_by_account": "/index.php?" } self.s = None self.sid = None def req(self,url): #請求並返回結果 web = self.s.get(url) if web.status_code == 200: resp = json.loads(web.content) if resp.get("status") == "success": return True, resp else: return False, resp def login(self): if self.s is None: if not self.session_override and Zentao_cli.session is not None: self.s = Zentao_cli.session self.sid = Zentao_cli.sid else: #新建會話 self.s = requests.session() res, resp = self.req(self.url.rstrip("/") + self.pages["sid"]) if res: print("獲取sessionID成功") self.sid = json.loads(resp["data"])["sessionID"] Zentao_cli.sid = self.sid login_res, login_resp = self.req(self.url.rstrip("/") + self.pages["login"].format(self.account, self.password, self.sid)) if login_res: print("登陸成功") Zentao_cli.session = self.s def get_story_list_by_projectID(self, projectID): #根據projectID獲取需求列表 req_url = self.url.rstrip("/") + self.pages["get_story_list_by_projectID"].format(str(projectID)) web = self.s.get(req_url) if web.status_code == 200: resp = json.loads(web.content.decode()) for k,v in resp.items(): print(k,v) if __name__ == "__main__": cli = Zentao_cli("http://192.168.xx.xx/zentao", "xxxxxx", "xxxxxx123") cli.login() cli.get_story_list_by_projectID(17)
並無依賴太多的庫,只用了經常使用的requests和json模塊,api調用的接口是從源碼中找到的。類初始化的時候只須要傳入禪道地址,賬號名,密碼,而後調用獲取的方法就好了。若是要作更多的操做,好比獲取bug列表,提交bug,提交需求,就須要與源碼中的函數一一對應寫函數傳參數進行交互。
若是本文章對您有用別忘了點個贊,加收藏。若是想要更多的函數實現,請在評論區艾特我,或者私信我,另外歡迎找我交流。ajax