API開放平臺場景示例:cursor、offset、limit分頁處理(郵件組、子賬號)
更新時(shí)間:
重要
風(fēng)險(xiǎn)提示:下述代碼在Python 3.11.9進(jìn)行的測試,用于生產(chǎn)環(huán)境之前請務(wù)必先做好測試。
一、cursor游標(biāo)分頁數(shù)據(jù)
從前一次調(diào)用的返回值中獲取“nextCursor”的值,作為下一次調(diào)用的請求參數(shù)。
以“批量獲取組織下組信息”為例
Python示例代碼
# -*- coding: utf-8 -*-
import requests
# 導(dǎo)入獲取訪問令牌的函數(shù),路徑根據(jù)實(shí)際情況進(jìn)行修改,或直接給access_token賦值用于測試
from api_demo.get_access_token import access_token
def list_mail_group(cursor):
"""
接口名稱:批量獲取組織下組信息,一次最多獲取 30 條數(shù)據(jù)
文檔:https://mailbestwisewords.com/openapi/index.html#/operations/alimailpb_ud_GroupService_ListGroups
參數(shù):
cursor (str): 用于分頁的游標(biāo)
返回:
返回包含組信息的JSON響應(yīng)
"""
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('請求參數(shù):', querystring)
print('返回參數(shù):', response.status_code, response.text)
print('##########################################################################')
return response.json()
def get_all_mail_group():
"""
獲取郵件組的基本信息
返回:
郵件組基本信息列表
"""
records = []
cursor = ""
# 定義類型映射
type_mapping = {
"STATIC": "靜態(tài)組",
"DEPARTMENT": "部門組",
"DYNAMIC": "動態(tài)組",
"USERGROUP": "群組",
"DING": "釘釘組"
}
# 定義狀態(tài)映射
status_mapping = {
"NORMAL": "正常",
"FREEZE": "凍結(jié)"
}
while True:
# 獲取數(shù)據(jù)
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']), # 如果沒有映射,則保留原值
'狀態(tài)': status_mapping.get(group['status'], group['status'])
}
records.append(record)
# 更新游標(biāo)
cursor = parsed_data["nextCursor"]
print(f'nextCursor={cursor}')
if not parsed_data["hasMore"]:
print(f'沒有更多數(shù)據(jù)')
break
return records
all_data = get_all_mail_group()
print(f'郵件組基本信息:{all_data}')
運(yùn)行結(jié)果
二、offset、limit偏移量分頁數(shù)據(jù)
第一次調(diào)用初始偏移量offset為0,limit數(shù)值為步長,下一次請求將從offset+limit的值作為新的起始值。
以“根據(jù)ID或email獲取用戶信息”為例
Python示例代碼
# -*- coding: utf-8 -*-
import requests
# 導(dǎo)入獲取訪問令牌的函數(shù),路徑根據(jù)實(shí)際情況進(jìn)行修改,或直接給access_token賦值用于測試
from api_demo.get_access_token import access_token
def get_department_members(offset, limit, v_depart_id):
"""
根據(jù)部門ID獲取部門成員
https://mailbestwisewords.com/openapi/index.html?spm=a2c4g.11186623.0.0.1fdf1742qtp0cA#/operations/alimailpb_ud_UserService_GetUser
:param offset: 分頁查詢的起始位置
:param limit: 每頁查詢的成員數(shù)量
:param v_depart_id: 部門ID
:return: 成員列表和總成員數(shù)
"""
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}')
# 將當(dāng)前頁的成員列表添加到總列表中
total_member_items.extend(member_items)
if len(total_member_items) >= total_members:
break
# 更新分頁查詢的起始位置
offset += limit
print(f'合計(jì):{total_members}個(gè)成員')
print(f'成員信息匯總:{total_member_items}')
運(yùn)行結(jié)果
文檔內(nèi)容是否對您有幫助?