🔄 卡若AI 同步 2026-03-03 10:20 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 14 个

This commit is contained in:
2026-03-03 10:20:15 +08:00
parent e48aa3afdd
commit 6846b6f7df
6 changed files with 100 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
{
"access_token": "u-dTB8Oq8l5cwFnz.Mm7oowQlh3cbxghihiMGaJQg027gZ",
"refresh_token": "ur-eYivb2AhNfRozQiZ3WhpoGlh14b1ghoXPgGaUA0022hV",
"name": "飞书用户",
"auth_time": "2026-03-03T10:19:28.119191"
}

View File

@@ -239,6 +239,24 @@ def token_status():
'auth_time': USER_TOKENS.get('auth_time', '')
})
@app.route('/api/token/sync', methods=['POST', 'GET'])
def token_sync():
"""将当前内存中的 Token 写入 .feishu_tokens.json供 feishu_wiki_create_doc 等脚本使用"""
if not USER_TOKENS.get('access_token') and not USER_TOKENS.get('refresh_token'):
return jsonify({'status': 'fail', 'msg': '无可用 Token请先完成授权'}), 400
save_tokens()
return jsonify({'status': 'ok', 'msg': '已同步到 .feishu_tokens.json'})
@app.route('/api/token/export')
def token_export():
"""供本地脚本使用:导出当前 Token 到同一目录 .feishu_tokens.json仅 localhost"""
if not USER_TOKENS.get('access_token') and not USER_TOKENS.get('refresh_token'):
return jsonify({'status': 'fail', 'msg': '无可用 Token'}), 404
save_tokens()
return jsonify({k: v for k, v in USER_TOKENS.items() if k in ('access_token', 'refresh_token', 'name', 'auth_time')})
# ============== 云盘 ==============
@app.route('/api/drive/files')

View File

@@ -77,8 +77,26 @@ def check_token_valid(token, parent_token):
return False
def _fetch_token_from_local_api():
"""当本地无 Token 文件时,尝试从已运行的 feishu_api (localhost:5050) 拉取并落盘"""
try:
r = requests.get("http://127.0.0.1:5050/api/token/export", timeout=2)
if r.status_code != 200:
return {}
data = r.json()
if not data.get("access_token") and not data.get("refresh_token"):
return {}
with open(CONFIG['TOKEN_FILE'], 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
return data
except Exception:
return {}
def get_token(parent_token):
tokens = load_tokens()
if not tokens and os.path.exists(CONFIG['TOKEN_FILE']) is False:
tokens = _fetch_token_from_local_api()
if tokens.get('access_token') and check_token_valid(tokens['access_token'], parent_token):
return tokens['access_token']
print("🔄 静默刷新 Token...")

View File

@@ -0,0 +1,56 @@
#!/bin/bash
# 读书笔记上传到飞书:无 Token 时打开授权页,等待落盘后自动执行 5 篇上传
# 用法: bash 读书笔记_上传到飞书.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
TOKEN_FILE="$SCRIPT_DIR/.feishu_tokens.json"
NOTE_DIR="/Users/karuo/Documents/个人/2、我写的日记/读书笔记"
JSON_DIR="/Users/karuo/Documents/卡若Ai的文件夹/导出/读书笔记_feishu_json"
PARENT="KNf7wA8Rki1NSdkkSIqcdFtTnWb"
PUBLISH="python3 $SCRIPT_DIR/feishu_article_unified_publish.py"
# 若本地无 token尝试从本地 API 拉取
if [ ! -f "$TOKEN_FILE" ]; then
echo "📡 本地无 Token尝试从 127.0.0.1:5050 拉取..."
PAYLOAD=$(curl -s -m 3 "http://127.0.0.1:5050/api/token/export" 2>/dev/null || true)
if echo "$PAYLOAD" | grep -q '"access_token"'; then
echo "$PAYLOAD" > "$TOKEN_FILE"
echo "✅ 已从本地 API 同步 Token 到 $TOKEN_FILE"
else
echo "⚠️ 需要先完成飞书授权。正在打开授权页..."
AUTH_URL=$(curl -s -m 3 "http://127.0.0.1:5050/api/auth/url" 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin).get('auth_url',''))")
if [ -n "$AUTH_URL" ]; then
open "$AUTH_URL"
echo "请在浏览器中完成授权,授权成功后本脚本将自动继续(等待最多 90 秒)..."
else
echo "请先启动飞书 API 服务: cd $SCRIPT_DIR && python3 feishu_api.py &"
echo "然后运行: python3 auto_log.py"
exit 1
fi
for i in $(seq 1 90); do
sleep 1
if [ -f "$TOKEN_FILE" ]; then
echo "✅ Token 已落盘,继续上传"
break
fi
if [ "$i" -eq 90 ]; then
echo "❌ 等待超时,未检测到 Token 文件。请完成授权后重新运行本脚本。"
exit 1
fi
done
fi
fi
mkdir -p "$JSON_DIR"
echo "📤 开始上传 5 篇读书笔记到飞书节点 $PARENT ..."
$PUBLISH --parent "$PARENT" --title "卡若读书笔记Dan Koe 如何在一天内彻底改造你的人生" --md "$NOTE_DIR/Dan_Koe_如何在一天内彻底改造你的人生_读书笔记.md" --json "$JSON_DIR/Dan_Koe.json" && echo " ✅ Dan Koe"
$PUBLISH --parent "$PARENT" --title "卡若读书笔记:纳瓦尔访谈|五行结构化" --md "$NOTE_DIR/纳瓦尔访谈_读书笔记.md" --json "$JSON_DIR/纳瓦尔.json" && echo " ✅ 纳瓦尔"
$PUBLISH --parent "$PARENT" --title "卡若读书笔记:曾仕强《易经》" --md "$NOTE_DIR/曾仕强_易经_读书笔记.md" --json "$JSON_DIR/曾仕强易经.json" && echo " ✅ 曾仕强易经"
$PUBLISH --parent "$PARENT" --title "卡若读书笔记5000天后的世界 - 凯文凯利" --md "$NOTE_DIR/卡若读书笔记5000天后的世界 - 凯文凯利.md" --json "$JSON_DIR/凯文凯利.json" && echo " ✅ 凯文凯利"
$PUBLISH --parent "$PARENT" --title "卡若读书笔记盐铁之辩与AI之道" --md "$NOTE_DIR/卡若读书笔记盐铁之辩与AI之道.md" --json "$JSON_DIR/盐铁之辩.json" && echo " ✅ 盐铁之辩"
echo "📌 全部上传完成。飞书节点: https://cunkebao.feishu.cn/wiki/$PARENT"

View File

@@ -213,3 +213,4 @@
| 2026-03-03 04:51:53 | 🔄 卡若AI 同步 2026-03-03 04:51 | 更新:金盾、运营中枢工作台 | 排除 >20MB: 14 个 |
| 2026-03-03 04:58:10 | 🔄 卡若AI 同步 2026-03-03 04:58 | 更新Cursor规则、总索引与入口、运营中枢工作台 | 排除 >20MB: 14 个 |
| 2026-03-03 05:02:46 | 🔄 卡若AI 同步 2026-03-03 05:02 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 14 个 |
| 2026-03-03 10:15:48 | 🔄 卡若AI 同步 2026-03-03 10:15 | 更新:水桥平台对接、卡木、火炬、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 |

View File

@@ -216,3 +216,4 @@
| 2026-03-03 04:51:53 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-03 04:51 | 更新:金盾、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-03 04:58:10 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-03 04:58 | 更新Cursor规则、总索引与入口、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-03 05:02:46 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-03 05:02 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-03 10:15:48 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-03 10:15 | 更新:水桥平台对接、卡木、火炬、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |