feat: collect complete Feishu media assets
This commit is contained in:
@@ -7,10 +7,11 @@ from paths import RAW_DIR, LINKS_DIR, normalize_messages
|
||||
FEISHU_RE = re.compile(r'https?://[a-zA-Z0-9.-]+\.feishu\.cn/(?:wiki|docx)/[A-Za-z0-9]+')
|
||||
FILE_RE = re.compile(r'\[文件\]\s+(.+?)\s+fileId:\s+(\S+)')
|
||||
KIMI_RE = re.compile(r'https?://[a-zA-Z0-9.-]+\.ok\.kimi\.link/\S*')
|
||||
MEDIA_RE = re.compile(r'mediaId=([^\s)]+)')
|
||||
|
||||
def extract(messages):
|
||||
feishu, files, kimi = [], [], []
|
||||
seen_f, seen_files = set(), set()
|
||||
feishu, files, kimi, media = [], [], [], []
|
||||
seen_f, seen_files, seen_media = set(), set(), set()
|
||||
for grp, msgs in messages.items():
|
||||
for m in msgs:
|
||||
c, s, t = m.get("content",""), m.get("sender","?"), m.get("createTime","")
|
||||
@@ -25,7 +26,19 @@ def extract(messages):
|
||||
files.append({"name":name.strip(),"fileId":fid,"sender":s,"time":t,"group":grp})
|
||||
for url in KIMI_RE.findall(c):
|
||||
kimi.append({"url":url,"desc":c.split("https")[0].strip()[:80],"sender":s,"group":grp})
|
||||
return {"feishu_links":feishu,"file_attachments":files,"kimi_links":kimi}
|
||||
for resource_id in MEDIA_RE.findall(c):
|
||||
message_id = m.get("openMessageId", "")
|
||||
key = message_id or resource_id
|
||||
if key not in seen_media:
|
||||
seen_media.add(key)
|
||||
media.append({
|
||||
"resourceId": resource_id,
|
||||
"messageId": message_id,
|
||||
"conversationId": m.get("openConversationId", ""),
|
||||
"mediaType": "video" if "[视频消息]" in c else "image",
|
||||
"sender": s, "time": t, "group": grp,
|
||||
})
|
||||
return {"feishu_links":feishu,"file_attachments":files,"kimi_links":kimi,"chat_media":media}
|
||||
|
||||
def load_json(path, default):
|
||||
if not os.path.isfile(path): return default
|
||||
@@ -55,10 +68,12 @@ def main():
|
||||
old_links = load_json(os.path.join(LINKS_DIR,"all_feishu_links.json"), {}).get("links",[])
|
||||
old_files = load_json(os.path.join(LINKS_DIR,"all_file_attachments.json"), [])
|
||||
old_kimi = load_json(os.path.join(LINKS_DIR,"all_kimi_links.json"), [])
|
||||
old_media = load_json(os.path.join(LINKS_DIR,"all_chat_media.json"), [])
|
||||
r["feishu_links"] = merge_by_key(old_links, r["feishu_links"], "doc_id")
|
||||
r["file_attachments"] = merge_by_key(old_files, r["file_attachments"], "fileId")
|
||||
r["kimi_links"] = merge_by_key(old_kimi, r["kimi_links"], "url")
|
||||
print(f"飞书: {len(r['feishu_links'])}, 附件: {len(r['file_attachments'])}, Kimi: {len(r['kimi_links'])}")
|
||||
r["chat_media"] = merge_by_key(old_media, r["chat_media"], "messageId")
|
||||
print(f"飞书: {len(r['feishu_links'])}, 附件: {len(r['file_attachments'])}, 媒体: {len(r['chat_media'])}, Kimi: {len(r['kimi_links'])}")
|
||||
for grp in messages:
|
||||
gl = [l for l in r['feishu_links'] if l['group']==grp]
|
||||
gf = [f for f in r['file_attachments'] if f['group']==grp]
|
||||
@@ -70,6 +85,8 @@ def main():
|
||||
json.dump(r['file_attachments'],f,ensure_ascii=False,indent=2)
|
||||
with open(os.path.join(LINKS_DIR,"all_kimi_links.json"),"w",encoding="utf-8") as f:
|
||||
json.dump(r['kimi_links'],f,ensure_ascii=False,indent=2)
|
||||
with open(os.path.join(LINKS_DIR,"all_chat_media.json"),"w",encoding="utf-8") as f:
|
||||
json.dump(r['chat_media'],f,ensure_ascii=False,indent=2)
|
||||
print(f"保存至: {LINKS_DIR}")
|
||||
|
||||
if __name__ == "__main__": main()
|
||||
|
||||
Reference in New Issue
Block a user