通过Python调用禅道API

(原创文章,转载请注明出处。)

公众号:诗泽园

禅道API接口,非REST接口

调试版本:11.3

百度出来的100%都用不了(本篇除外...)。于是自己修改了网上代码,先get session,再post登录,最后调用产品列表验证,实测通过。

 1 import requests
 2 import json
 3 
 4 class zentao_cli(object):
 5 
 6     session = None   #用于实现单例类,避免多次申请sessionID
 7     sid = None
 8 
 9     def __init__(self, url, account, password, override = False):
10         self.url = url
11         self.account = account
12         self.password = password
13         self.session_override = override
14         self.pages = {
15             "sid": "/api-getSessionID.json",    #获取sid的接口
16             "login": "/user-login.json?zentaosid={0}",  #登录的接口
17             "get_product_list": "/product-index-no.json",
18         }
19         self.s = None
20         self.sid = None
21 
22     def req_get(self, url):
23         #请求并返回结果
24         web = requests.get(url)
25         if web.status_code == 200:
26             resp = json.loads(web.content)
27             if resp.get("status") == "success":
28                 return True, resp
29             else:
30                 return False, resp
31 
32     def req_post(self, url, body):
33         #请求并返回结果
34         res = requests.post(url=url, data=body)
35         if res.status_code == 200:
36             resp = json.loads(res.content)
37             if resp.get("status") == "success":
38                 return True, resp
39             else:
40                 return False, resp
41 
42     def login(self):
43         if self.s is None:
44             if not self.session_override and zentao_cli.session is not None:
45                     self.s = zentao_cli.session
46                     self.sid = zentao_cli.sid
47             else:
48                 #新建会话
49                 self.s = requests.session()
50                 res, resp = self.req_get(self.url.rstrip("/") + self.pages["sid"])
51                 if res:
52                     print("获取sessionID成功")
53                     self.sid = json.loads(resp["data"])["sessionID"]
54                     zentao_cli.sid = self.sid
55                     body = {'account': self.account, 'password': self.password, 'keepLogin[]': 'on', 'referer':self.url.rstrip("/") + '/my/'}
56                     login_res, login_resp = self.req_post(self.url.rstrip("/") + self.pages["login"].format(self.sid), body)
57                     if login_res:
58                         print("登录成功")
59                         zentao_cli.session = self.s
60 
61 
62     def get_product_list(self):
63         req_url = self.url.rstrip("/") + self.pages["get_product_list"]
64         res, resp = self.req_get(req_url + "?zentaosid=" + self.sid)
65         if res:
66             data = resp['data']
67             products = json.loads(data)['products']
68             return products.keys(), products.values()
69 
70 
71 if __name__ == "__main__":
72     cli = zentao_cli("http://xxx/zentao", "xxx", "xxx")
73     cli.login()
74     print(cli.get_product_list())

 

posted on 2023-02-08 15:57  泽南-Alpha  阅读(502)  评论(0编辑  收藏  举报

导航