准备工作
Python 3 的环境
可以编辑.csv
格式文件的编辑器(比如 wps、Excel)
装有 API 调试工具(比如 Postman https://www.postman.com )
具有企业微信管理员的权限
- 获取
企业ID
- 获取
通讯录
的 API 接口Secret值
- 获取
客户
的 API 接口Secret值
如果不知道以上信息如何获取,可以通过企业微信的官方开发者中心页面进行关键词查找:https://developer.work.weixin.qq.com/
获取企业标签库里的客户标签 tag_id
通过企业ID
+ 客户Secret
获取access_token
作为调用接口凭证,在浏览器输入以下地址获取:
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
注:此处标注大写的单词ID
和SECRET
,为需要替换的变量,对应企业ID
和客户Secret
。
如图:
在 Postman 里通过 POST 接口回调获得标签的tag_id
# 请求方式:POST(HTTP)
# 请求地址:ACCESS_TOKEN 替换为刚才获取到的调用接口凭证信息(不要带引号)
https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token=ACCESS_TOKEN
如图:
把access_token
和需要批量打的标签对应的tag_id
找个记事本记下来,后面还会用到。
批量获取外部联系人(客户)的 userID
每个企业微信账号都有自己的客户,因此需要先找到对应账号的 ID,如图:
在 Postman 里通过 POST 接口回调获得外部联系人(客户)的userID
# 请求方式:POST(HTTPS)
# 请求地址:
https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=ACCESS_TOKEN
输入请求信息:
{
"userid_list":
[
"ZhangSan"
],
"cursor":"",
"limit":100
}
这里的ZhangSan
填写自己的企业微信账号ID,如图:
把待会需要批量打新标签的若干个userID
保存到名称为extuserid.csv
的表格里,格式如下:
一行一个 userID,注意保存的文件格式要是 .csv 格式。
创建批量打标签的 Python 脚本
新建一个wxusertag.py
的 Python 脚本文件,复制粘贴以下内容:
# coding=utf-8
import requests
import random
import json
import csv
import codecs
import xlrd
import os
from lxml import etree
import urllib3
# 将 ID 和 SECRET 替换成自己的企业ID和客户Secret
url1="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET"
headers={
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
url2=""
# 填写要打标签的对应企业微信号ID
userid='ZhangSan'
def getToken(url):
# 发送请求 有效期2个小时
resp = requests.request("GET", url, headers=headers)
# 设置解码方式
resp.encoding=resp.apparent_encoding
# 这里会用设置的解码方式解码
# html_source = resp.text
token = json.loads(resp.text)["access_token"]
return token
# 获取外部联系人(客户)信息 需要及时更换 user_ID
def getextuserid():
url3="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token="+getToken(url1)+"&userid="+userid
resp=requests.request("GET",url3, headers=headers)
# 设置解码方式
resp.encoding=resp.apparent_encoding
# 这里会用设置的解码方式解码
#html_source = resp.text
external_userid = json.loads(resp.text)["external_userid"]
print(external_userid)
return external_userid
# 获取刚才保存的 .csv 表格里的外部联系人(客户)user_ID
def getextuseridBycsv():
with open(r'extuserid.csv') as f:
f_csv=csv.reader(f)
# 创建一个list用来保存csv中的内容
buffer=[]
headers=next(f_csv)
for row in f_csv:
buffer.append(row[0])
#print(buffer)
f.close()
return buffer
def addlabel():
rows=[]
urllib3.disable_warnings()
#resp = requests.request("GET", url1, headers=headers)
# 设置解码方式
#resp.encoding=resp.apparent_encoding
# 这里会用设置的解码方式解码
#html_source = resp.text
#token = json.loads(resp.text)["access_token"]
# add_tag 的 id 获取企业标签库https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=17298
url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token="+getToken(url1)
# 通过企业微信账号 ID 来解析外部联系人的 user_ID
#extlist=list(getextuserid())
# 通过外部导入的外部联系人的 user_ID
extlist=list(getextuseridBycsv())
print(extlist)
for i in range(0,len(extlist)):
data = {
"userid": userid,
"external_userid": extlist[i],
# 将下面的 tag_id 替换成自己要批量添加的标签信息
"add_tag":["tag_id"],
"remove_tag":[]
}
data = json.dumps(data)
page = 0
response = requests.post(url = url,data=data ,headers =headers ,verify=False)
resultcode= json.loads(response.text)["errmsg"]
print("打标成功:"+resultcode)
if __name__=="__main__":
#getextuseridBycsv()
#getextuserid()
addlabel()
以上内容根据自己的实际需要修改好后即可保存,记得将脚本 .py 文件和用户ID列表的 .csv 文件保存在同一个文件夹里。
然后打开终端,进入这个文件夹目录下,执行以下命令:
python wxusertag.py
等待终端显示打标成功:ok
后,就可以通过企业微信客户端看到对应的若干用户已经添加上新标签了。
执行脚本的时候要注意:
- 脚本执行的内容有访问频率限制,每企业调用单个 cgi/api 不可超过1万次/分,15万次/小时
- 每个 IP 调用单个 cgi/api 不可超过2万次/分,60万次/小时,第三方应用提供商每 IP 调用单个 cgi/api 不可超过4万次/分,120万次/小时
- 如果是家庭宽带,可以通过重启路由器来快速更换 IP
以上。
内容参考来源:https://blog.csdn.net/zhaomengszu/article/details/121478225