# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from wechatpy.utils import to_text
from wechatpy.client.api.base import BaseWeChatAPI
[文档]class WeChatTag(BaseWeChatAPI):
[文档] def create(self, name):
"""
创建标签
:param name: 标签名(30个字符以内)
:return: 返回的 JSON 数据包
"""
name = to_text(name)
return self._post(
'tags/create',
data={'tag': {'name': name}},
result_processor=lambda x: x['tag']
)
[文档] def get(self):
"""
获取公众号已创建的标签
:return: 所有标签列表
"""
res = self._get(
'tags/get',
result_processor=lambda x: x['tags']
)
return res
[文档] def update(self, tag_id, name):
"""
编辑标签
:param tag_id: 标签id,由微信分配
:param name: 标签名字(30个字符以内)
:return: 返回的 JSON 数据包
"""
name = to_text(name)
return self._post(
'tags/update',
data={
'tag': {
'id': int(tag_id),
'name': name
}
}
)
[文档] def delete(self, tag_id):
"""
删除标签
:param tag_id: 标签 ID
:return: 返回的 JSON 数据包
"""
return self._post(
'tags/delete',
data={
'tag': {
'id': tag_id
}
}
)
[文档] def tag_user(self, tag_id, user_id):
"""
批量为用户打标签
:param tag_id: 标签 ID
:param user_id: 用户 ID, 可以是单个或者列表
:return: 返回的 JSON 数据包
"""
data = {'tagid': tag_id}
if isinstance(user_id, (tuple, list)):
data['openid_list'] = user_id
else:
data['openid_list'] = [user_id, ]
return self._post('tags/members/batchtagging', data=data)
[文档] def untag_user(self, tag_id, user_id):
"""
批量为用户取消标签
:param tag_id: 标签 ID
:param user_id: 用户 ID, 可以是单个或者列表
:return: 返回的 JSON 数据包
"""
data = {'tagid': tag_id}
if isinstance(user_id, (tuple, list)):
data['openid_list'] = user_id
else:
data['openid_list'] = [user_id, ]
return self._post('tags/members/batchuntagging', data=data)
[文档] def get_user_tag(self, user_id):
"""
获取用户身上的标签列表
:param user_id: 用户 ID, 可以是单个或者列表
:return: 返回的 JSON 数据包
"""
return self._post(
'tags/getidlist',
data={
'openid': user_id
},
result_processor=lambda x: x['tagid_list']
)
[文档] def get_tag_users(self, tag_id, first_user_id=None):
"""
获取标签下粉丝列表
:param tag_id: 标签 ID
:param first_user_id: 可选。第一个拉取的 OPENID,不填默认从头开始拉取
:return: 返回的 JSON 数据包
"""
data = {
'tagid': tag_id,
}
if first_user_id:
data['next_openid'] = first_user_id
return self._post(
'user/tag/get',
data=data
)
[文档] def iter_tag_users(self, tag_id, first_user_id=None):
"""
获取标签下粉丝openid列表
:return: 返回一个迭代器,可以用for进行循环,得到openid
使用示例::
from wechatpy import WeChatClient
client = WeChatClient('appid', 'secret')
for openid in client.tag.iter_tag_users(0):
print(openid)
"""
while True:
follower_data = self.get_tag_users(tag_id, first_user_id)
if 'data' not in follower_data:
return
for openid in follower_data['data']['openid']:
yield openid
first_user_id = follower_data.get('next_openid')
if not first_user_id:
return
[文档] def get_black_list(self, begin_openid=None):
"""
获取公众号的黑名单列表
详情请参考
https://mp.weixin.qq.com/wiki?id=mp1471422259_pJMWA
:param begin_openid: 起始的 OpenID,传空则默认从头开始拉取
:return: 返回的 JSON 数据包
:rtype: dict
"""
data = {}
if begin_openid:
data['begin_openid'] = begin_openid
return self._post(
'tags/members/getblacklist',
data=data,
)
[文档] def batch_black_list(self, openid_list):
"""
批量拉黑用户
详情请参考
https://mp.weixin.qq.com/wiki?id=mp1471422259_pJMWA
:param openid_list: 批量拉黑用户的 OpenID list, 最多20个
:type openid_list: list
"""
return self._post(
'tags/members/batchblacklist',
data={
'openid_list': openid_list,
},
)
[文档] def batch_unblack_list(self, openid_list):
"""
批量取消拉黑
详情请参考
https://mp.weixin.qq.com/wiki?id=mp1471422259_pJMWA
:param openid_list: 批量取消拉黑的 OpenID list, 最多20个
:type openid_list: list
"""
return self._post(
'tags/members/batchunblacklist',
data={
'openid_list': openid_list,
},
)