wechatpy.client.api.tag   A
last analyzed

Complexity

Total Complexity 23

Size/Duplication

Total Lines 216
Duplicated Lines 0 %

Test Coverage

Coverage 52.83%

Importance

Changes 0
Metric Value
eloc 83
dl 0
loc 216
rs 10
c 0
b 0
f 0
ccs 28
cts 53
cp 0.5283
wmc 23

12 Methods

Rating   Name   Duplication   Size   Complexity  
A WeChatTag.create() 0 13 2
A WeChatTag.batch_black_list() 0 13 1
A WeChatTag.batch_unblack_list() 0 13 1
A WeChatTag.get_user_tag() 0 13 2
A WeChatTag.get() 0 14 2
A WeChatTag.iter_tag_users() 0 24 5
A WeChatTag.get_tag_users() 0 16 2
A WeChatTag.tag_user() 0 16 2
A WeChatTag.get_black_list() 0 16 2
A WeChatTag.update() 0 16 1
A WeChatTag.delete() 0 13 1
A WeChatTag.untag_user() 0 16 2
1
# -*- coding: utf-8 -*-
2 10
from __future__ import absolute_import, unicode_literals
3
4 10
from wechatpy.utils import to_text
5 10
from wechatpy.client.api.base import BaseWeChatAPI
6
7
8 10
class WeChatTag(BaseWeChatAPI):
9
10 10
    def create(self, name):
11
        """
12
        创建标签
13
14
        :param name: 标签名(30个字符以内)
15
        :return: 返回的 JSON 数据包
16
17
        """
18
        name = to_text(name)
19
        return self._post(
20
            'tags/create',
21
            data={'tag': {'name': name}},
22
            result_processor=lambda x: x['tag']
23
        )
24
25 10
    def get(self):
26
        """
27
        获取公众号已创建的标签
28
29
        :return: 所有标签列表
30
31
        """
32
33
        res = self._get(
34
            'tags/get',
35
            result_processor=lambda x: x['tags']
36
        )
37
38
        return res
39
40 10
    def update(self, tag_id, name):
41
        """
42
        编辑标签
43
44
        :param tag_id: 标签id,由微信分配
45
        :param name: 标签名字(30个字符以内)
46
        :return: 返回的 JSON 数据包
47
48
        """
49
        name = to_text(name)
50
        return self._post(
51
            'tags/update',
52
            data={
53
                'tag': {
54
                    'id': int(tag_id),
55
                    'name': name
56
                }
57
            }
58
        )
59
60 10
    def delete(self, tag_id):
61
        """
62
        删除标签
63
64
        :param tag_id: 标签 ID
65
        :return: 返回的 JSON 数据包
66
67
        """
68
        return self._post(
69
            'tags/delete',
70
            data={
71
                'tag': {
72
                    'id': tag_id
73
                }
74
            }
75
        )
76
77 10
    def tag_user(self, tag_id, user_id):
78
        """
79
        批量为用户打标签
80
81
        :param tag_id: 标签 ID
82
        :param user_id: 用户 ID, 可以是单个或者列表
83
84
        :return: 返回的 JSON 数据包
85
86
        """
87
        data = {'tagid': tag_id}
88
        if isinstance(user_id, (tuple, list)):
89
            data['openid_list'] = user_id
90
        else:
91
            data['openid_list'] = [user_id, ]
92
        return self._post('tags/members/batchtagging', data=data)
93
94 10
    def untag_user(self, tag_id, user_id):
95
        """
96
        批量为用户取消标签
97
98
        :param tag_id: 标签 ID
99
        :param user_id: 用户 ID, 可以是单个或者列表
100
101
        :return: 返回的 JSON 数据包
102
103
        """
104
        data = {'tagid': tag_id}
105
        if isinstance(user_id, (tuple, list)):
106
            data['openid_list'] = user_id
107
        else:
108
            data['openid_list'] = [user_id, ]
109
        return self._post('tags/members/batchuntagging', data=data)
110
111 10
    def get_user_tag(self, user_id):
112
        """
113
        获取用户身上的标签列表
114
115
        :param user_id: 用户 ID, 可以是单个或者列表
116
        :return: 返回的 JSON 数据包
117
        """
118
        return self._post(
119
            'tags/getidlist',
120
            data={
121
                'openid': user_id
122
            },
123
            result_processor=lambda x: x['tagid_list']
124
        )
125
126 10
    def get_tag_users(self, tag_id, first_user_id=None):
127
        """
128
        获取标签下粉丝列表
129
130
        :param tag_id: 标签 ID
131
        :param first_user_id: 可选。第一个拉取的 OPENID,不填默认从头开始拉取
132
        :return: 返回的 JSON 数据包
133
        """
134 10
        data = {
135
            'tagid': tag_id,
136
        }
137 10
        if first_user_id:
138 10
            data['next_openid'] = first_user_id
139 10
        return self._post(
140
            'user/tag/get',
141
            data=data
142
        )
143
144 10
    def iter_tag_users(self, tag_id, first_user_id=None):
145
        """
146
        获取标签下粉丝openid列表
147
148
        :return: 返回一个迭代器,可以用for进行循环,得到openid
149
150
        使用示例::
151
152
            from wechatpy import WeChatClient
153
154
            client = WeChatClient('appid', 'secret')
155
            for openid in client.tag.iter_tag_users(0):
156
                print(openid)
157
158
        """
159 10
        while True:
160 10
            follower_data = self.get_tag_users(tag_id, first_user_id)
161 10
            if 'data' not in follower_data:
162 10
                return
163 10
            for openid in follower_data['data']['openid']:
164 10
                yield openid
165 10
            first_user_id = follower_data.get('next_openid')
166 10
            if not first_user_id:
167
                return
168
169 10
    def get_black_list(self, begin_openid=None):
170
        """
171
        获取公众号的黑名单列表
172
        详情请参考
173
        https://mp.weixin.qq.com/wiki?id=mp1471422259_pJMWA
174
175
        :param begin_openid: 起始的 OpenID,传空则默认从头开始拉取
176
        :return: 返回的 JSON 数据包
177
        :rtype: dict
178
        """
179
        data = {}
180
        if begin_openid:
181
            data['begin_openid'] = begin_openid
182
        return self._post(
183
            'tags/members/getblacklist',
184
            data=data,
185
        )
186
187 10
    def batch_black_list(self, openid_list):
188
        """
189
        批量拉黑用户
190
        详情请参考
191
        https://mp.weixin.qq.com/wiki?id=mp1471422259_pJMWA
192
193
        :param openid_list: 批量拉黑用户的 OpenID list, 最多20个
194
        :type openid_list: list
195
        """
196
        return self._post(
197
            'tags/members/batchblacklist',
198
            data={
199
                'openid_list': openid_list,
200
            },
201
        )
202
203 10
    def batch_unblack_list(self, openid_list):
204
        """
205
        批量取消拉黑
206
        详情请参考
207
        https://mp.weixin.qq.com/wiki?id=mp1471422259_pJMWA
208
209
        :param openid_list: 批量取消拉黑的 OpenID list, 最多20个
210
        :type openid_list: list
211
        """
212
        return self._post(
213
            'tags/members/batchunblacklist',
214
            data={
215
                'openid_list': openid_list,
216
            },
217
        )
218