Разное
wechat-article-down
zyw-Wayne/wechat-article-downClaude Code Skill для загрузки статей из WeChat Public Accounts. Автоматически извлекает текст, изображения, аудио и видео, конвертирует HTML в Markdown с сохранением форматирования. Поддерживает пакетную обработку и обход CDN-защиты WeChat.
Установка
terminal
bash
npx skills add https://github.com/zyw-Wayne/wechat-article-downREADME
wechat-article-down
Инструмент для загрузки статей из WeChat Public Accounts — Claude Code Skill, который автоматически извлекает содержимое статей через браузер, скачивает изображения, аудио, видео и сохраняет всё в Markdown.
Возможности
- Автоматическое извлечение метаданных: заголовок, автор, название паблика, дата публикации, аннотация
- Загрузка изображений из текста (с обходом CDN-защиты WeChat), аудио и видео (поддержка yt-dlp)
- Конвертация HTML в Markdown с сохранением блоков кода, таблиц, списков
- Поддержка пакетной обработки нескольких статей
Зависимости
- Node.js >= 16 (без
npm install— только стандартная библиотека) - chrome-devtools MCP (обязательно, используется для автоматизации браузера)
- yt-dlp (опционально, для загрузки видео с Tencent Video и др.):
brew install yt-dlp
Структура проекта
wechat-article-down/
├── SKILL.md # Определение Claude Code Skill (описание процесса)
├── README.md
├── scripts/
│ ├── receiver.js # Локальный JSON-сервер (порт 17329)
│ └── download_article.js # Загрузка контента и конвертация в Markdown
└── references/
└── extract.js # Скрипт извлечения данных (выполняется в браузере)
Рабочий процесс
Проверка ссылки → Запуск сервера → Открытие страницы → Ожидание загрузки → Прокрутка для lazy-load → Извлечение данных и POST → Загрузка ресурсов → Генерация Markdown
- Проверка ссылки: URL должен начинаться с
https://mp.weixin.qq.com/ - Запуск сервера:
receiver.jsслушает порт 17329 и принимает данные статьи через POST из браузера - Открытие страницы: навигация к URL статьи через chrome-devtools MCP
- Ожидание загрузки: выполнение
WAIT_SCRIPTдля подтверждения рендеринга#js_content - Прокрутка для lazy-load: выполнение
SCROLL_SCRIPT, чтобы всеsrcизображений были заменены сdata-srcна реальные CDN-адреса - Извлечение и отправка данных: выполнение
SAVE_SCRIPT— извлечение полного JSON в браузере и POST на локальный сервер - Загрузка ресурсов:
download_article.jsчитает JSON и пакетно скачивает изображения, аудио, видео - Генерация Markdown: конвертация HTML в Markdown, замена ссылок на ресурсы локальными путями, вывод
article.md
Структура выходных файлов
downloads/
└── Заголовок статьи/
├── article.md # Markdown-текст (с YAML frontmatter)
├── images/
│ ├── img_001.jpg
│ ├── img_002.png
│ └── ...
├── audio/
│ └── audio_001.mp3
├── video/
│ └── video_001.mp4
└── failed.log # Лог ошибок загрузки (если есть)
Установка
npx skills add https://github.com/zyw-Wayne/wechat-article-down
Использование
Как Claude Code Skill
После установки достаточно отправить Claude ссылку на статью WeChat:
下载这篇文章:https://mp.weixin.qq.com/s/xxxxx
Ключевые фразы для активации: 下载微信文章, 保存公众号文章, 下载这篇文章, wechat article download
Самостоятельное использование download_article.js
bash
# Чтение JSON из стандартного ввода
echo '<json>' | node scripts/download_article.js --stdin --output ./downloads
# Чтение из файла
node scripts/download_article.js --stdin --output ./downloads < /tmp/wechat_article_data.json
# Передача JSON-строки напрямую
node scripts/download_article.js --data '{"url":"...","title":"测试","contentHtml":"<p>内容</p>","images":[]}'Формат JSON-данных
json
{
"url": "https://mp.weixin.qq.com/...",
"title": "文章标题",
"author": "作者",
"account": "公众号名称",
"publishTime": "2024-01-15 10:30:00",
"digest": "文章摘要",
"contentHtml": "<div>...</div>",
"images": ["https://mmbiz.qpic.cn/..."],
"audios": [{"src": "https://...", "name": "音频名称"}],
"videos": [{"src": "https://...", "poster": "封面URL", "vid": "腾讯视频ID"}]
}Технические детали
- Обход CDN-защиты: WeChat CDN (
mmbiz.qpic.cn) требует заголовокRefererс полным URL статьи — скрипт устанавливает его автоматически - Определение формата изображений: расширение выводится из параметра запроса
?wx_fmt=jpegили сегмента пути/mmbiz_jpg/ - Обработка lazy-load: симуляция прокрутки запускает ленивую загрузку изображений, гарантируя наличие реальных адресов в атрибуте
src - Целостность данных: рекомендуется использовать
SAVE_SCRIPTс прямым POST из браузера, чтобы избежать усечения большогоcontentHtmlпри передаче через Claude - Резервный режим: если сервер недоступен, используется
EXTRACT_SCRIPTс записью в файл - Распознавание блоков кода: автоматическое определение блоков кода WeChat (моноширинный шрифт или тёмный фон) и конвертация в Markdown-блоки кода