ezKit 1.4.2__py3-none-any.whl → 1.4.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ezKit/qywx.py ADDED
@@ -0,0 +1,156 @@
1
+ import json
2
+ import time
3
+
4
+ import requests
5
+
6
+
7
+ class QYWX(object):
8
+ """企业微信"""
9
+
10
+ """
11
+ 企业微信开发者中心
12
+
13
+ https://developer.work.weixin.qq.com/
14
+ https://developer.work.weixin.qq.com/document/path/90313 (全局错误码)
15
+
16
+ 参考文档:
17
+
18
+ https://www.gaoyuanqi.cn/python-yingyong-qiyewx/
19
+ https://www.jianshu.com/p/020709b130d3
20
+ """
21
+
22
+ url_prefix = 'https://qyapi.weixin.qq.com'
23
+ work_id: str | None = None
24
+ agent_id: str | None = None
25
+ agent_secret: str | None = None
26
+ access_token: str | None = None
27
+
28
+ def __init__(self, work_id: str | None, agent_id: str | None, agent_secret: str | None):
29
+ ''' Initiation '''
30
+ self.work_id = work_id
31
+ self.agent_id = agent_id
32
+ self.agent_secret = agent_secret
33
+
34
+ ''' 获取 Token '''
35
+ self.getaccess_token()
36
+
37
+ def getaccess_token(self) -> bool:
38
+ try:
39
+ _response = requests.get(f'{self.url_prefix}/cgi-bin/gettoken?corpid={self.work_id}&corpsecret={self.agent_secret}')
40
+ if _response.status_code == 200:
41
+ _result: dict = _response.json()
42
+ self.access_token = _result.get('access_token')
43
+ else:
44
+ self.access_token = None
45
+ return True
46
+ except:
47
+ return False
48
+
49
+ def get_agent_list(self) -> dict | None:
50
+ try:
51
+ self.getaccess_token() if self.access_token == None else next
52
+ _response = requests.get(f'{self.url_prefix}/cgi-bin/agent/list?access_token={self.access_token}')
53
+ if _response.status_code == 200:
54
+ _response_data: dict = _response.json()
55
+ if _response_data.get('errcode') == 42001:
56
+ self.getaccess_token()
57
+ time.sleep(1)
58
+ self.get_agent_list()
59
+ return _response_data
60
+ return {'response': _response.text}
61
+ except:
62
+ return None
63
+
64
+ def get_department_list(self, id) -> dict | None:
65
+ try:
66
+ self.getaccess_token() if self.access_token == None else next
67
+ _response = requests.get(f'{self.url_prefix}/cgi-bin/department/list?access_token={self.access_token}&id={id}')
68
+ if _response.status_code == 200:
69
+ _response_data: dict = _response.json()
70
+ if _response_data.get('errcode') == 42001:
71
+ self.getaccess_token()
72
+ time.sleep(1)
73
+ self.get_department_list(id)
74
+ return _response_data
75
+ return {'response': _response.text}
76
+ except:
77
+ return None
78
+
79
+ def get_user_list(self, id) -> dict | None:
80
+ try:
81
+ self.getaccess_token() if self.access_token == None else next
82
+ _response = requests.get(f'{self.url_prefix}/cgi-bin/user/list?access_token={self.access_token}&department_id={id}')
83
+ if _response.status_code == 200:
84
+ _response_data: dict = _response.json()
85
+ if _response_data.get('errcode') == 42001:
86
+ self.getaccess_token()
87
+ time.sleep(1)
88
+ self.get_user_list(id)
89
+ return _response_data
90
+ return {'response': _response.text}
91
+ except:
92
+ return None
93
+
94
+ def get_user_id_by_mobile(self, mobile) -> dict | None:
95
+ try:
96
+ self.getaccess_token() if self.access_token == None else next
97
+ _json_dict = {'mobile': mobile}
98
+ _json_string = json.dumps(_json_dict)
99
+ _response = requests.post(f'{self.url_prefix}/cgi-bin/user/getuserid?access_token={self.access_token}', data=_json_string)
100
+ if _response.status_code == 200:
101
+ _response_data: dict = _response.json()
102
+ if _response_data.get('errcode') == 42001:
103
+ self.getaccess_token()
104
+ time.sleep(1)
105
+ self.get_user_id_by_mobile(id)
106
+ return _response_data
107
+ return {'response': _response.text}
108
+ except:
109
+ return None
110
+
111
+ def get_user_info(self, id) -> dict | None:
112
+ try:
113
+ self.getaccess_token() if self.access_token == None else next
114
+ _response = requests.get(f'{self.url_prefix}/cgi-bin/user/get?access_token={self.access_token}&userid={id}')
115
+ if _response.status_code == 200:
116
+ _response_data: dict = _response.json()
117
+ if _response_data.get('errcode') == 42001:
118
+ self.getaccess_token()
119
+ time.sleep(1)
120
+ self.get_user_info(id)
121
+ return _response_data
122
+ return {'response': _response.text}
123
+ except:
124
+ return None
125
+
126
+ def send_text(self, users, message) -> dict | None:
127
+ """发送消息"""
128
+ """
129
+ 参考文档:
130
+
131
+ https://developer.work.weixin.qq.com/document/path/90235
132
+ """
133
+ try:
134
+ self.getaccess_token() if self.access_token == None else next
135
+ _json_dict = {
136
+ 'touser': users,
137
+ 'msgtype': 'text',
138
+ 'agentid': self.agent_id,
139
+ 'text': {'content': message},
140
+ 'safe': 0,
141
+ 'enable_id_trans': 0,
142
+ 'enable_duplicate_check': 0,
143
+ 'duplicate_check_interval': 1800
144
+ }
145
+ _json_string = json.dumps(_json_dict)
146
+ _response = requests.post(f'{self.url_prefix}/cgi-bin/message/send?access_token={self.access_token}', data=_json_string)
147
+ if _response.status_code == 200:
148
+ _response_data = _response.json()
149
+ if _response_data.get('errcode') == 42001:
150
+ self.getaccess_token()
151
+ time.sleep(1)
152
+ self.send_text(users, message)
153
+ return _response_data
154
+ return {'response': _response.text}
155
+ except:
156
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezKit
3
- Version: 1.4.2
3
+ Version: 1.4.3
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -7,15 +7,15 @@ ezKit/files.py,sha256=GoNdai3Ul0lg4wTkJAQm5kys1Sv3NCTNLIZlzHQKuZQ,12714
7
7
  ezKit/http.py,sha256=LTeyPVBm8deL_m-YRVW2O5w83-k3b1I1hU4cqkxS_B0,1845
8
8
  ezKit/mongo.py,sha256=VtiNgl_WAA7AtHLNBDlzbIrfOcO8zj8WqU9KKTNHNmU,1914
9
9
  ezKit/plots.py,sha256=QUtoVfZ49ZSNcY8gcQ2TYVkMjDDzoW-myMtqTi5WN2U,5322
10
+ ezKit/qywx.py,sha256=CJHlJbdesJxx2qk73Wq3P7c9a0LcrT_mOdQfAkObOws,6009
10
11
  ezKit/redis.py,sha256=pY4SPlcgQ7S8IeY2xoDpxy-xCZxzZQrQJNAoWRsC1dI,1773
11
12
  ezKit/reports.py,sha256=dBBggggCCLuk5YD6SjdUPuxTr3wiJojP3lA7dQfg6Pk,8898
12
13
  ezKit/sendemail.py,sha256=PItznLBcZ6Om8NU7rep69m3QNZ9YkmOovup7pPGyY58,4840
13
14
  ezKit/utils.py,sha256=HzScpKwVQ7VaZMvLiBbYaJkU8cNC8oQii65BGfQIZnI,46079
14
- ezKit/weixin.py,sha256=Sxm_yNEvcztFNCZyjZetVwqxoGoL2PJHlQABIWkd1pk,5075
15
15
  ezKit/xftp.py,sha256=qbCqFcGe22TDBSisj0Zoz78tnydDWoOfvywWpXdfaGw,6982
16
16
  ezKit/zabbix.py,sha256=EF0-tQ1FTMBqawXKf3JEoPYoAJmYENXXIm9T5ICSdHM,32345
17
- ezKit-1.4.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
18
- ezKit-1.4.2.dist-info/METADATA,sha256=T3sZsQqSHL7VMnToWLXWyNNKY1nr9NI4tGECkPad8tM,226
19
- ezKit-1.4.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
20
- ezKit-1.4.2.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
21
- ezKit-1.4.2.dist-info/RECORD,,
17
+ ezKit-1.4.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
18
+ ezKit-1.4.3.dist-info/METADATA,sha256=4trojSZ2NQV6UcRxnamJcpNSVqqnwJFZRF360rY7BKM,226
19
+ ezKit-1.4.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
20
+ ezKit-1.4.3.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
21
+ ezKit-1.4.3.dist-info/RECORD,,
ezKit/weixin.py DELETED
@@ -1,148 +0,0 @@
1
- import json
2
- import time
3
-
4
- import requests
5
-
6
-
7
- class WeiXin(object):
8
-
9
- '''
10
- 企业微信开发者中心
11
-
12
- https://developer.work.weixin.qq.com/
13
- https://developer.work.weixin.qq.com/document/path/90313 (全局错误码)
14
-
15
- 参考文档:
16
-
17
- https://www.gaoyuanqi.cn/python-yingyong-qiyewx/
18
- https://www.jianshu.com/p/020709b130d3
19
- '''
20
-
21
- _work_id, _agent_id, _agent_secret, _access_token = None, None, None, None
22
-
23
- def __init__(self, work_id, agent_id, agent_secret):
24
- ''' Initiation '''
25
- self._work_id = work_id
26
- self._agent_id = agent_id
27
- self._agent_secret = agent_secret
28
-
29
- ''' 获取 Token '''
30
- self.get_access_token()
31
-
32
- def get_access_token(self):
33
- _response = requests.get(f'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self._work_id}&corpsecret={self._agent_secret}')
34
- if _response.status_code == 200:
35
- _result = _response.json()
36
- self._access_token = _result.get('access_token')
37
- else:
38
- self._access_token = None
39
-
40
- def get_agent_list(self):
41
-
42
- self.get_access_token() if self._access_token == None else next
43
-
44
- _response = requests.get(f'https://qyapi.weixin.qq.com/cgi-bin/agent/list?access_token={self._access_token}')
45
-
46
- if _response.status_code == 200:
47
- _response_data = _response.json()
48
- if _response_data.get('errcode') == 42001:
49
- self.get_access_token()
50
- time.sleep(1)
51
- self.get_agent_list()
52
- return _response_data
53
- return {'response': _response.text}
54
-
55
- def get_department_list(self, id):
56
-
57
- self.get_access_token() if self._access_token == None else next
58
-
59
- _response = requests.get(f'https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={self._access_token}&id={id}')
60
-
61
- if _response.status_code == 200:
62
- _response_data = _response.json()
63
- if _response_data.get('errcode') == 42001:
64
- self.get_access_token()
65
- time.sleep(1)
66
- self.get_department_list(id)
67
- return _response_data
68
- return {'response': _response.text}
69
-
70
- def get_user_list(self, id):
71
-
72
- self.get_access_token() if self._access_token == None else next
73
-
74
- _response = requests.get(f'https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token={self._access_token}&department_id={id}')
75
-
76
- if _response.status_code == 200:
77
- _response_data = _response.json()
78
- if _response_data.get('errcode') == 42001:
79
- self.get_access_token()
80
- time.sleep(1)
81
- self.get_user_list(id)
82
- return _response_data
83
- return {'response': _response.text}
84
-
85
- def get_user_id_by_mobile(self, mobile):
86
-
87
- self.get_access_token() if self._access_token == None else next
88
-
89
- _json_dict = {'mobile': mobile}
90
-
91
- _json_string = json.dumps(_json_dict)
92
-
93
- _response = requests.post(f'https://qyapi.weixin.qq.com/cgi-bin/user/getuserid?access_token={self._access_token}', data=_json_string)
94
-
95
- if _response.status_code == 200:
96
- _response_data = _response.json()
97
- if _response_data.get('errcode') == 42001:
98
- self.get_access_token()
99
- time.sleep(1)
100
- self.get_user_id_by_mobile(id)
101
- return _response_data
102
- return {'response': _response.text}
103
-
104
- def get_user_info(self, id):
105
-
106
- self.get_access_token() if self._access_token == None else next
107
-
108
- _response = requests.get(f'https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={self._access_token}&userid={id}')
109
-
110
- if _response.status_code == 200:
111
- _response_data = _response.json()
112
- if _response_data.get('errcode') == 42001:
113
- self.get_access_token()
114
- time.sleep(1)
115
- self.get_user_info(id)
116
- return _response_data
117
- return {'response': _response.text}
118
-
119
- def send_text(self, users, message):
120
- '''
121
- https://developer.work.weixin.qq.com/document/path/90235
122
- '''
123
-
124
- self.get_access_token() if self._access_token == None else next
125
-
126
- _json_dict = {
127
- 'touser': users,
128
- 'msgtype': 'text',
129
- 'agentid': self._agent_id,
130
- 'text': {'content': message},
131
- 'safe': 0,
132
- 'enable_id_trans': 0,
133
- 'enable_duplicate_check': 0,
134
- 'duplicate_check_interval': 1800
135
- }
136
-
137
- _json_string = json.dumps(_json_dict)
138
-
139
- _response = requests.post(f'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self._access_token}', data=_json_string)
140
-
141
- if _response.status_code == 200:
142
- _response_data = _response.json()
143
- if _response_data.get('errcode') == 42001:
144
- self.get_access_token()
145
- time.sleep(1)
146
- self.send_text(users, message)
147
- return _response_data
148
- return {'response': _response.text}
File without changes
File without changes