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

This commit is contained in:
2026-03-07 13:59:21 +08:00
parent ed644d3296
commit 6307fc6250
5 changed files with 44 additions and 30 deletions

View File

@@ -1,6 +1,6 @@
{
"access_token": "u-cnjmrrVOtexVZCoFsmC1PClh16FxghihMwGaYQg026hY",
"refresh_token": "ur-dqg0nIGcJ9XGpxXYACGbmXlh34x1ghOPhwGaZA4023gI",
"access_token": "u-dZ4TwealBfGHhTqZmvw2tjlh143xghWpN0GaFQk026kF",
"refresh_token": "ur-c9yS96TNR75rI8FLTUzhmwlh1I31ghOPMMGaJB4027lF",
"name": "飞书用户",
"auth_time": "2026-03-06T13:09:11.605836"
}

View File

@@ -51,11 +51,13 @@ ROWS = {
'116': [ '量化猎头人才 职场分享', 154, 0, 418, 11, 104, 0, 0, 19, 0 ],
# 117场 2026-03-06关闭页 154min/503成员/72最高/36新增/16礼物/351灵魂力/51602曝光小助手 151min/494进房/11人均/118互动/26关注
'117': [ '链接合作 派对流量 教培', 154, 51602, 503, 11, 118, 16, 351, 36, 72 ],
# 118场 2026-03-07关闭页 190min/586成员/65最高/33新增/46礼物/7456灵魂力/74873曝光小助手 180min/559进房/10人均/149互动/29关注
'118': [ '3D打印 游戏代充 正财偏财', 190, 74873, 586, 10, 149, 46, 7456, 33, 65 ],
}
# 场次→按日期列填写时的日期(表头为当月日期 1~31
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23', '113': '2', '114': '3', '115': '4', '116': '5', '117': '6'}
SESSION_DATE_COLUMN = {'105': '20', '106': '21', '107': '23', '113': '2', '114': '3', '115': '4', '116': '5', '117': '6', '118': '7'}
# 场次→月份(用于选择 2月/3月 等工作表标签,避免写入错月)
SESSION_MONTH = {'105': 2, '106': 2, '107': 2, '113': 3, '114': 3, '115': 3, '116': 3, '117': 3}
SESSION_MONTH = {'105': 2, '106': 2, '107': 2, '113': 3, '114': 3, '115': 3, '116': 3, '117': 3, '118': 3}
# 派对录屏(飞书妙记)链接:场次 → 完整 URL填表时写入「派对录屏」行对应列
# 从飞书妙记复制链接后填入,新场次需补全
@@ -65,6 +67,7 @@ PARTY_VIDEO_LINKS = {
'115': 'https://cunkebao.feishu.cn/minutes/obcn8cgvnzk15yfy3buak735',
'116': 'https://cunkebao.feishu.cn/minutes/obcn81825en52vt3eqoo482e',
'117': 'https://cunkebao.feishu.cn/minutes/obcn9phnds9a96ma6t8ixa3z',
'118': 'https://cunkebao.feishu.cn/minutes/obcnaee1h83l1s169e3a18qp',
}
# 小程序当日运营数据:日期号 → {访问次数, 访客, 交易金额},填表时自动写入对应日期列
@@ -82,6 +85,7 @@ MINIPROGRAM_EXTRA_3 = {
'4': {'访问次数': 0, '访客': 0, '交易金额': 0}, # 3月4日 115场
'5': {'访问次数': 0, '访客': 0, '交易金额': 0}, # 3月5日 116场
'6': {'访问次数': 0, '访客': 0, '交易金额': 0}, # 3月6日 117场
'7': {'访问次数': 0, '访客': 0, '交易金额': 0}, # 3月7日 118场
}
@@ -345,7 +349,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, 107, 113, 114, 115, 116, 117')
print('❌ 未知场次,可用: 96, 97, 98, 99, 100, 103, 104, 105, 106, 107, 113, 114, 115, 116, 117, 118')
sys.exit(1)
token = load_token() or refresh_and_load_token()
if not token:
@@ -390,9 +394,9 @@ def main():
LABELS_GROUP = ['主题', '时长(分钟)', 'Soul推流人数', '进房人数', '人均时长(分钟)', '互动数量', '礼物', '灵魂力', '增加关注', '最高在线']
def _maybe_send_group(sess, raw_vals):
if sess not in ('105', '106', '107', '113', '114', '115', '116', '117'):
if sess not in ('105', '106', '107', '113', '114', '115', '116', '117', '118'):
return
date_label = {'105': '2月20日', '106': '2月21日', '107': '2月23日', '113': '3月2日', '114': '3月3日', '115': '3月4日', '116': '3月5日', '117': '3月6日'}.get(sess, sess + '')
date_label = {'105': '2月20日', '106': '2月21日', '107': '2月23日', '113': '3月2日', '114': '3月3日', '115': '3月4日', '116': '3月5日', '117': '3月6日', '118': '3月7日'}.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 派对运营报表】',
@@ -403,7 +407,7 @@ def main():
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', '113': '20260302', '114': '20260303', '115': '20260304', '116': '20260305', '117': '20260306'}.get(sess, '20260220')
src_date = {'105': '20260220', '106': '20260221', '107': '20260223', '113': '20260302', '114': '20260303', '115': '20260304', '116': '20260305', '117': '20260306', '118': '20260307'}.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

@@ -47,7 +47,8 @@ def set_slide_background(slide, color=BG_CREAM):
pass
def add_title(slide, text, top=Inches(0.4), left=Inches(0.6), width=Inches(12), font_size=28):
def add_title(slide, text, top=Inches(0.4), left=Inches(0.6), width=Inches(12), font_size=28, center=False):
"""添加标题center=True 时文字居中"""
tb = slide.shapes.add_textbox(left, top, width, Inches(0.8))
tf = tb.text_frame
p = tf.paragraphs[0]
@@ -55,10 +56,12 @@ def add_title(slide, text, top=Inches(0.4), left=Inches(0.6), width=Inches(12),
p.font.size = Pt(font_size)
p.font.bold = True
p.font.color.rgb = TITLE_BROWN
if center:
p.alignment = PP_ALIGN.CENTER
return tb
def add_body(slide, lines, top, left=Inches(0.6), width=Inches(7), font_size=20):
def add_body(slide, lines, top, left=Inches(0.6), width=Inches(7), font_size=20, center=False):
tb = slide.shapes.add_textbox(left, top, width, Inches(3.5))
tf = tb.text_frame
tf.word_wrap = True
@@ -71,6 +74,8 @@ def add_body(slide, lines, top, left=Inches(0.6), width=Inches(7), font_size=20)
p.font.size = Pt(font_size)
p.font.color.rgb = TEXT_DARK
p.space_after = Pt(8)
if center:
p.alignment = PP_ALIGN.CENTER
return tb
@@ -104,12 +109,16 @@ def add_flowchart(slide, top=Inches(2), left=Inches(0.8), glass_style=True):
arrow.line.color.rgb = ACCENT
def add_picture_glass(slide, path, left, top, width, border_rgb=GLASS_BORDER):
"""插入图片并加毛玻璃感边框(圆角效果用细白/浅灰边框)"""
SLIDE_W = Inches(13.333)
def add_picture_glass(slide, path, left, top, width, border_rgb=GLASS_BORDER, center=False):
"""插入图片并加毛玻璃感边框。center=True 时水平居中。"""
path = Path(path)
if not path.exists():
return None
try:
if center:
left = (SLIDE_W - width) / 2
pic = slide.shapes.add_picture(str(path), left, top, width=width)
pic.line.color.rgb = border_rgb
pic.line.width = Pt(2)
@@ -224,20 +233,19 @@ def build_presentation(photo_path=None, extra_images=None):
def add_slide():
return prs.slides.add_slide(blank)
# ---------- 第1页封面毛玻璃感 + 插图----------
# ---------- 第1页封面标题居中、图片居中放大、汇报人一行----------
s1 = add_slide()
set_slide_background(s1, BG_CREAM)
add_title(s1, "天恩 Word · 智能单词记忆小助手", top=Inches(1.6), font_size=40)
add_body(s1, ["向全班、全校、全国的小朋友介绍我们的项目"], top=Inches(2.3), width=Inches(10), font_size=22)
add_body(s1, ["汇报人:施吴佶"], top=Inches(3.2), font_size=24)
add_body(s1, ["二年级 4 班"], top=Inches(3.8), font_size=20)
add_title(s1, "天恩 Word · 智能单词记忆小助手", top=Inches(0.7), left=Inches(0.5), width=Inches(12.3), font_size=40, center=True)
add_body(s1, ["向全班、全校、全国的小朋友介绍我们的项目"], top=Inches(1.4), left=Inches(1.5), width=Inches(10.3), font_size=22, center=True)
if speaker_img and Path(speaker_img).exists():
add_picture_glass(s1, speaker_img, Inches(9.4), Inches(2.0), Inches(2.4), BORDER)
add_picture_glass(s1, speaker_img, 0, Inches(2.0), Inches(3.2), BORDER, center=True)
add_title(s1, "汇报人:二年四班 4号 施吴佶", top=Inches(5.6), left=Inches(0.5), width=Inches(12.3), font_size=24, center=True)
# ---------- 第2页大家好我是施吴佶双图可用 speaker2----------
s2 = add_slide()
set_slide_background(s2, BG_CREAM)
add_title(s2, "大家好,我是施吴佶!", font_size=32)
add_title(s2, "大家好,我是施吴佶!", font_size=32, center=True)
add_icon_text(s2, "👋", "我是二年级4班的一名小学生。", Inches(0.6), Inches(1.4))
add_icon_text(s2, "📚", "我和小伙伴们一起做了一个「记单词」的小项目,", Inches(0.6), Inches(2.0))
add_icon_text(s2, "", "今天想跟大家说一说它是怎么用的!", Inches(0.6), Inches(2.6))
@@ -247,7 +255,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第3页今天讲什么 ----------
s3 = add_slide()
set_slide_background(s3, BG_CREAM)
add_title(s3, "今天我要讲什么?", font_size=30)
add_title(s3, "今天我要讲什么?", font_size=30, center=True)
add_body(s3, [
"我们要讲的是一个「智能单词记忆小助手」!",
"它有一个很厉害的方法,叫「笛卡尔坐标记忆法」。",
@@ -258,7 +266,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第4页为什么做这个可配情绪/改进示意图)----------
s4 = add_slide()
set_slide_background(s4, BG_PINK)
add_title(s4, "我们为什么做这个?", font_size=30)
add_title(s4, "我们为什么做这个?", font_size=30, center=True)
add_icon_text(s4, "😣", "记单词太难了!", Inches(0.6), Inches(1.3), 24)
add_body(s4, [
"以前记单词总是死记硬背,很容易忘。",
@@ -272,7 +280,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第5页我们的办法 — 笛卡尔坐标 + 坐标系插图 ----------
s5 = add_slide()
set_slide_background(s5, BG_CREAM)
add_title(s5, "我们的办法:笛卡尔坐标记忆法", font_size=28)
add_title(s5, "我们的办法:笛卡尔坐标记忆法", font_size=28, center=True)
add_body(s5, [
"把单词拆成「前缀」和「后缀」:",
"X 轴放后缀(比如 DAY、BOOKY 轴放前缀(比如 SUN、NOTE",
@@ -286,7 +294,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第6页什么是笛卡尔坐标 + DAY 单词表示例图 ----------
s6 = add_slide()
set_slide_background(s6, BG_CREAM)
add_title(s6, "什么是笛卡尔坐标?", font_size=30)
add_title(s6, "什么是笛卡尔坐标?", font_size=30, center=True)
add_body(s6, [
"就像画一个「十字」,横着的是后缀,竖着的是前缀。",
"它们交叉的地方,就是一个新单词!",
@@ -300,7 +308,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第7页怎么用 — 流程图(毛玻璃)+ 步骤示意图 ----------
s7 = add_slide()
set_slide_background(s7, BG_PINK)
add_title(s7, "怎么用?五步就会!", font_size=30)
add_title(s7, "怎么用?五步就会!", font_size=30, center=True)
add_flowchart(s7, top=Inches(1.85), left=Inches(0.5), glass_style=True)
if flow_words_img.exists():
add_picture_glass(s7, flow_words_img, Inches(7.2), Inches(2.0), Inches(5.3), GLASS_BORDER)
@@ -311,7 +319,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第8页记忆句和配图 + 联想示意图 ----------
s8 = add_slide()
set_slide_background(s8, BG_CREAM)
add_title(s8, "记忆句和配图", font_size=30)
add_title(s8, "记忆句和配图", font_size=30, center=True)
add_icon_text(s8, "📝", "一句子里藏着这一组的所有单词,读一句就复习一遍。", Inches(0.6), Inches(1.3))
add_icon_text(s8, "🖼️", "还有 AI 画的配图,看图就能想起这句话和单词。", Inches(0.6), Inches(1.9))
add_body(s8, [
@@ -323,7 +331,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第9页界面长什么样 + 单词表示例 ----------
s9 = add_slide()
set_slide_background(s9, BG_CREAM)
add_title(s9, "我们做的界面长什么样?", font_size=28)
add_title(s9, "我们做的界面长什么样?", font_size=28, center=True)
add_body(s9, [
"打开网页就能用,不用装软件。",
"上面是「坐标系」:左边是前缀,上边是后缀,中间是单词和意思。",
@@ -336,7 +344,7 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第10页我们班的收获 ----------
s10 = add_slide()
set_slide_background(s10, BG_PINK)
add_title(s10, "我们班的收获", font_size=30)
add_title(s10, "我们班的收获", font_size=30, center=True)
add_icon_text(s10, "🌟", "记单词变快了,而且不容易忘。", Inches(0.6), Inches(1.4))
add_icon_text(s10, "😊", "大家觉得好玩,都愿意多背几组。", Inches(0.6), Inches(2.0))
add_icon_text(s10, "🤝", "我们一起想点子、一起用,更像一个小组了。", Inches(0.6), Inches(2.6))
@@ -345,14 +353,14 @@ def build_presentation(photo_path=None, extra_images=None):
# ---------- 第11页谢谢大家 ----------
s11 = add_slide()
set_slide_background(s11, BG_CREAM)
add_title(s11, "谢谢大家!", top=Inches(2.2), font_size=44)
add_title(s11, "谢谢大家!", top=Inches(2.2), font_size=44, center=True)
add_body(s11, ["欢迎大家一起用「天恩 Word」记单词"], top=Inches(3.0), font_size=24)
add_body(s11, ["汇报人:二年级4班 施吴佶"], top=Inches(4.0), font_size=20)
add_body(s11, ["汇报人:二年四班 4号 施吴佶"], top=Inches(4.0), font_size=20, center=True)
# ---------- 第12页感谢 ----------
s12 = add_slide()
set_slide_background(s12, LIGHT_PINK)
add_title(s12, "感谢聆听", top=Inches(2.8), font_size=38)
add_title(s12, "感谢聆听", top=Inches(2.8), font_size=38, center=True)
add_body(s12, ["感谢全班、全校、全国的老师和小伙伴们!"], top=Inches(3.6), font_size=22)
out_ppt = OUT_DIR / "天恩Word项目介绍_二年级4班施吴佶_12页.pptx"

View File

@@ -246,3 +246,4 @@
| 2026-03-06 13:07:01 | 🔄 卡若AI 同步 2026-03-06 13:06 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-06 13:09:56 | 🔄 卡若AI 同步 2026-03-06 13:09 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-06 13:24:04 | 🔄 卡若AI 同步 2026-03-06 13:24 | 更新Cursor规则、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |
| 2026-03-07 06:14:48 | 🔄 卡若AI 同步 2026-03-07 06:14 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 |

View File

@@ -249,3 +249,4 @@
| 2026-03-06 13:07:01 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 13:06 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-06 13:09:56 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 13:09 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-06 13:24:04 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 13:24 | 更新Cursor规则、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-03-07 06:14:48 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-07 06:14 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |