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

This commit is contained in:
2026-03-03 12:01:34 +08:00
parent 6846b6f7df
commit 69c0531baa
11 changed files with 464 additions and 30 deletions

View File

@@ -15,7 +15,9 @@ from urllib.parse import quote
FEISHU_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
TOKEN_FILE = os.path.join(FEISHU_SCRIPT_DIR, '.feishu_tokens.json')
WIKI_NODE_OR_SPREADSHEET_TOKEN = os.environ.get('FEISHU_SPREADSHEET_TOKEN', 'wikcnIgAGSNHo0t36idHJ668Gfd')
SHEET_ID = os.environ.get('FEISHU_SHEET_ID', '7A3Cy9')
SHEET_ID = os.environ.get('FEISHU_SHEET_ID', '7A3Cy9') # 2月默认 sheet
# 月份 → 工作表 sheetId2月=7A3Cy93月=bJR5sA与飞书「3月」标签一致
SHEET_ID_BY_MONTH = {2: '7A3Cy9', 3: 'bJR5sA'}
# 飞书群机器人 webhook推送运营报表链接与场次数据
FEISHU_GROUP_WEBHOOK = os.environ.get('FEISHU_GROUP_WEBHOOK', 'https://open.feishu.cn/open-apis/bot/v2/hook/34b762fc-5b9b-4abb-a05a-96c8fb9599f1')
OPERATION_REPORT_LINK = 'https://cunkebao.feishu.cn/wiki/wikcnIgAGSNHo0t36idHJ668Gfd?sheet=7A3Cy9'
@@ -39,9 +41,13 @@ ROWS = {
'106': [ '退伍军人低空经济 贴息8800', 135, 33312, 395, 7, 88, 3, 24, 9, 42 ],
# 107场 2026-02-23关闭页 137min/398进房/60最高/36关注/2礼物/16灵魂力/33820曝光小助手 10人均/85互动/34关注
'107': [ '职场情绪价值 核心团队管理', 137, 33820, 398, 10, 85, 2, 16, 36, 60 ],
# 113场 2026-03-02关闭页 163min/445成员/54最高/19新增粉丝/1礼物/29灵魂力/42360曝光小助手 8人均/139互动/16关注
'113': [ '钱一月Ai创业私域', 163, 42360, 445, 8, 139, 1, 29, 19, 54 ],
}
# 场次→按日期列填写时的日期(表头为当月日期 1~31
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23'}
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23', '113': '2'}
# 场次→月份(用于选择 2月/3月 等工作表标签,避免写入错月)
SESSION_MONTH = {'105': 2, '106': 2, '107': 2, '113': 3}
# 小程序当日运营数据:日期号 → {访问次数, 访客, 交易金额},填表时自动写入对应日期列
# 数据来源:微信公众平台 → 小程序 → 统计 → 实时访问/概况
@@ -154,6 +160,32 @@ def get_sheet_meta(access_token, spreadsheet_token):
return sheets[0].get('sheetId') or sheets[0].get('title') or SHEET_ID
def get_sheet_id_by_month(access_token, spreadsheet_token, month):
"""按月份选工作表标签标题含「X月」的 sheet如 3月→ 返回其 sheetId避免写入错月。"""
if month in SHEET_ID_BY_MONTH:
return SHEET_ID_BY_MONTH[month]
url = f'https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/metainfo'
r = requests.get(
url,
headers={'Authorization': f'Bearer {access_token}'},
timeout=15,
)
if r.status_code != 200:
return SHEET_ID
body = r.json()
if body.get('code') != 0:
return SHEET_ID
sheets = (body.get('data') or {}).get('sheets') or []
month_label = f'{month}'
for s in sheets:
title = (s.get('title') or '').strip()
if month_label in title:
sid = s.get('sheetId') or s.get('title')
if sid:
return sid
return SHEET_ID
def read_sheet_range(access_token, spreadsheet_token, range_str):
"""读取表格范围,返回 values 或 None"""
url = f'https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/values/{quote(range_str, safe="")}'
@@ -258,7 +290,7 @@ def main():
session = (sys.argv[1] if len(sys.argv) > 1 else '104').strip()
row = ROWS.get(session)
if not row:
print('❌ 未知场次,可用: 96, 97, 98, 99, 100, 103, 104, 105, 106')
print('❌ 未知场次,可用: 96, 97, 98, 99, 100, 103, 104, 105, 106, 107, 113')
sys.exit(1)
token = load_token() or refresh_and_load_token()
if not token:
@@ -267,7 +299,10 @@ def main():
raw = (row + [None] * EFFECT_COLS)[:EFFECT_COLS]
values = [_to_cell_value(raw[0])] + [_to_cell_value(raw[i]) for i in range(1, EFFECT_COLS)]
spreadsheet_token = WIKI_NODE_OR_SPREADSHEET_TOKEN
sheet_id = SHEET_ID
month = SESSION_MONTH.get(session, 2)
sheet_id = get_sheet_id_by_month(token, spreadsheet_token, month)
if month != 2:
print(f'✅ 已选 {month}月 工作表sheet_id={sheet_id}')
range_read = f"{sheet_id}!A1:AG35"
vals, read_code, read_body = read_sheet_range(token, spreadsheet_token, range_read)
# 401 时刷新 token 并重试读取,确保能定位到日期列
@@ -300,19 +335,20 @@ def main():
LABELS_GROUP = ['主题', '时长(分钟)', 'Soul推流人数', '进房人数', '人均时长(分钟)', '互动数量', '礼物', '灵魂力', '增加关注', '最高在线']
def _maybe_send_group(sess, raw_vals):
if sess not in ('105', '106', '107'):
if sess not in ('105', '106', '107', '113'):
return
date_label = {'105': '2月20日', '106': '2月21日', '107': '2月23日'}.get(sess, sess + '')
date_label = {'105': '2月20日', '106': '2月21日', '107': '2月23日', '113': '3月2日'}.get(sess, sess + '')
report_link = OPERATION_REPORT_LINK if sheet_id == SHEET_ID else f'https://cunkebao.feishu.cn/wiki/wikcnIgAGSNHo0t36idHJ668Gfd?sheet={sheet_id}'
lines = [
'【Soul 派对运营报表】',
f'链接:{OPERATION_REPORT_LINK}',
f'链接:{report_link}',
'',
f'{sess}场({date_label})已登记:',
]
for i, label in enumerate(LABELS_GROUP):
val = raw_vals[i] if i < len(raw_vals) else ''
lines.append(f'{label}{val}')
src_date = {'105': '20260220', '106': '20260221', '107': '20260223'}.get(sess, '20260220')
src_date = {'105': '20260220', '106': '20260221', '107': '20260223', '113': '20260302'}.get(sess, '20260220')
lines.append(f'数据来源soul 派对 {sess}{src_date}.txt')
msg = '\n'.join(lines)
ok, _ = send_feishu_group_message(FEISHU_GROUP_WEBHOOK, msg)

View File

@@ -8,7 +8,8 @@ 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"
# 读书笔记目录链接为快捷方式(KY7ewL21Ki5YRqkuDbecQuCTnTc),需在其父节点下创建
PARENT="QPyPwwUmtiweUOk6aTmcZLBxnIg"
PUBLISH="python3 $SCRIPT_DIR/feishu_article_unified_publish.py"
# 若本地无 token尝试从本地 API 拉取
@@ -53,4 +54,4 @@ $PUBLISH --parent "$PARENT" --title "卡若读书笔记:曾仕强《易经》"
$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"
echo "📌 全部上传完成。读书笔记目录(你给的链接): https://cunkebao.feishu.cn/wiki/KY7ewL21Ki5YRqkuDbecQuCTnTc"

View File

@@ -150,10 +150,11 @@ MINIPROGRAM_EXTRA = {
'107': ['主题关键词 ≤12字', 140, 35000, 400, 8, 90, 3, 25, 10, 45],
```
`SESSION_DATE_COLUMN` 中添加日期映射
`SESSION_DATE_COLUMN` `SESSION_MONTH` 中添加映射(**按月份选工作表标签**3 月填 3 月表)
```python
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '22'}
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23', '113': '2'}
SESSION_MONTH = {'105': 2, '106': 2, '107': 2, '113': 3} # 113场=3月→选「3月」标签
```
#### Step 3执行写入 + 校验
@@ -324,9 +325,12 @@ export FEISHU_APP_SECRET=dhjU0qWd5AzicGWTf4cTqhCWJOrnuCk4
# 2. SESSION_DATE_COLUMN 加日期映射
SESSION_DATE_COLUMN = {..., 'NEW': '日期号'}
# 3. _maybe_send_group 内 date_label 和 src_date 可选加映射(可选,不加则不发群
# 3. SESSION_MONTH 加月份跨月时必填3 月场次填 3写入「3月」标签而非 2 月
SESSION_MONTH = {..., 'NEW': 3}
# 4. 若当日有小程序数据,在 MINIPROGRAM_EXTRA 中加:
# 4. _maybe_send_group 内 date_label 和 src_date 可选加映射(可选,不加则不发群)
# 5. 若当日有小程序数据,在 MINIPROGRAM_EXTRA 中加:
# MINIPROGRAM_EXTRA = {..., '23': {'访问次数': 55, '访客': 55, '交易金额': 0}}
```