Back to skills
extension
Category: Data & AnalyticsNo API key required

公众号定向采集 · IMA知识库自动导入

按周期采集指定微信公众号文章,关键词过滤+四分类后自动导入IMA知识库|支持任意行业|9步全流程自动化。通过 wewe-rss 服务订阅公众号、本地 SQLite 按时间窗口和标题关键词过滤、按分类分批导入 IMA 知识库。触发词:公众号采集、公众号文章导入、IMA导入、定向采集、行业情报采集、微信公众号监控、知识库批量导入、wechat mp collect、article import。

personAuthor: user_e63d2746hubcommunity

微信公众号文章定向采集 → IMA 知识库导入

适用场景

按周期采集指定微信公众号的文章,按主题关键词过滤后分类导入 IMA 知识库。适用于行业情报追踪、竞品动态监控、技术资讯汇总等场景。

前置条件

  1. wewe-rss 服务:已部署并运行(端口 4000,SQLite 落库)。部署参考 references/wewe-rss-setup.md
  2. IMA MCP 连接器:已启用并信任(用于知识库文件夹操作和文章导入)。
  3. 微信读书账号:已通过扫码登录 wewe-rss(用于订阅公众号和刷新文章)。token 约 4 天过期,需定期重扫。
  4. accounts.json:公众号清单配置文件(格式见下文)。
  5. keywords.json:关键词配置文件(格式见下文)。

目录结构

{工作目录}/
├─ accounts.json              # 公众号清单
├─ keywords.json              # 关键词配置(命中/排除/地区分流)
├─ wewe-rss/                  # wewe-rss 服务
│  └─ apps/server/data/wewe-rss.db
├─ wda/
│  ├─ wewe_collect_db.py      # 采集主脚本
│  ├─ build_import_plan_v2.py # 导入计划生成器
│  ├─ date_utils.py           # 窗口推算与状态管理
│  ├─ poll_login2.py          # 微信读书扫码登录轮询
│  └─ .last_end.txt           # 状态文件(上次采集结束日)
└─ 任务记录/

配置文件格式

accounts.json

[
  {"name": "公众号名称", "cat": "dual|vendor|competitor", "sub": "子分类名", "url": "https://mp.weixin.qq.com/s/代表文章短链"}
]
  • cat 分类决定文章落入哪个二级文件夹:
    • dual:新闻类号,逐篇判断主题分类(需命中关键词)
    • vendor:厂商号,内容本身即行业相关(仅排除非商业内容)
    • competitor:友商号,同 vendor
  • sub:子分类名,用于厂商/友商合并(如"华为云"和"华为中国政企"合并为"华为")
  • url:该公众号任意一篇文章的短链,用于 wewe-rss 的 getMpInfo 订阅

keywords.json

{
  "hit_keywords": ["信创", "国产", "自主可控", "CPU", "操作系统", ...],
  "exclude_keywords": ["党建", "团建", "招聘", "节日", "促销", ...],
  "international_keywords": ["美国", "欧盟", "英伟达", "台积电", ...],
  "city_keywords": ["湖北", "北京", "广东", "武汉", "成都", ...],
  "local_committees": ["湖北省信创工委会", "北京信息技术应用创新工作委员会"]
}
  • hit_keywords:dual 号须命中其一才采集
  • exclude_keywords:所有号命中即丢弃
  • international_keywords:标题命中则分入"国际动态"
  • city_keywords:标题命中则分入"地市动态"
  • local_committees:账号名在此列表中的,其文章优先归入地市动态

完整工作流程(9 步)

步骤 1:计算采集窗口

python wda/date_utils.py

读取 .last_end.txt 状态文件,输出 DATE_TAG(MMDD)、START、END。窗口为 [last_end+1, 今天]

步骤 2:前置检查

  1. 检查 wewe-rss 服务:curl http://localhost:4000/。若不存活,到 wewe-rss/apps/server 执行 node dist/main 重启。
  2. 确认 IMA MCP 连接器可用:尝试 get_knowledge_base_list注意:即使 connector 面板显示 disconnected,也先尝试 ToolSearch 加载 mcp__ima-mcp__* 工具 schema,再用 DeferExecuteTool 调用——实测仍可正常执行导入(2026-08 验证)。仅当 ToolSearch 完全找不到工具时,才判定连接器不可用。

步骤 3:采集文章

cd wda && python wewe_collect_db.py <START> <END>
  • 直接查询本地 SQLite,按 publish_time 窗口 + 标题关键词过滤 + 四分类。
  • 输出:collection.json(结构化结果)、needed_subfolders.jsonweekly_report.txt
  • 严禁多进程并发(争用唯一微信读书账号会死锁)。
  • 查看 collection.json 中的 missing_feeds(未订阅账号),在汇报中标注。

步骤 4:定位 IMA 文件夹 ID

  1. get_knowledge_list(knowledge_base_id=KB_ID, limit=50) 找当期一级文件夹。
  2. get_knowledge_list(folder_id=一级ID) 获取二级文件夹。
  3. 若有三级子夹,再下一层获取。
  4. 将映射写入 wda/folder_map.json
    {"国际动态":"folder_xxx", "国内动态":"folder_xxx", "地市动态":"folder_xxx", ...}
    

步骤 5:拉取已有标题(去重用)

对每个目标文件夹调用 get_knowledge_list(folder_id=xxx, limit=200),取已有文章 title 列表,组织成 ima_existing.json

步骤 6:生成导入计划

cd wda && python build_import_plan_v2.py --folders-file folder_map.json --existing ima_existing.json
  • collection.json 读取,按分类分流,按 URL + IMA 已有标题去重。
  • 必须通过 --folders-file 传入当轮文件夹映射(无内置默认值)。
  • 可选 --kb <KB_ID> 指定 IMA 知识库 ID(或设置环境变量 IMA_KB_ID)。
  • 输出 import_plan.json(键为 folder_id,值为文章列表)。

步骤 7:分批导入

读取 import_plan.json,对每个 folder_id 的文章 URL 每批≤10条调用 import_urls。逐批确认 ret_code=0

步骤 8:收尾

python wda/date_utils.py --commit

更新 .last_end.txt 为 END,窗口自动顺延至下一周期。

步骤 9:汇报

中文汇报:采集窗口、各文件夹新增/总篇数、未订阅账号、token 状态、失败批次。

微信读书登录(token 过期时)

  1. 确保 wewe-rss 的 AUTH_CODE 已配置(环境变量 WEWE_AUTH 或命令行 --auth)。
  2. 运行 python wda/poll_login2.py --auth <AUTH_CODE>
    • 脚本自动调用 createLoginUrl 生成登录二维码,打印扫码 URL。
    • 也支持 --uuid <UUID> 直接传入已有 uuid 跳过创建步骤。
  3. 用户微信扫码确认。
  4. 脚本长轮询 platform.getLoginResult,跳过 waiting 中间态,拿到真实 token。
  5. 调用 account.add 落库(POST 裸 JSON {"id":vid, "token":token, "name":"用户名", "status":1})。
  6. 验证 getMpInfo 返回正常。

详细 API 说明见 references/wewe-rss-api.md

关键注意事项

  1. 单进程:严禁同时运行多个采集进程,会争用唯一微信读书账号死锁。
  2. token 有效期:约 4 天,过期后仅能采集已订阅号的历史数据,新文进不了库。建议自动化执行前一天检查 token。
  3. 标题级过滤:SQLite articles 表无正文 content 字段,仅靠标题过滤。务实取舍:稳定优先,不抓微信正文(容易被限频)。
  4. IMA 无建文件夹工具:一级/二级/三级文件夹需用户提前在 IMA 手动创建,自动化运行时通过 get_knowledge_list 匹配已有 ID。
  5. IMA URL 级去重:同 URL 不会重复导入,但标题级去重仍不可省略(防止同标题不同 URL 的重复)。
  6. API 格式陷阱:wewe-rss 的 mutation 接口用 POST + 裸 JSON 对象(不能套 {json:}/{input:});query 接口用 GET ?input={"id":...}
  7. refreshArticles 限频:全量刷新容易返回 500(微信读书限频),改逐号刷新可规避。
  8. connector 断开不等于不可用:MCP 工具 schema 仍可通过 ToolSearch 加载,DeferExecuteTool 调用不受 connector 面板状态阻塞。执行前先尝试,不要因面板显示 disconnected 就跳过导入。

自动化配置

创建双周五 17:00 自动化任务:

  • rrule: FREQ=WEEKLY;INTERVAL=2;BYDAY=FR;BYHOUR=17
  • 工作目录指向采集数据目录
  • prompt 包含上述 9 步完整流程
  • 建议额外创建一次性任务在执行当天上午检查 token

升级版规划(Pay Skill 预留)

本技能预留付费升级路径,个人创作者计费通道上线后直接升级计费:

  • 免费版(当前):完整 9 步采集→过滤→导入流程,支持任意公众号、自定义关键词分类、双周自动化定时执行,核心功能完整可用
  • 专业版(规划中)
    • 多账号并行采集(突破单微信读书账号限制)
    • 正文级智能过滤(不仅靠标题,支持摘要/正文语义匹配)
    • 采集数据看板与趋势分析(可视化各分类篇数/来源/关键词热度)
    • 优先技术支持与定制化关键词配置

免费版永久可用;专业版仅增值,不阉割免费功能。