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
相关推荐
懂点Tech8 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate8 小时前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang8 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
川石课堂软件测试9 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
万化冥合9 小时前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
车软学堂9 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
天空依然蔚蓝9 小时前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
岁月宁静10 小时前
一个 AI 项目从本地到上线,要经过哪些步骤?全流程讲清楚
python·docker·agent
codists11 小时前
《crafting interpreters》阅读笔记:p45-p45
python
曲径海盗12 小时前
【Python 学习第 41 天】for 循环
python·学习笔记·编程入门