乾貨,調用api獲取禪道需求列表等

最近有用到開源版的禪道系統,版本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

相關文章
相關標籤/搜索