重要
风险提示:下述代码在Python 3.11.9进行的测试,用于生产环境之前请务必先做好测试。
一、cursor游标分页数据
从前一次调用的返回值中获取“nextCursor”的值,作为下一次调用的请求参数。
以“批量获取组织下组信息”为例
Python示例代码
# -*- coding: utf-8 -*-
import requests
# 导入获取访问令牌的函数,路径根据实际情况进行修改,或直接给access_token赋值用于测试
from api_demo.get_access_token import access_token
def list_mail_group(cursor):
"""
接口名称:批量获取组织下组信息,一次最多获取 30 条数据
文档:https://mailhelp.aliyun.com/openapi/index.html#/operations/alimailpb_ud_GroupService_ListGroups
参数:
cursor (str): 用于分页的游标
返回:
返回包含组信息的JSON响应
"""
url = "https://alimail-cn.aliyuncs.com/v2/groups"
querystring = {"cursor": cursor, "size": "100", "orderby": "DES"}
headers = {'Content-Type': 'application/json', 'Authorization': 'bearer ' + access_token}
response = requests.request("GET", url, headers=headers, params=querystring)
print('##########################################################################')
print('请求参数:', querystring)
print('返回参数:', response.status_code, response.text)
print('##########################################################################')
return response.json()
def get_all_mail_group():
"""
获取邮件组的基本信息
返回:
邮件组基本信息列表
"""
records = []
cursor = ""
# 定义类型映射
type_mapping = {
"STATIC": "静态组",
"DEPARTMENT": "部门组",
"DYNAMIC": "动态组",
"USERGROUP": "群组",
"DING": "钉钉组"
}
# 定义状态映射
status_mapping = {
"NORMAL": "正常",
"FREEZE": "冻结"
}
while True:
# 获取数据
parsed_data = list_mail_group(cursor)
print(f'hasMore={parsed_data["hasMore"]}')
# 提取所需字段
for group in parsed_data['groups']:
record = {
'邮件组名称': group['name'],
'邮件组地址': group['email'],
'邮件组类型': type_mapping.get(group['type'], group['type']), # 如果没有映射,则保留原值
'状态': status_mapping.get(group['status'], group['status'])
}
records.append(record)
# 更新游标
cursor = parsed_data["nextCursor"]
print(f'nextCursor={cursor}')
if not parsed_data["hasMore"]:
print(f'没有更多数据')
break
return records
all_data = get_all_mail_group()
print(f'邮件组基本信息:{all_data}')
运行结果
二、offset、limit偏移量分页数据
第一次调用初始偏移量offset为0,limit数值为步长,下一次请求将从offset+limit的值作为新的起始值。
以“根据ID或email获取用户信息”为例
Python示例代码
# -*- coding: utf-8 -*-
import requests
# 导入获取访问令牌的函数,路径根据实际情况进行修改,或直接给access_token赋值用于测试
from api_demo.get_access_token import access_token
def get_department_members(offset, limit, v_depart_id):
"""
根据部门ID获取部门成员
https://mailhelp.aliyun.com/openapi/index.html?spm=a2c4g.11186623.0.0.1fdf1742qtp0cA#/operations/alimailpb_ud_UserService_GetUser
:param offset: 分页查询的起始位置
:param limit: 每页查询的成员数量
:param v_depart_id: 部门ID
:return: 成员列表和总成员数
"""
url = "https://alimail-cn.aliyuncs.com/v2/departments/" + v_depart_id + "/users"
querystring = {"offset": offset, "limit": limit}
headers = {'Content-Type': 'application/json', 'Authorization': 'bearer ' + access_token}
response = requests.request("GET", url, headers=headers, params=querystring)
v_members = response.json()
v_total_member = v_members["total"]
v_member_items = v_members["users"]
return v_member_items, v_total_member
offset = 0
limit = 100
department_id = '-----J----.LgfiSm:2:----.MNjFBE'
total_member_items = []
print('##########################################################################')
print(f'开始查询:{department_id}')
while True:
member_items, total_members = get_department_members(offset, limit, department_id)
print(f'成员:第{(offset // limit) + 1}页:{member_items}')
# 将当前页的成员列表添加到总列表中
total_member_items.extend(member_items)
if len(total_member_items) >= total_members:
break
# 更新分页查询的起始位置
offset += limit
print(f'合计:{total_members}个成员')
print(f'成员信息汇总:{total_member_items}')
运行结果
文档内容是否对您有帮助?