docs: 添加技术分享文档 - 钉钉群聊飞书文档收集与知识库构建

- 完整的技术架构说明
- 详细的工具配置指南
- 关键代码示例
- 部署和使用指南
- 经验总结和最佳实践

文档内容:
1. 项目概述与成果
2. 技术架构与流程
3. 详细技术方案(dws + lark-cli + Python)
4. 关键代码示例
5. 配置与部署指南
6. 关键经验与最佳实践
7. 使用指南与扩展方向
This commit is contained in:
Evilom
2026-06-03 11:06:10 +08:00
parent 0a2a2e811a
commit 5616622a05
+307
View File
@@ -0,0 +1,307 @@
# 钉钉群聊飞书文档收集与知识库构建 - 技术分享
> 分享人:大师 | 日期:2026-06-03 | 版本:v1.0
---
## 一、项目概述
### 1.1 背景
公司战略研究团队每天在钉钉群中分享飞书文档(研究报告、竞品分析、日报等),手动收集和整理效率低下。本项目实现了:
- **自动化采集**:从钉钉群聊中提取消息、链接和文件
- **批量下载**:自动下载飞书文档和文件附件
- **知识结构化**:构建知识图谱和 Obsidian 知识库
- **定时更新**:支持每日自动采集最新内容
### 1.2 成果
| 指标 | 数量 |
|------|------|
| 消息总数 | 388 条 |
| 飞书文档 | 159 篇 |
| 文件附件 | 19 个 |
| 活跃人员 | 28 位 |
| 时间范围 | 2026-05-01 ~ 2026-06-03 |
---
## 二、技术架构
### 2.1 整体流程
```
钉钉群聊消息
消息采集(dws CLI
链接提取(Python
文档下载(lark-cli
内容解析(Python + BeautifulSoup
知识图谱构建(Python
Obsidian 知识库生成(Python
可视化展示(HTML + Mermaid
```
### 2.2 核心工具
| 工具 | 用途 | 版本 |
|------|------|------|
| **dws CLI** | 钉钉消息采集、文件下载 | 悟空 CLI |
| **lark-cli** | 飞书文档下载 | v1.0.32 |
| **Python** | 数据处理、脚本开发 | 3.10+ |
| **BeautifulSoup** | HTML 解析 | 4.x |
| **Obsidian** | 知识库管理 | 最新版 |
---
## 三、详细技术方案
### 3.1 钉钉消息采集
#### 工具:dws CLI(悟空)
**安装路径**`C:\Users\admin\.real\.bin\dws\bin\dws.exe`
**认证信息**
- Corp ID`ding9385b4aebd9af88635c2f4657eb6378f`
- User ID`347672497`
**核心命令**
```bash
# 获取群聊消息
dws chat message list --group <group_id> --time <time> --forward true --format json --limit 200
# 下载文件附件
dws drive download --node <fileId> --output <path>
```
**群组 ID**
| 群组 | openConversationId |
|------|-------------------|
| 创新组 | `cidMuM+itt5PeY7xNSWsv3M0g==` |
| dc战略问题研究院 | `cidoUneRB4Db8TAXaTrKxkQAw==` |
**分页策略**
由于 API 返回消息有数量限制,需要分多次拉取:
```python
# 分段拉取策略
segments = [
("2026-05-01", "true"), # 从5月1日向前
("2026-05-19", "true"), # 从5月19日向前
("2026-05-24", "true"), # 从5月24日向前
("2026-06-03", "false"), # 从6月3日向后
]
# 去重:使用 openMessageId
all_msgs = {}
for msg in msgs:
all_msgs[msg["openMessageId"]] = msg
```
### 3.2 链接提取
#### 正则表达式
```python
# 飞书文档链接
feishu_re = re.compile(r'https?://[a-zA-Z0-9.-]+\.feishu\.cn/(?:wiki|docx)/[A-Za-z0-9]+')
# 文件附件
file_re = re.compile(r'\[文件\]\s+(.+?)\s+fileId:\s+(\S+)')
```
### 3.3 飞书文档下载
#### 工具:lark-cli(官方飞书 CLI
**安装**
```bash
npm install -g @larksuite/cli
```
**配置**
```bash
# 初始化配置
lark-cli config init
# 登录授权
lark-cli auth login --domain docs,drive,wiki --recommend
```
**核心命令**
```bash
# 获取文档内容
lark-cli api GET /open-apis/docx/v1/documents/<doc_id>/blocks --format json
```
### 3.4 文件附件下载
#### 使用 dws CLI
```bash
# 下载文件
dws drive download --node <fileId> --output <path>
```
---
## 四、关键代码
### 4.1 消息采集脚本
```python
def fetch(group_id, time_str, forward="true"):
cmd = [DWS, "chat", "message", "list",
"--group", group_id,
"--time", time_str,
"--forward", forward,
"--format", "json",
"--limit", "200"]
result = subprocess.run(cmd, capture_output=True, timeout=60)
output = result.stdout.decode("utf-8", errors="replace")
json_start = output.find("{")
data = json.loads(output[json_start:])
return data.get("result", {}).get("messages", [])
```
### 4.2 链接提取脚本
```python
feishu_re = re.compile(r'https?://[a-zA-Z0-9.-]+\.feishu\.cn/(?:wiki|docx)/[A-Za-z0-9]+')
for msg in messages:
content = msg.get("content", "")
for link in feishu_re.findall(content):
all_links.append({"url": link, "sender": msg.get("sender", "")})
```
### 4.3 文档下载脚本
```python
def get_document_content(doc_id):
cmd = [LARK_CLI, "api", "GET",
f"/open-apis/docx/v1/documents/{doc_id}/blocks",
"--format", "json"]
result = subprocess.run(cmd, capture_output=True, timeout=30)
if result.returncode == 0:
data = json.loads(result.stdout.decode("utf-8", errors="replace"))
if data.get("code") == 0:
return data["data"]
return None
```
---
## 五、配置与部署
### 5.1 环境要求
```
Python 3.10+
Node.js 18+
npm 9+
```
### 5.2 依赖安装
```bash
# Python 依赖
pip install beautifulsoup4 requests
# Node.js 依赖
npm install -g @larksuite/cli
```
### 5.3 定时任务
```powershell
# 创建定时任务(每天18:00执行)
schtasks /create /tn "FeishuDocCollector" /tr "python D:\desktop\feishu_docs_summary\scripts\daily_feishu_collector.py" /sc daily /st 18:00
```
---
## 六、关键经验
### 6.1 API 限制与应对
| 问题 | 解决方案 |
|------|----------|
| 消息分页 | 分多次拉取 + openMessageId 去重 |
| 飞书文档权限 | 使用 lark-cli(已授权) |
| 文件下载超时 | 增加 timeout 参数 |
### 6.2 性能优化
- **并发控制**API 调用间隔 0.5 秒
- **增量更新**:只下载新文档
- **缓存机制**:已下载文档不重复下载
---
## 七、使用指南
### 7.1 快速开始
```bash
# 1. 全量拉取消息
python scripts/fetch_all.py
# 2. 提取链接
python scripts/extract_links.py
# 3. 下载文档
python scripts/download_feishu_docs.py
# 4. 构建知识图谱
python scripts/build_graph.py
# 5. 生成 Obsidian 知识库
python scripts/write_obsidian.py
```
### 7.2 每日更新
```bash
# 运行每日采集脚本
python scripts/daily_feishu_collector.py
```
---
## 八、总结
本项目通过 **dws CLI + lark-cli + Python** 实现了钉钉群聊飞书文档的自动化收集和知识库构建,大幅提升了团队知识管理效率。
**核心价值**
- ✅ 自动化采集,节省人工时间
- ✅ 结构化存储,便于检索
- ✅ 知识图谱,发现关联关系
- ✅ Obsidian 集成,支持双向链接
- ✅ 定时更新,保持内容新鲜
**技术亮点**
- ✅ 多工具协同(dws + lark-cli + Python
- ✅ 增量更新机制
- ✅ 完整的错误处理
- ✅ 灵活的配置系统
---
> 文档版本:v1.0
> 最后更新:2026-06-03
> 维护人:大师