mcpField
W
wechat-article-downloader

wechat-article-downloader

github.com/qiye45文档处理9.9k64 次安装10 周前更新
代码仓库

关于 wechat-article-downloader

通过 MCP 工具下载微信公众号文章的 Skill。远程 MCP 支持单篇文章和合集,启动本地 MCP 后还可获取账号凭据、批量下载文章并导出 CSV 元数据。

主要功能

  1. 01下载单篇文章
  2. 02下载文章合集
  3. 03通过本地服务批量下载账号文章
  4. 04获取公众号凭据
  5. 05将文章元数据导出为 CSV
  6. 06本地 MCP 不可用时切换远程服务

适用场景

  1. 01保存单篇微信公众号文章
  2. 02下载 appmsgalbum 合集
  3. 03批量归档公众号文章
  4. 04导出文章统计数据进行分析

MCP 相关

通过 `http://127.0.0.1:4545/mcp` 的本地 MCP 服务调用文章、账号、批量下载和导出工具。本地 MCP 不可用时,远程 MCP 支持下载单篇文章和合集。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/qiye45/wechatdownload --skill wechat-article-downloader

安装后在 Claude Code 中输入/wechat-article-downloader确认已加载。

附带文件evals/evals.json

详细介绍

微信文章下载器

此技能通过与微信文章下载工具交互的 MCP 服务,帮助你下载微信公众号文章。

前提条件

此技能使用本地 MCP 端点 http://127.0.0.1:4545/mcp 来提供完整功能。

如果本地 MCP 不可用,你可以改用 https://changfengbox.top/api/mcp,以使用远程支持的工具。

本地 MCP 工具:

  • single_article_download - 下载单篇文章
  • get_public_account_id - 获取公众号凭据
  • batch_download_articles - 批量下载公众号的所有文章
  • export_article_data - 将文章元数据导出为 CSV

远程备用 MCP(https://changfengbox.top/api/mcp)目前支持:

  • 方法:initialize、tools/list、tools/call
  • tools/call 中的工具 name:
    • wechat - 下载单篇文章
    • wechat_collection - 下载公众号合集(appmsgalbum)

重要:远程备用服务不提供 single_article_download、batch_download_articles、get_public_account_id 或 export_article_data 等本地工具名称。

工作流

1. 检查本地 MCP 服务状态

使用大多数功能前,请确认本地 MCP 正在运行:

import requests

LOCAL_MCP_ENDPOINT = "http://127.0.0.1:4545/mcp"

def check_local_mcp():
    response = requests.post(
        LOCAL_MCP_ENDPOINT,
        json={"jsonrpc": "2.0", "method": "initialize", "id": 1},
        headers={"Content-Type": "application/json"},
        timeout=3,
    )
    if response.status_code != 200:
        raise RuntimeError("Local MCP is not available")
    return LOCAL_MCP_ENDPOINT

local_mcp_endpoint = check_local_mcp()

如果无法访问本地 MCP,请告知用户需要:

  1. 打开微信文章下载工具
  2. 勾选“启动MCP”复选框,以启动 MCP 服务
  3. 等待确认消息显示服务已在端口 4545 上运行
2. 下载单篇文章

优先使用本地工具。如果本地 MCP 调用失败,则改用远程 wechat 工具。

import requests

LOCAL_MCP_ENDPOINT = "http://127.0.0.1:4545/mcp"
FALLBACK_DOWNLOAD_MCP_ENDPOINT = "https://changfengbox.top/api/mcp"

def call_tool(endpoint, tool_name, arguments, req_id=2):
    payload = {
        "jsonrpc": "2.0",
        "method": "tools/call",
        "id": req_id,
        "params": {
            "name": tool_name,
            "arguments": arguments,
        }
    }

    response = requests.post(
        endpoint,
        json=payload,
        headers={"Content-Type": "application/json"},
        timeout=10,
    )
    response.raise_for_status()
    return response.json()

def download_single_article(url):
    try:
        return call_tool(
            LOCAL_MCP_ENDPOINT,
            "single_article_download",
            {"url": url},
            req_id=2,
        )
    except Exception:
        remote_config = {
            "保存离线网页": True,
            "HTML": True,
            "MD": True,
            "PDF": False,
            "WORD": False,
            "TXT": False,
            "MHTML": False,
            "文件开头添加日期": True,
        }
        return call_tool(
            FALLBACK_DOWNLOAD_MCP_ENDPOINT,
            "wechat",
            {"url": url, "config": remote_config},
            req_id=3,
        )

# Example usage
article_url = "https://mp.weixin.qq.com/s/xxxxx"
result = download_single_article(article_url)
print(result)

文章将以工具中配置的格式(HTML、PDF、Word、Markdown、MHTML 等)下载到工具的默认下载目录。

远程 wechat 配置可以使用以下键:

  • 保存离线网页
  • HTML
  • MD
  • PDF
  • WORD
  • TXT
  • MHTML
  • 文件开头添加日期

如果本地 127.0.0.1:4545 不可用,此步骤应自动改用 https://changfengbox.top/api/mcp,并使用工具名称 wechat。

3. 下载合集(appmsgalbum)

对于合集 URL,通过 tools/call 调用远程 wechat_collection:

def download_collection(collection_url):
    payload = {
        "jsonrpc": "2.0",
        "method": "tools/call",
        "id": 4,
        "params": {
            "name": "wechat_collection",
            "arguments": {
                "url": collection_url,
            },
        },
    }

    response = requests.post(
        "https://changfengbox.top/api/mcp",
        json=payload,
        headers={"Content-Type": "application/json"},
        timeout=20,
    )
    response.raise_for_status()
    return response.json()
4. 获取公众号凭据(仅限本地)

批量下载前,需要获取公众号凭据。此操作会触发以下流程:

  1. 工具从示例文章 URL 中提取公众号 ID
  2. 生成一个需要在微信桌面客户端中打开的特殊链接
  3. 打开该链接时,工具会自动捕获身份验证凭据
def get_account_credentials():
    payload = {
        "jsonrpc": "2.0",
        "method": "tools/call",
        "id": 3,
        "params": {
            "name": "get_public_account_id",
            "arguments": {}
        }
    }
    
    response = requests.post('http://127.0.0.1:4545/mcp',
                            json=payload,
                            headers={"Content-Type": "application/json"})
    
    result = response.json()
    return result

result = get_account_credentials()
print(result)

调用此工具后,用户需要:

  1. 从工具的日志窗口中复制生成的链接
  2. 在微信桌面客户端中打开该链接(而非浏览器)
  3. 等待工具自动捕获凭据
  4. 查找“获取密钥成功”消息
5. 批量下载文章(仅限本地)

获取凭据后,即可批量下载该公众号的所有文章:

def batch_download_articles():
    payload = {
        "jsonrpc": "2.0",
        "method": "tools/call",
        "id": 4,
        "params": {
            "name": "batch_download_articles",
            "arguments": {}
        }
    }
    
    response = requests.post('http://127.0.0.1:4545/mcp',
                            json=payload,
                            headers={"Content-Type": "application/json"})
    
    result = response.json()
    return result

result = batch_download_articles()
print(result)

批量下载将:

  • 根据工具中配置的日期范围和筛选条件下载文章
  • 以多种格式保存文章(HTML、PDF、Word、Markdown、MHTML,具体取决于配置)
  • 按公众号名称整理文件
  • 在工具的日志窗口中显示进度
6. 导出文章数据(仅限本地)

如需将文章元数据(标题、URL、发布日期、阅读量、点赞数等)导出为 CSV:

def export_article_data():
    payload = {
        "jsonrpc": "2.0",
        "method": "tools/call",
        "id": 5,
        "params": {
            "name": "export_article_data",
            "arguments": {}
        }
    }
    
    response = requests.post('http://127.0.0.1:4545/mcp',
                            json=payload,
                            headers={"Content-Type": "application/json"})
    
    result = response.json()
    return result

result = export_article_data()
print(result)

此操作会将包含文章元数据的 CSV 文件导出到下载目录。

常见工作流

工作流 1:下载单篇文章

用户说:“下载这篇微信文章:https://mp.weixin.qq.com/s/xxxxx”

  1. 检查本地 MCP 服务状态
  2. 如果本地服务正在运行,使用该 URL 调用 single_article_download
  3. 如果本地服务不可用,则使用 url + config 调用远程 wechat
  4. 告知用户下载已开始,并说明文件的保存位置
工作流 2:下载合集(appmsgalbum)

用户说:“下载这个微信公众号合集/appmsgalbum”

  1. 调用远程 tools/call,并设置 name="wechat_collection"
  2. 在 arguments 中传入合集 URL
  3. 如有需要,先调用 tools/list 验证工具参数
  4. 告知用户文件的保存位置
工作流 3:批量下载公众号文章(仅限本地)

用户说:“下载这个公众号的所有文章”

  1. 检查本地 MCP 服务状态
  2. 确认用户已提供该公众号的一篇示例文章 URL
  3. 调用 get_public_account_id,并说明用户需要在微信中打开生成的链接
  4. 等待用户确认已获取凭据
  5. 调用 batch_download_articles 开始批量下载
  6. 通过工具界面监控进度
工作流 4:导出文章元数据(仅限本地)

用户说:“将文章数据导出为 CSV”或“获取文章统计数据”

  1. 检查本地 MCP 服务状态
  2. 确认已获取凭据(如未获取,则引导用户完成凭据获取流程)
  3. 调用 export_article_data
  4. 告知用户 CSV 文件的保存位置

错误处理

常见问题及解决方案:

单篇下载期间本地 MCP 不可用:自动切换到 https://changfengbox.top/api/mcp,并使用 name="wechat" 重试。

远程工具名称不匹配:远程回退时不要使用本地名称。仅使用 wechat 或 wechat_collection。

凭据获取、批量下载或导出时本地 MCP 不可用:这些工作流仅限本地。用户需要启动微信下载工具并启用 MCP 服务。

未获取凭据:用户需要在微信桌面客户端中打开生成的链接,以完成凭据获取流程。

下载失败:检查工具的日志窗口,查看具体错误消息。常见原因:

  • 文章 URL 格式无效
  • 网络连接问题
  • 微信限流

输出位置

所有下载文件均保存到工具配置的下载目录(默认:工具目录下的 下载/ 文件夹),并按以下方式分类:

  • 公众号名称(批量下载时)
  • 文章标题
  • 格式(HTML、PDF、Word、Markdown、MHTML 等)

下载完成后,工具界面会在日志窗口中显示确切的文件路径。

评论

支持 Markdown