干货,调用api获取禅道需求列表等

最近有用到开源版的禅道系统,版本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,提交需求,就需要与源码中的函数一一对应写函数传参数进行交互。
如果本文章对您有用别忘了点个赞,加收藏。如果想要更多的函数实现,请在评论区艾特我,或者私信我,另外欢迎找我交流。

相关推荐