93 lines
4.9 KiB
Python
93 lines
4.9 KiB
Python
#!/usr/bin/env python3
|
||
"""Update L5-01 + create L5-02 sheets."""
|
||
import json, subprocess
|
||
|
||
S = "BQansBM0eh42xgtaO3OckqDCnTe"
|
||
C = "/root/.openclaw/credentials/xiaobian/config.json"
|
||
|
||
def token():
|
||
aid = subprocess.run(["jq","-r",".apps[0].appId",C],capture_output=True,text=True).stdout.strip()
|
||
asec = subprocess.run(["jq","-r",".apps[0].appSecret",C],capture_output=True,text=True).stdout.strip()
|
||
r = subprocess.run(["curl","-s","-X","POST",
|
||
"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
|
||
"-H","Content-Type: application/json",
|
||
"-d",json.dumps({"app_id":aid,"app_secret":asec})],
|
||
capture_output=True,text=True).stdout
|
||
return json.loads(r)["tenant_access_token"]
|
||
|
||
def api(m,u,d=None):
|
||
t = token()
|
||
a = ["curl","-s","-X",m,u,"-H",f"Authorization: Bearer {t}","-H","Content-Type: application/json"]
|
||
if d: a.extend(["-d",json.dumps(d,ensure_ascii=False)])
|
||
return json.loads(subprocess.run(a,capture_output=True,text=True).stdout)
|
||
|
||
# === STEP 1: UPDATE 段① ===
|
||
r = api("GET",f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{S}/values/OpBte!A1:D69")
|
||
rows = r["data"]["valueRange"]["values"]
|
||
print(f"READ 段①: {len(rows)} rows")
|
||
|
||
# Changes:
|
||
# 1. Replace rows 7-16 (idx 6-15) with new 6-row opening
|
||
new_open = [
|
||
["","","Ben","Whoa! It is like a secret base!"],
|
||
["","","Sue","A secret base? Ben, your mouth is wide open!"],
|
||
["","","Ben","I can not help it! It is fantastic!"],
|
||
["","","Vicky","Look. The blue lines go to that big ball."],
|
||
["","","May","What a beautiful place."],
|
||
["中互动","","User","He is right. What a fantastic place!"],
|
||
]
|
||
new_rows = rows[:7] + new_open + rows[16:]
|
||
# 2. Fix slope/steep
|
||
for rw in new_rows:
|
||
t = rw[3] if len(rw)>3 and rw[3] else ""
|
||
if t and ("slope" in t or "steep" in t):
|
||
old = rw[3]
|
||
rw[3] = t.replace("The slope is too steep.","It can not go down.")
|
||
print(f"FIXED: {old} -> {rw[3]}")
|
||
|
||
payload = {"valueRange":{"range":f"OpBte!A1:D{len(new_rows)}","values":new_rows}}
|
||
wr = api("PUT",f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{S}/values",payload)
|
||
print(f"UPDATE 段①: {wr.get('code')} rows={len(new_rows)}")
|
||
|
||
# === STEP 2: CREATE 段② ===
|
||
cr = api("POST",f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{S}/sheets_batch_update",
|
||
{"requests":[{"addSheet":{"properties":{"title":"段② 妈妈的怀抱"}}}]})
|
||
sid2 = cr["data"]["replies"][0]["addSheet"]["properties"]["sheetId"]
|
||
print(f"CREATED 段② sheet: {sid2}")
|
||
|
||
# === STEP 3: WRITE 段② ===
|
||
seg2 = [
|
||
["类型","剧情描述","角色名","编剧台词"],
|
||
["TL","【场景】地下空间·竖井层\n斜坡通道的尽头,巨大的圆形竖井展开在眼前。\n竖井入口被巨型球体堵住——球体表面布满圆形凹槽,每个都和一颗Roball大小完全匹配。","",""],
|
||
["TL","Roballs围着球体兴奋打转。一颗Roball滚到凹槽前,轻轻跳了进去——完美嵌合。凹槽发出蓝光。","",""],
|
||
["","更多Roballs跟着跳进自己的位置。球体上的光点一个个亮起——像点亮的星星。","",""],
|
||
["","","Ben","They all have a home!"],
|
||
["","","Sue","Each one in its own spot."],
|
||
["","","May","What a beautiful sight."],
|
||
["","","Vicky","Everything has a place here."],
|
||
["","所有Roballs都嵌进凹槽。球体现在是蓝光点组成的满月。","",""],
|
||
["","","Gaia","At the end of the day, everyone comes home."],
|
||
["TL","【特效】Gaia举起双臂。球体上的光点同时暴亮——能量从每个凹槽汇入Gaia脚下。\n一个巨大的半透明防护罩从平台升起,向上展开,笼罩整个地下空间。","",""],
|
||
["TL","沙尘暴扑下来——打在防护罩上,沙子无声滑落。内部平静如止水。","",""],
|
||
["","","Ben","Whoa! The sand can not get in!"],
|
||
["","","Sue","We are... inside a bubble?"],
|
||
["","","Vicky","Not a bubble. A shield."],
|
||
["","","May","I feel so safe. Like in mom's arms."],
|
||
["","","Ben","It is fantastic!"],
|
||
["中互动","","User","This is fantastic. We are all safe here."],
|
||
["","Gaia缓缓放下手臂。防护罩保持稳定,柔和的蓝光照在每个人脸上。","",""],
|
||
["","","Vicky","At the end of the day, we are all safe."],
|
||
["中互动","","User","At the end of the day, we are home."],
|
||
["TL","【转场】防护罩下的地下空间平静而温暖。\n沙尘暴仍在远处呼啸——但这里,就像躺在妈妈的怀抱里。","",""],
|
||
]
|
||
|
||
payload2 = {"valueRange":{"range":f"{sid2}!A1:D{len(seg2)}","values":seg2}}
|
||
w2 = api("PUT",f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{S}/values",payload2)
|
||
print(f"WRITE 段②: {w2.get('code')} rows={len(seg2)-1}")
|
||
|
||
# Verify
|
||
v = api("GET",f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{S}/values/{sid2}!A1:D5")
|
||
print("VERIFY 段② header:")
|
||
for rw in v["data"]["valueRange"]["values"]:
|
||
print(f" {rw[0] if rw else ''} | {rw[3] if len(rw)>3 else ''}")
|