AstrBot 插件新功能:公众号文章一键转载到博客

AstrBot 插件新功能:公众号文章一键转载到博客

2026年9月16日·#技术分享AstrBot/博客/教程·1622 字 8 分钟
浏览量加载中...
AI 摘要

给 AstrBot BlogWriter 插件加了一条 /转载 命令——把公众号文章链接发过去,插件自动抓取正文、转存图片、生成博客文章并提交,全程一条命令。

看到好文章想收藏到自己博客,以前只能手动复制粘贴、一张张存图,现在一条命令搞定。


前言#

平时刷公众号经常看到想收藏的文章,比如九边那种聊教育、聊习惯的长文。以前想转载到博客,流程是这样的:

  1. 在浏览器打开文章,全选复制正文
  2. 粘贴到编辑器,一段段清理格式
  3. 图片一张张另存为,再上传到自己的图床,再手动替换链接
  4. 补 frontmatter、写转载声明、提交

一篇文章折腾十几分钟,图片多的更麻烦,而且公众号图片有防盗链,直接引用原图链接哪天就可能全部挂掉。

我博客本来就有个 AstrBot 插件(BlogWriter),平时用微信/QQ 发消息就能发动态、写笔记、记账。干脆给它加了条新命令:

/转载 https://mp.weixin.qq.com/s/xxxx

发出去之后什么都不用管,刷新博客文章就出现了。


效果#

在 QQ 私聊里把公众号文章链接发过去,回复大致长这样:

转载成功 ✅
标题:超强自驱力是哪来的
公众号:九边
文件:src/content/posts/技术分享/超强自驱力是哪来的.md
博客:https://blog.tsh520.cn/posts/技术分享/超强自驱力是哪来的

生成的文章长这样:

---
title: 超强自驱力是哪来的
published: 2026-09-16
description: 这篇文章之前发在小号"六镇",尾部流量非常大……
image: https://img.tsh520.cn/file/blog/article/article-1.jpg
tags:
- 转载
sourceLink: https://mp.weixin.qq.com/s/_0CXcOf250uUhy1304rG3w
---
> 本文转载自微信公众号「九边」(原文发布于 2026-07-31)
> 原文链接:https://mp.weixin.qq.com/s/_0CXcOf250uUhy1304rG3w
(正文,图片全部替换成了自己图床的链接)

正文段落、加粗、引用、列表都保留,图片全部转存到了自己的 CloudFlare-ImgBed 图床(blog/article 目录),微信那边就算删文删图也不影响。


实现过程#

抓取:伪装成微信客户端#

公众号文章对服务器 IP 是有风控的。我一开始用普通请求去抓,直接被挡:

当前环境异常,完成验证后即可继续访问

解决办法是把自己伪装成手机微信:User-Agent 用 MicroMessenger 的,再带上 Referer: https://mp.weixin.qq.com/。插件里做了两层处理——先按正常请求抓,如果返回的页面里检测到「环境异常/完成验证」的关键词,就直接报错告诉我是被风控了,而不是生成一篇乱七八糟的文章。

解析:和想象中不一样的页面结构#

这是整个功能里最花时间的部分。我原以为公众号正文就是普通的 <p> 段落,实际抓下来发现完全不是:

1. 段落是靠 <section> 分隔的。

正文里几乎没有 <p> 标签,每段文字包在一个 <section><span leaf="">文字</span></section> 里,样式全写在行内 style 属性上。这意味着如果按 <p> 来断段,整篇文章会被拼成一大坨,一行到底。

2. 正文容器的结束位置没有明显的闭合标志。

<div id="js_content"> 里面嵌套几十层,靠正则配对 </div> 根本不现实。我的做法是找边界标志——正文本体之后第一个 <script> 标签出现的位置,就是正文的截止线。实测这个办法非常稳定,正文一个字不多一个字不少。

3. 页面里混着一堆非正文图片。

页面底部有二维码、作者头像之类的 <img>,如果不过滤,会把公众号头像也转存进文章里。解决办法是按 class 名过滤(qr_codejump_author_avatar 这些),正文图只认 data-src(微信的懒加载写法)。

4. 发布日期藏在 JS 变量里。

页面上没有可见的日期元素,日期实际在脚本里的 var ct = "1785463020" 这个时间戳里,转一下就是原文发布日期。

5. 摘要经常是空的。

description 这个 meta 标签很多文章是空的,所以做了一个兜底:取正文开头 60 个字当摘要。

图片:转存而不是引用#

公众号图片域名是 mmbiz.qpic.cn,直接引用有两个问题:一是微信可能删图,二是防盗链规则随时会变。所以插件的做法是:

  1. 下载每张图(实测不带 Referer 也能下载,失败了会自动带 Referer 重试)
  2. 上传到自己的图床 blog/article 目录
  3. 正文里的图片链接替换成图床 URL

任一图片下载或上传失败,整个转载就会中止——不会发布一篇一半图片挂掉的半成品文章。

生成:对齐博客的文章格式#

frontmatter 按博客 posts 集合的 schema 来写:

字段内容
title文章标题(自动抓取)
published转载日期
description原文摘要(没有就取正文开头)
image第一张图当封面
tags默认「转载」,可在插件配置里改
sourceLink原文链接,博客文章页会展示

正文开头自动加一段转载声明引用块:

> 本文转载自微信公众号「九边」(原文发布于 2026-07-31)
> 原文链接:https://mp.weixin.qq.com/s/xxxx

文章放到哪个目录(也就是博客的分类)可以在插件配置里固定,我默认放在 技术分享


新增配置项#

配置项说明默认值
article_default_dir转载文章发布目录技术分享
article_upload_folder图片转存图床目录blog/article
article_tags文章默认标签["转载"]

已知限制#

  • 只支持公众号文章:链接必须是 mp.weixin.qq.com 的,其他网站暂不支持。
  • 服务器 IP 有被风控的可能:我本地测试直连能抓到,但插件跑在腾讯云服务器上,微信对云厂商 IP 的审核更严格。如果被拦,插件会明确报「微信要求环境验证」,不会静默失败——真遇到的话再想办法(走代理或换出口 IP)。
  • 视频、小程序卡片、评论区不处理:只搬运文字和图片,正文里嵌入的视频会丢失,需要的话事后手动补。

小结#

这个功能本质上是一次「网页转 Markdown」的工程实践,难点不在写代码,而在摸清公众号页面真实的 DOM 结构——<section> 分段、<script> 边界、data-src 懒加载这些,都是抓下来看了真页面才发现的。

现在看到好文章,发个链接就归档到自己博客了,还能顺手留个原文出处,比收藏夹靠谱多了。

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]