Install
openclaw skills install feishu-sheet-linksExtract all hyperlinks from a public Feishu spreadsheet across all sheet tabs, and optionally batch-download the linked articles as Markdown files. Use when the user shares a Feishu URL (feishu.cn/wiki or feishu.cn/sheets) and wants to extract links, scrape article titles, collect URLs from a Feishu doc, download content from Feishu, or build a local copy of Feishu articles. Also use when the user says things like "帮我下载飞书的链接", "把飞书表格里的链接提取出来", or "下载飞书文章".
openclaw skills install feishu-sheet-linksExtracts all hyperlinks from every sheet tab of a public Feishu spreadsheet, then optionally batch-downloads the linked articles as Markdown files.
When invoked, follow these steps:
If the user has already provided a Feishu URL, use it. Otherwise ask:
"请提供飞书多维表格的链接(公开可访问的)"
Confirm the URL looks like https://*.feishu.cn/wiki/... or https://*.feishu.cn/sheets/....
Resolve the skill directory:
SKILL_DIR="$(find ~/.claude/skills /workspace/.claude/skills -maxdepth 1 -name feishu-sheet-links -type d 2>/dev/null | head -1)"
Run the extraction script:
npx -y bun "${SKILL_DIR}/scripts/main.ts" "<spreadsheet-url>" -o feishu-links.json
Each sheet tab takes 8–15 seconds to load — let the user know it may take a moment.
After extraction, show the user a summary:
Example:
Found 4 sheets, 127 links total:
- 1月: 32 links
- 2月: 28 links
- 3月: 35 links
- 4月: 32 links
Saved to: feishu-links.json
Ask the user if they want to download the linked articles as Markdown:
"是否需要批量下载这些文章为 Markdown 文件?"
If yes, ask for an output directory (default: ./feishu-articles), then run:
npx -y bun "${SKILL_DIR}/scripts/download.ts" feishu-links.json \
-o <output-dir> \
-c 5 \
--max-wait 20000
Download supports resume — if interrupted, re-running skips already-downloaded files.
| Situation | Action |
|---|---|
| Document is private / requires login | Tell the user — this tool only works with public Feishu docs |
| Chrome not found | Ask user to install Chrome, or set FEISHU_CHROME_PATH |
| A sheet times out | Warn and continue — other sheets will still be extracted |
| Zero links found | Confirm the URL is correct and the doc is publicly accessible |
spreadApp.collaborativeSpread._spread.sheetIdToIndexMap?sheet=<id>, calls setActiveSheetIndex() to trigger lazy loading, and waits for sheet._dataModel.contentModel to populatecontentModel.link.idToRef._map (whole-cell hyperlinks)contentModel.segmentModel.table (inline rich-text links)| Variable | Description |
|---|---|
FEISHU_CHROME_PATH | Custom Chrome executable path |
FEISHU_CHROME_PROFILE | Custom Chrome profile directory |