Python 使用飞书 API 获取子部门列表接口信息


前言

在企业开发中,经常需要同步飞书组织架构,例如:

  • 获取所有部门
  • 获取子部门信息
  • 同步员工组织结构
  • 做 OA / ERP / HR 系统集成

本文将使用 Python 调用飞书开放平台 API,实现:

  • 获取 Tenant Access Token
  • 获取子部门列表
  • 递归获取所有部门
  • 分页处理
  • 导出 Excel 表格

一、飞书开放平台准备

首先进入:

飞书开放平台https://open.feishu.cn?utm_source=chatgpt.com

创建:

  • 企业自建应用

二、申请权限

进入应用后台--->权限管理--->添加通讯录相关权限--->发布版本

三、安装依赖

执行:

复制代码
pip install requests pandas openpyxl python-dotenv

依赖说明:

作用
requests 请求 API
pandas 表格处理
openpyxl 导出 Excel
python-dotenv 读取 .env

四、配置 .env

项目根目录创建.env文件,在文件中配置App ID、App Secret

FEISHU_APP_ID=cli_xxxxxxxxx

FEISHU_APP_SECRET=xxxxxxxxxxxxxxxx

注意:

  • 不要加引号
  • 不要有空格

五、获取 Tenant Access Token

项目结构

project/

├── .env

├── requirements.txt

└── feishuAPI/

└── dept/

└── department_list.py

python 复制代码
from dotenv import load_dotenv
from pathlib import Path
import os
import requests

# =========================
# 自动定位 .env 文件
# =========================

# 当前 py 文件所在目录
BASE_DIR = Path(__file__).resolve().parent
# 上两级目录找到 .env
ENV_PATH = BASE_DIR.parent.parent / ".env"
# 加载环境变量
load_dotenv(ENV_PATH)


# 请求token信息
# 测试
app_id=os.getenv("FEISHU_APP_ID")
app_secret=os.getenv("FEISHU_APP_SECRET")

def token_request():
    token_json = {
        "app_id": app_id,
        "app_secret": app_secret
    }
    token_res = requests.post(token_url, json=token_json)
    token_json = token_res.json()

    if token_res.status_code == 200 and token_json.get("code") == 0:
        return token_json.get('tenant_access_token')
    else:
        return None

if __name__ == "__main__":
    info=token_request()
    print('access_token:',info)

六、获取子部门列表接口

设置默认分页50条

python 复制代码
# 分页获取部门子部门列表
def get_children_depts(access_token, department_id):
    all_children = []
    page_token = None
    while True:
        url = f"https://open.feishu.cn/open-apis/contact/v3/departments/{department_id}/children"
        headers = {"Authorization": f"Bearer {access_token}"}
        params = {"page_size": 50}  # 每页最多 50 条
        if page_token:
            params["page_token"] = page_token
        resp = requests.get(url, headers=headers, params=params).json()
        if resp.get("code") != 0:
            raise Exception(f"获取部门 {department_id} 子部门失败: {resp}")
        items = resp.get("data", {}).get("items", [])
        all_children.extend(items)
        page_token = resp.get("data", {}).get("page_token")
        if not page_token:
            break
    return all_children

七、递归获取所有部门

企业组织架构通常:

总公司

├── 技术部

│ ├── 后端组

│ └── 前端组

└── 财务部

因此需要递归获取。

python 复制代码
# 递归获取所有部门,并显示抓取进度
def get_all_departments(access_token, root_id="0"):
    all_depts = []

    def traverse(dept_id):
        children = get_children_depts(access_token, dept_id)
        for c in children:
            dept_info = {
                "department_id": c.get("department_id"),
                "name": c.get("name"),
                "parent_department_id": c.get("parent_department_id"),
                "chat_id": c.get("chat_id"),
                "leader_user_id": c.get("leader_user_id"),
            }
            all_depts.append(dept_info)

            print(f"正在抓取部门: {dept_info['name']} (ID: {dept_info['department_id']})")

            # 递归获取子部门
            traverse(c.get("open_department_id"))

    traverse(root_id)
    return all_depts

八、导出 Excel 表格

python 复制代码
import pandas as pd

departments = get_all_departments(token)

df = pd.DataFrame(departments)

df.to_excel(
    "feishu_departments.xlsx",
    index=False
)

print("Excel 导出成功")

表格内容:

department_id name parent_department_id
od-xxxx 技术部 0
od-xxxx 后端组 od-bXXXXXXXXXXXXXXXXXXXXXXXXXX
od-xxxx 前端组 od-6XXXXXXXXXXXXXXXXXXXXXXXXXX
相关推荐
meilindehuzi_a1 天前
深入浅出数据结构:Python 字典(Dict)与集合(Set)的哈希表底层全链路追踪
数据结构·python·散列表
Lucas凉皮1 天前
20243408 2025-2026-2 《Python程序设计》综合实践报告
python·实验报告
键盘上的猫头鹰1 天前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
薛定谔的猫-菜鸟程序员1 天前
2小时智能体开发一个智能体?我用CodeArts Agent 和 AtomCode 开发了一个适老化智能体。
人工智能·python·agent
bigfootyazi1 天前
python爬虫-基本库-urllib库(常用速查)
开发语言·爬虫·python
瑶总迷弟1 天前
使用 mis-tei 在昇腾310P上部署 bge-m3模型
pytorch·python·华为·语言模型·自然语言处理·cnn·unix
belong_my_offer1 天前
认识到精通函数
开发语言·python
卡次卡次11 天前
vibecoding起步注意点:插件、Skills、MCP、Hooks
服务器·数据库·python·oracle
我的xiaodoujiao1 天前
API 接口自动化测试详细图文教程学习系列24--如何用Pytest去设计接口测试用例并执行
python·学习·测试工具·pytest
zhangfeng11331 天前
ai 模型加密,强化版终极防盗方案 支持烧录的显卡列表
人工智能·pytorch·python