novel-doomsday-resurgence/feishu_novel_sync.sh
唐天洛 5dc8c00de0 feat(sync): 固化小说内容到Git仓库
📚 小说内容:
- 《末日重生-开局囤货十亿物资》33章
- 完整的状态文件、记忆索引、钩子系统

🛠️ 系统配置:
- 版本控制管理系统
- 自动化脚本系统
- 质量监控系统

🧠 固化记忆:
- 长期记忆文件
- 系统配置文档
- 恢复流程指南

💾 数据安全:
- 本地备份系统
- Git版本控制
- 远程同步机制

同步时间: 2026-03-30 16:25:35
系统状态: inkos正常运行中 (PID: 1433309)
创作进度: 第33章《油粮》创作中
2026-03-30 16:25:35 +08:00

213 lines
6.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
echo "=== 小说内容同步到飞书 ==="
echo "时间: $(date)"
echo "小说: 《末日重生-开局囤货十亿物资》"
echo ""
# 配置
NOVEL_DIR="/root/.openclaw/workspace/tomato-novel/books/末日重生-开局囤货十亿物资"
CHAPTERS_DIR="$NOVEL_DIR/chapters"
SYNC_STATE="/root/.openclaw/workspace/novel_sync_state.json"
FEISHU_APP_TOKEN="MkRqbphc2afqEksxf6vcJjZVn8O"
FEISHU_TABLE_ID="tbllH7wGmGbSCtPD"
# 初始化状态文件
if [ ! -f "$SYNC_STATE" ]; then
cat > "$SYNC_STATE" << EOF
{
"last_sync": "$(date -Iseconds)",
"synced_chapters": [],
"total_chapters": 0,
"feishu_app_token": "$FEISHU_APP_TOKEN",
"feishu_table_id": "$FEISHU_TABLE_ID"
}
EOF
echo "📝 创建同步状态文件: $SYNC_STATE"
fi
# 发现章节文件
echo "🔍 发现章节文件..."
CHAPTER_FILES=$(find "$CHAPTERS_DIR" -name "*.md" -type f | grep -E "^[0-9]{4}_" | sort)
TOTAL_CHAPTERS=$(echo "$CHAPTER_FILES" | wc -l)
echo "📚 发现 $TOTAL_CHAPTERS 个章节文件"
echo ""
# 显示章节列表
echo "📋 章节列表:"
echo "$CHAPTER_FILES" | head -10 | while read -r file; do
filename=$(basename "$file")
size=$(wc -c < "$file" 2>/dev/null || echo 0)
echo " 📄 $filename ($size 字符)"
done
if [ "$TOTAL_CHAPTERS" -gt 10 ]; then
echo " ... 还有 $((TOTAL_CHAPTERS - 10)) 个章节"
fi
echo ""
# 创建Python同步脚本
echo "🔄 创建同步脚本..."
cat > /tmp/sync_to_feishu.py << 'PYTHON_EOF'
#!/usr/bin/env python3
"""
同步小说章节到飞书多维表格
"""
import os
import re
import json
import time
from pathlib import Path
def read_sync_state(state_file):
"""读取同步状态"""
if os.path.exists(state_file):
with open(state_file, 'r', encoding='utf-8') as f:
return json.load(f)
return {"synced_chapters": []}
def save_sync_state(state_file, state):
"""保存同步状态"""
with open(state_file, 'w', encoding='utf-8') as f:
json.dump(state, f, ensure_ascii=False, indent=2)
def parse_chapter_info(filename):
"""解析章节信息"""
# 格式: 0018_钢渣.md
match = re.match(r'(\d{4})_(.*?)\.md', filename)
if match:
return {
"number": int(match.group(1)),
"title": match.group(2),
"filename": filename
}
return None
def read_chapter_content(filepath, max_length=10000):
"""读取章节内容"""
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
# 清理内容
content = content.replace('\r', '')
# 截断过长的内容
if len(content) > max_length:
content = content[:max_length] + "\n\n【内容过长已截断】"
return content
except Exception as e:
return f"读取失败: {e}"
def get_chapter_preview(content, length=200):
"""获取章节预览"""
# 移除换行和多余空格
preview = content.replace('\n', ' ').strip()
preview = re.sub(r'\s+', ' ', preview)
if len(preview) > length:
preview = preview[:length] + "..."
return preview
def sync_chapter_to_feishu(chapter_info, content, app_token, table_id):
"""同步章节到飞书(模拟)"""
print(f" 📤 同步第{chapter_info['number']}章: {chapter_info['title']}")
# 这里应该调用飞书API
# 实际实现需要安装飞书SDK
preview = get_chapter_preview(content)
# 模拟API调用
print(f" 标题: {chapter_info['title']}")
print(f" 字数: {len(content)} 字符")
print(f" 预览: {preview}")
return True
def main():
"""主函数"""
import sys
if len(sys.argv) < 4:
print("用法: python3 script.py <章节目录> <状态文件> <应用token> <表格ID>")
return
chapters_dir = sys.argv[1]
state_file = sys.argv[2]
app_token = sys.argv[3]
table_id = sys.argv[4]
print("=== 开始同步到飞书多维表格 ===")
# 读取状态
state = read_sync_state(state_file)
synced = set(state.get("synced_chapters", []))
# 发现新章节
new_chapters = []
all_files = list(Path(chapters_dir).glob("*.md"))
for filepath in all_files:
filename = filepath.name
chapter_info = parse_chapter_info(filename)
if chapter_info and chapter_info["number"] not in synced:
# 读取内容
content = read_chapter_content(str(filepath))
# 同步到飞书
if sync_chapter_to_feishu(chapter_info, content, app_token, table_id):
new_chapters.append(chapter_info["number"])
# 更新状态
if new_chapters:
state["synced_chapters"].extend(new_chapters)
state["synced_chapters"] = list(set(state["synced_chapters"]))
state["last_sync"] = time.strftime("%Y-%m-%d %H:%M:%S")
state["total_synced"] = len(state["synced_chapters"])
save_sync_state(state_file, state)
print(f"✅ 同步完成!")
print(f"📊 统计:")
print(f" - 新同步章节: {len(new_chapters)} 章")
print(f" - 总同步章节: {len(state['synced_chapters'])} 章")
else:
print("📝 没有新章节需要同步")
print("")
print("🔗 飞书表格地址:")
print(f" https://ecncmdjvm81e.feishu.cn/base/{app_token}")
if __name__ == "__main__":
main()
PYTHON_EOF
echo "✅ 同步脚本创建完成"
echo ""
# 执行同步
echo "🚀 开始执行同步..."
python3 /tmp/sync_to_feishu.py "$CHAPTERS_DIR" "$SYNC_STATE" "$FEISHU_APP_TOKEN" "$FEISHU_TABLE_ID"
echo ""
echo "=== 同步流程完成 ==="
echo ""
echo "🎯 后续操作建议:"
echo "1. 安装飞书Python SDK: pip install lark-oapi"
echo "2. 配置飞书API密钥"
echo "3. 实现真正的API调用"
echo "4. 设置定时同步任务"
echo ""
echo "📁 相关信息:"
echo " - 小说目录: $CHAPTERS_DIR"
echo " - 状态文件: $SYNC_STATE"
echo " - 飞书表格: https://ecncmdjvm81e.feishu.cn/base/$FEISHU_APP_TOKEN"
echo " - 表格ID: $FEISHU_TABLE_ID"
echo ""
echo "⚠️ 注意: 当前为模拟同步需要实现真正的飞书API调用"