简介

本来一开始用 nodejs 写的,考虑大小、易操作、高性能、跨平台以及环境等问题,我就想能不能搞个不需依赖开发语言环境就能运行的。所以我就选择 go并且它本身就具备以上优点。作者本身是java开发,第一次使用 go所以过程也是比较艰难,好在 GPT 在学习一门新的开发语言方面还是相当给力!

这是一个用于保存公众号文章到本地离线查看的软件,支持将 HTML 文章保存至本地,并提供 HTML 转 PDF 的功能。此外,软件还支持图片素材管理,可在 Windows、Mac 和 Linux 系统上运行,使用 Go 语言开发,具备轻量级、小体积、高性能和并发支持的特点。不支持批量直接获取文章列表

功能特点

  • 保存公众号文章至本地
  • 支持将 HTML 文章转换为 PDF 格式(需安装 wkhtmltopdf
  • 图片素材管理
  • 保存原始地址
  • 跨平台支持:Windows、Mac 和 Linux
  • 使用 Go 语言开发,轻量级、高性能、高并发
  • 提供简单易用的 Web 界面管理

下载

操作系统 版本/架构 大小
Windows wxdown-1.0.0-windows-amd64.exe 9.23MB
ARM Linux wxdown-1.0.0-linux-arm64 8.75MB
Linux wxdown-1.0.0-linux-amd64 9.04MB
macOS wxdown-1.0.0-darwin-amd64 9.09MB
macOS(Apple Silicon) wxdown-1.0.0-darwin-arm64 8.75MB

安装和运行

Windows

包含了 wkhtmltopdf

  1. 解压缩包
  2. 打开目录
  3. 双击 wxdown-1.0.0-windows-amd64.exe 启动
  4. 浏览器访问 http://127.0.0.1:81

如下所示启动成功:

cwd: E:\code\go\go-wx-download
----------------------------------------
欢迎使用 wxdown 工具!
----------------------------------------
运行模式 : binary
软件版本 : 1.0.0
操作系统 : windows
系统架构 : amd64
启动时间 : 2024-05-19 00:00:00
----------------------------------------
服务信息
----------------------------------------
服务地址:
http://192.168.31.209:81 (浏览器访问)
http://192.168.202.1:81 (浏览器访问)
http://192.168.11.1:81 (浏览器访问)
http://172.26.192.1:81 (浏览器访问)
http://127.0.0.1:81 (浏览器访问)
采集接口:
http://192.168.31.209:81/gather/ (GET|POST|HEAD)
http://192.168.202.1:81/gather/ (GET|POST|HEAD)
http://192.168.11.1:81/gather/ (GET|POST|HEAD)
http://172.26.192.1:81/gather/ (GET|POST|HEAD)
http://127.0.0.1:81/gather/ (GET|POST|HEAD)
----------------------------------------
配置信息
----------------------------------------
运行路径 : E:\code\go\go-wx-download
资源路径 : E:\code\go\go-wx-download\data

Linux

添加权限

chmod +x wxdown-1.0.0-linux-amd64

启动程序

root@mac-max:/home/wx# ./wxdown-1.0.0-linux-amd64
cwd: /home/wx
----------------------------------------
欢迎使用 wxdown 工具!
----------------------------------------
运行模式 : binary
软件版本 : 1.0.0
操作系统 : linux
系统架构 : amd64
启动时间 : 2024-05-19 00:00:00
----------------------------------------
服务信息
----------------------------------------
服务地址:
http://192.168.31.156:81 (浏览器访问)
http://172.17.0.1:81 (浏览器访问)
http://172.18.0.1:81 (浏览器访问)
http://127.0.0.1:81 (浏览器访问)
采集接口:
http://192.168.31.156:81/gather/ (GET|POST|HEAD)
http://172.17.0.1:81/gather/ (GET|POST|HEAD)
http://172.18.0.1:81/gather/ (GET|POST|HEAD)
http://127.0.0.1:81/gather/ (GET|POST|HEAD)
----------------------------------------
配置信息
----------------------------------------
运行路径 : /home/wx
资源路径 : /home/wx/data

Mac

出现 permission denied 表示没有权限

(base) mac@macdeMacBook-Pro-3 ~ % /Users/mac/Desktop/wxdown-1.0.0-darwin-amd64/wxdown-1.0.0-darwin-amd64
zsh: permission denied: /Users/mac/Desktop/wxdown-1.0.0-darwin-amd64/wxdown-1.0.0-darwin-amd64

添加权限

(base) mac@macdeMacBook-Pro-3 ~ % chmod +x /Users/mac/Desktop/wxdown-1.0.0-darwin-amd64/wxdown-1.0.0-darwin-amd64

双击 wxdown-1.0.0-darwin-amd64 启动或命令启动

(base) mac@macdeMacBook-Pro-3 ~ %  /Users/mac/Desktop/wxdown-1.0.0-darwin-amd64/wxdown-1.0.0-darwin-amd64

执行结果同上

简单使用会下载和安装就可以了,后面都基本没啥用了,不用再看了

目录结构

  • web:HTML 页面,很简单也可以自己修改

    • index.html 主页面
    • images.html 图片预览页面
  • config.yaml:系统全局配置文件
  • wxdown-1.0.0 可执行文件,程序入口

config.yaml

# 服务端口
port: 81 # 本地数据文件存储路径
path: ./data # HTML 转 PDF 配置
# 下载 wkhtmltopdf 路径 https://wkhtmltopdf.org/downloads.html
# window 建议下载后将 wkhtmltopdf目录下载所有内容拷贝到项目根目录下
wkhtmltopdf:
# true 开启 false 关闭 默认关闭
enable: false
# linux 例如:/usr/local/wkhtmltopdf/bin/
# window 例如:E:\Program Files\wkhtmltopdf\bin
path: # 采集线程配置
thread:
# 同时下载 HTML 线程数量
html: 5
# 同时下载图片线程数量
image: 10

接口

采集接口

地址 请求方式 请求参数 请求体
http://127.0.0.1:81/gather/ GET /gather/https://mp.weixin.qq.com/1
HEAD /gather/https://mp.weixin.qq.com/1
POST /gather/ ["https://mp.weixin.qq.com/1","https://mp.weixin.qq.com/2",...]

书签脚本

注意️:如果启动软件的机器和浏览文章的机器不是一台机器,使用局域网 IP(192.168.0.xxx)替换 127.0.0.1

javascript:fetch("http://127.0.0.1:81/gather/" + window.location.href,{mode:"no-cors"});

使用方法:

  1. 浏览器书签栏️右键️添加网页...️名称:随便你能记住就行️网址:输入下面js脚本
  2. 打开浏览器公众号文章
  3. 点击上面添加的书签脚本软件会自动采集

资源接口

地址 请求方式 请求参数 请求体
http://127.0.0.1:81/articles GET

打开文件夹接口

地址 请求方式 请求参数 请求体
http://127.0.0.1:81/open/ GET /open/公众号名称

使用示例

主页面

文章列表

图片库

开发和贡献

本软件使用 Go 语言开发,欢迎开发者贡献代码或提出改进建议。请在 GitHub 上提交 issue 或 pull request。

注意事项

  • 请勿传播未经授权的文章或图片。
  • 在保存、转换文章或管理图片时,请注意版权和法律规定。

wxdown 公众号离线文章保存(GO语言开发)的更多相关文章

  1. 50行Python代码,教你获取公众号全部文章

    > 本文首发自公众号:python3xxx 爬取公众号的方式常见的有两种 - 通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章 - 通过微信公众号的素材管理,获取公众号文章.缺点是需要申请自 ...

  2. python爬搜狗微信获取指定微信公众号的文章

    前言: 之前收藏了一个叫微信公众号的文章爬取,里面用到的模块不错.然而 偏偏报错= =.果断自己写了一个 正文: 第一步爬取搜狗微信搜到的公众号: http://weixin.sogou.com/we ...

  3. 用iframe嵌入了一个微信公众号平台文章的URL

    JS: $.ajaxPrefilter( function (options) { if (options.crossDomain && jQuery.support.cors) { ...

  4. 我创建了一个网站,专门分享公众号的文章 https://asyons.com

    网址:https://asyons.com/,为做个网站,自娱自乐的自明星,但投资也挺大的了,注册了一家公司,公财私章,做账报税,阿里云服务器,全职开发.算上时间价值,按小时,投资过5万了.

  5. 巧-微信公众号-操作返回键问题-angularjs开发 SPA

    在解决这个问题之前,一直处在很苦逼的状态,因为 现在绝大多数 前端模块都是 SPA 模式:所以由此而来出了许多的问题,当然我现在提的这个只是其中一个: 说一下解决方案: 1.技术栈 angularjs ...

  6. 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  7. Md2All:好用的markdown文件转换工具,文章迁移微信公众号的利器

    目录 简介 使用体验 极速上手 更多功能 总结 简介 markdown以简单的语法和强大的功能,征服了无数技术创作者,几乎主流的技术博客网站都开始支持markdown语言撰写博客.但是微信公众号的文章 ...

  8. 【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章

    [技巧]如何使用客户端发布BLOG+如何快速发布微信公众号文章   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

  9. 拒绝低效!Python教你爬虫公众号文章和链接

    本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权. 前言 上一篇文章整理了的公众号所有文章的导航链接,其实如果手动整理起来的话,是一件很费力的事情,因为公众号里添加文章的时候只 ...

  10. 发现了合自己胃口的公众号,但文章太多翻来翻去真麻烦,还好我学了 Python

    现在我们大多数人都会或多或少的关注几个公众号,如果发现一个比较合自己胃口的号 对公众号中的文章一定是每篇必读的. 有时候我们关注到宝藏型公众号时发现其历史文章已经好几百甚至上千篇了,而作者又只对其中自 ...

随机推荐

  1. 深入解析 C 语言中的 for 循环、break 和 continue

    C语言中的 for 循环 当您确切地知道要循环执行代码块的次数时,可以使用 for 循环而不是 while 循环 for (语句 1; 语句 2; 语句 3) {   // 要执行的代码块 } 语句 ...

  2. Numpy通用函数及向量化计算

    Python(Cpython)对于较大数组的循环操作会比较慢,因为Python的动态性和解释性,在做每次循环时,必须做数据类型的检查和函数的调度. Numpy为很多类型的操作提供了非常方便的.静态类型 ...

  3. Docker 11 数据卷

    由来 Docker 是将应用和环境打包成一个镜像. 这样,数据就不应该保存在容器中,否则容器删除,数据就会丢失,有着非常大的风险. 为此,容器和主机之间需要有一个数据共享技术,使得在 Docker 容 ...

  4. k8s之configmap应用

    一.创建configmap 1.基于命令创建configmap root@k8s-master01:~# kubectl create configmap demoapp-cfg --from-lit ...

  5. css 如何绘制正方形

    前言 如何绘制正方形的问题呢,在这里我先只写一种方式,后续补齐. 正文 写正方形有一个很特殊的地方就在于我们在写html的时候,宽是一定固定的,因为不可能溢出去,但是高就不固定了,因为可能要滑动. 问 ...

  6. formdata 的前世今生

    前言 为什么会产生formdata这东西呢? 看下简介: FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出,本 ...

  7. 涂色-【BFS】

    涂色 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间.给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newC ...

  8. 深度解读《深度探索C++对象模型》之数据成员的存取效率分析(一)

    接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. 在<深度解 ...

  9. react中<link>和<navlink>区别

    两者都是实现路由的跳转.但 点击<Link>时,url会更新,组件会被重新渲染,但是页面不会重新加载...使用to链接组件时,它的值既可是字符串,也可以是location对象(包含path ...

  10. 剑指offer05(Java)-替换空格(简单)

    题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy."输出:"We%20are ...