novel-doomsday-resurgence/feishu_novel_sync.sh

213 lines
6.1 KiB
Bash
Raw Normal View History

#!/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调用"