据 AlphaMoat 统计,截至 2026-09,WeChat Work Doc Fetcher 累计下载 1,733 次、获 0 个星标,在全部 5,078 个 AI 技能中排名第 4,623 位,在「开发编程」分类(577 个)中排名第 545 位。
| 平台 | 累计安装 | 累计下载 | 星标 | 评论 |
|---|---|---|---|---|
| ClawHub ↗ | 41 | 1,390 | - | - |
| SkillHub ↗ | 227 | 1,733 | - | — |
各平台的计数口径不同,统计时间不一致。
从企业微信开发者文档站点获取指定页面,将内容清理并转换为 Markdown,可打印到终端或保存为本地 Obsidian 笔记。该站点需要已登录的会话;工作流会处理会话 Cookie。应只在可信本地环境使用,不要把真实 Cookie 写入源文件、命令历史或共享日志,并在泄露时及时撤销或更换。
资料发布于 2026-10-27
以下是根据技能文档生成的示例,不代表实际运行结果。
2026-09 起统计方法调整:同名技能按作者分别统计,并覆盖全部技能。图中虚线为调整前的月份,与之后的数据不直接比较,也不计算跨越调整的增长。
| 月份 | 累计下载 | 环比 | 星标 |
|---|---|---|---|
| 2026-09 | 1,733 | — | - |
| 2026-08 | 1,514 | +9.6% | - |
| 2026-07 | 1,381 | +18.9% | - |
| 2026-06 | 1,161 | +12.7% | - |
| 2026-05 | 1,030 | — | - |
| 2026-03 | 766 | — | - |
以下是作者发布的原始文件,按纯文本显示,本站未做修改或审核;其中的链接不可点击,命令请核实后再运行。抓取于 2026-10-23。
# wecom-doc-fetcher Use this skill when the user wants to save any page from the WeChat Work (企业微信) developer documentation site (`developer.work.weixin.qq.com/document/path/*`) as a clean Markdown file in their Obsidian vault. ## Files in this skill ``` wecom-doc-fetcher/ ├── SKILL.md # this file └── wx_doc_fetch.py # the fetch & convert script
``` --- ## Setup (one-time) Run these once before using the skill: ```bash pip install requests playwright playwright install chromium ``` > `playwright install chromium` downloads a ~150 MB headless Chromium binary. This is required for automatic `doc_id` detection. Python 3.8+ is required. --- ## Usage Place `wx_doc_fetch.py` anywhere convenient (e.g. your vault's scripts folder), then run: ```bash # Basic: auto-detect doc_id, print to stdout python wx_doc_fetch.py <URL> # Save to file python wx_doc_fetch.py <URL> output.md # Skip Playwright, supply doc_id manually python wx_doc_fetch.py <URL> output.md --doc-id <integer> # Override cookies at runtime python wx_doc_fetch.py <URL> output.md --cookies "wwapidoc.sid=xxx; ..." ``` ### Example ```bash python wx_doc_fetch.py https://developer.work.weixin.qq.com/document/path/94677 发送消息.md # [info] path_id=94677 doc_id=31152 # [done] 已写入:发送消息.md ``` --- ## How It Works The WeChat Work docs site is a Vue SPA — the visible content is **not in the initial HTML**. It is loaded at runtime via a private POST API: ``` POST https://developer.work.weixin.qq.com/docFetch/fetchCnt?lang=zh_CN&ajax=1&f=json Body: doc_id=<integer> (application/x-www-form-urlencoded) ``` The response includes `data.content_md` — the page content as a Markdown string. The script fetches this field, cleans it, and writes the result. ### Why not WebFetch / defuddle? The page renders client-side. `WebFetch` and `defuddle` only see the pre-JS HTML skeleton — no content. Scraping `innerText` via browser tools works but produces a very large accessibility tree with poor formatting. The `content_md` API field is the cleanest, most token-efficient source. ### URL path ID ≠ doc_id The number in the browser URL (e.g. `94677`) is a routing slug — **not** the `doc_id` the API needs. The actual `doc_id` (e.g. `31152`) is determined at runtime by loading the page with Playwright and intercepting the `fetchCnt` XHR request. --- ## Manual doc_id Fallback If Playwright is unavailable or times out: 1. Open the target URL in Chrome 2. DevTools → **Network** tab → filter by `fetchCnt` 3. Click the request → **Payload** tab 4. Read the `doc_id` value 5. Pass it with `--doc-id`: ```bash python wx_doc_fetch.py https://developer.work.weixin.qq.com/document/path/94677 发送消息.md --doc-id 31152 ``` --- ## Cookie Configuration The `fetchCnt` API requires an authenticated session. Playwright's headless browser obtains session cookies automatically when loading the page — **no manual cookie setup needed for normal use**. If you see `errCode: -30001` in the output, the session is rejected. Fix: 1. Open the site in Chrome while logged in 2. DevTools → Network → any `fetchCnt` request → **Copy as cURL** 3. Find the `-b '...'` cookie string in the copied command 4. Either paste it into `COOKIES_RAW` at the top of `wx_doc_fetch.py`, or pass it via `--cookies "..."` Key cookies and their lifetimes: | Cookie | Purpose | Lifetime | |--------|---------|---------| | `wwapidoc.sid` | Session identifier | ~24 hours | | `wwapidoc.token_wt` | JWT auth token | ~30 minutes | --- ## API Reference | Item | Detail | |------|--------| | Endpoint | `POST /docFetch/fetchCnt?lang=zh_CN&ajax=1&f=json&random=<rand>` | | Body | `doc_id=<integer>` (form-urlencoded) | | Auth | Session cookies | | Key response field | `data.content_md` | | Other response fields | `data.content_html`, `data.content_html_v2`, `data.content_txt`, `data.title`, `data.time` | --- ## content_md Cleaning Rules The `content_md` field is mostly valid CommonMark but has site-specific issues. The `clean_md()` function in `wx_doc_fetch.py` handles all of them: | # | Problem | Raw example | After cleaning | |---|---------|-------------|----------------| | 1 | `[TOC]` marker at top | `[TOC]\n# 概述` | `# 概述` | | 2 | Heading missing space after `#` | `##接口定义` | `## 接口定义` | | 3 | Internal numeric anchor links | `[接收事件](#12977)` | `接收事件` | | 3 | Anchors with sub-path | `[开启API](#31106/如何开启API)` | `开启API` | | 4 | HTML line breaks inside table cells | `说明</br>补充` | `说明 补充` | | 5 | `<b>` bold tags | `<b>注意</b>` | `**注意**` | | 6 | `<code>` inline tags | `<code>open_kfid</code>` | `` `open_kfid` `` | | 7 | `<font>` color tags | `<font color="red">警告</font>` | `警告` | | 8 | `!!#rrggbb text!!` site-specific highlight | `!!#ff0000 重要!!` | `重要` | | 9 | Leading spaces before table rows | `··\| 参数 \|` | `\| 参数 \|` | | 10 | No blank line before table (Obsidian won't render) | `文字\n\| col \|` | `文字\n\n\| col \|` | | 11 | Excess blank lines | 3+ `\n` in a row | 2 `\n` max | ### Rule 10 — critical regex note The blank-line-before-table rule must match on **lines that don't start with `|`**, not just on the trailing character of the previous line: ```python # CORRECT — matches on start of line, avoids breaking table rows apart re.sub(r"^([^|\n][^\n]*)\n(\|)", r"\1\n\n\2", content, flags=re.MULTILINE) # WRONG — table rows end with "| " (trailing space), so last char is space, # causing blank lines to be inserted between every table row re.sub(r"([^\n])\n(\|)", r"\1\n\n\2", content) ```
用 gh 命令行工具查看 GitHub 上的 PR 检查、工作流运行与 API 查询的技能。
聚合 16 个搜索引擎、无需 API Key 的检索技能。
用命令行直接列出、配置、授权并调用 MCP 服务与工具。
生成有效的 Mermaid 图表,如流程图、时序图、思维导图、ER 图、用户旅程等。
用受管 OAuth 访问 YouTube Data API,检索视频并管理频道内容。
通过受管的 OAuth 连接访问 GitHub REST API。
覆盖规划、实现、验证与测试的编码工作流技能。
整理 Docker 常用命令与容器工作流的技能。
数据月份:2026-09 · 下载/星标/安装数聚合自公开技能注册库(ClawHub、SkillHub),按月更新。口径说明见数据方法。