| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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()
|