import re import json from pathlib import Path ROOT = Path(__file__).resolve().parents[1] MD_DIR = ROOT / "doc" / "文档" / "QiWe开放平台文档" / "md" README = ROOT / "doc" / "文档" / "QiWe开放平台文档" / "README.md" API_FILES = { "API-01": [], "API-02": [ "创建设备(步骤1).md", "二维码-获取(步骤2).md", "二维码状态-检测(步骤3).md", "二维码-code验证(步骤4).md", ], "API-03": ["设置回调地址.md"], "API-04": ["回调结构说明.md"], "API-05": ["用户状态.md"], "API-06": ["同步历史消息分页.md"], "API-07": ["群分页.md"], "API-08": ["群详情-批量.md"], "API-09": ["群成员变动查询.md"], "API-10": ["创建群.md"], "API-11": ["修改群公告.md"], "API-12": ["群消息置顶-列表.md"], "API-13": ["群消息置顶-添加.md"], "API-14": ["发送纯文本消息.md"], "API-15": ["群发消息.md"], "API-16": ["群发消息-状态查询.md"], "API-17": ["外部联系人分页.md"], "API-18": ["联系人详情-批量.md"], "API-19": ["客户标签-增删.md"], "API-20": ["添加群成员好友.md"], "API-21": ["企微文件下载.md"], } def extract(path: Path) -> dict: if not path.exists(): return {} text = path.read_text(encoding="utf-8") out: dict = {} mm = re.search(r'"method"\s*:\s*"([^"]+)"', text) if mm: out["method"] = mm.group(1) blocks = re.findall(r"```\s*\n\s*(\{[\s\S]*?\})\s*\n\s*```", text) for b in blocks: if '"method"' in b and "params" in b: out["request"] = b.strip() break for b in blocks: if '"code"' in b and "data" in b and "method" not in b: out["response"] = b.strip() break # notes from bullet lines notes = [ ln.strip("•").strip() for ln in text.splitlines() if ln.strip().startswith("•") or ln.strip().startswith("-") ] if notes: out["notes"] = notes[:5] return out def main(): index = {} for line in README.read_text(encoding="utf-8").splitlines(): m = re.match(r"- \[(.+?)\]\(md/(.+?)\) - (https://.+)", line) if m: index[m.group(2)] = {"title": m.group(1), "url": m.group(3)} result = {} for api, files in API_FILES.items(): result[api] = {"files": []} for f in files: p = MD_DIR / f info = extract(p) info["file"] = f info["local"] = f"./文档/QiWe开放平台文档/md/{f}" if f in index: info["title"] = index[f]["title"] info["url"] = index[f]["url"] result[api]["files"].append(info) if info.get("method") and "method" not in result[api]: result[api]["method"] = info["method"] out = ROOT / "doc" / "文档" / "qiwei_api_extracted.json" out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8") print("wrote", out) for api, data in result.items(): print(api, data.get("method", "-"), len(data["files"])) if __name__ == "__main__": main()