最近有用到开源版的禅道系统,版本10.0,为了更方便地获取禅道信息,我参照官方的说明写了禅道api调用的脚本。由于网上能搜到的博客基本没有,我就把自己的成果分享一下。在此申明,此文章内容是我自己原创,并不涉及公司机密,同时请各位请尊重我的劳动成果。
废话不多说,直接上代码再解释吧。
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,提交需求,就需要与源码中的函数一一对应写函数传参数进行交互。
如果本文章对您有用别忘了点个赞,加收藏。如果想要更多的函数实现,请在评论区艾特我,或者私信我,另外欢迎找我交流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。