NockyGo

爱代码,爱生活

无痛苦更新公众号(完整)

很早以前注册了这个公众号,一直没用,一在于公众号的排版,即使是用其他排版工具,如秀米,也会耗费大量时间,还得上传图片,二在于自己的写作能力实在太差😂。

工欲善其事必先利其器

在接触公众号【程序员的喵】上有一篇无痛苦更新公众号的python插件,我的内心也蠢蠢欲动,开始了自己的go插件

流程

我整体想要写作的流程:

80%的时间用于写作,而不是用在排版

obsidian写作 -> go插件 -> 更新公众号/博客网站,小程序

本篇只讲obsidian 写完推送到公众号中:

步骤

1、obsidian开始写,安装一些必要的插件,比如excalidraw,还有最重要的obsidian+picgo+gitee搭建图床,这样只用图片复制进来即可上传到gitee上了。

2、使用go插件,go run main.go即能上传到微信公众号的草稿箱,这里没有做一键发布,手机上下载了订阅助手app,在草稿箱里预览下样式是否正确,然后发布。

优化/感悟

插件有些地方还不够完善,我后面会优化,覆盖面为小白,不用明白go就可以使用,会发布在github的release中。

不过现在对于我本人已足够可以使用了,至少我可以在半小时内写出一篇文章,而不是再额外1个小时做排版工作。

背景

  • 本身有自己的博客网站,以及博客小程序
  • 想更新公众号,一直没有动力去写,一个是自己的文笔实在是太弱,二个是觉得公众号的更新很麻烦,每次都需要去更新,尤其图片要重新上传,这就很麻烦,然后有些样式也不符合要求
  • 前一阵子,看了一个大佬写的无痛苦更新公众号,他写了一个python的插件,受益良多,正在向他学习,大佬的博客网址,公众号是程序员的喵,有兴趣可以关注下
  • 但是别人的东西必须得适用于自己才好,大佬的插件比较精简,但是样式不是我的风格,我想要追加css进去,这样可以随意替换css,其次本人主php,副go,博客是用go开发的,python插件有点突兀,所以这也让我重新拾起go,开发了一个类似他的那个插件的go版本
  • python版本
  • go版本

安装

1
2
3
4
5
6
7

git clone https://github.com/cjyzwg/markdown-wechat-demo

go mod tidy

go run main.go(即可添加到草稿箱)

脚本

用于添加草稿箱,以及提交github仓库,shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh
configPath=.vscode/.env
function get_config() {
local configName=$1
sed -n 's/^[[:space:]]*'$configName'[[:space:]]*=[[:space:]]*\(.*[^[:space:]]\)\([[:space:]]*\)$/\1/p' $configPath
}

function set_config() {
local configName=$1
local confgValue=$2
sed -i "" -e "s:$configName=.*:$configName=$confgValue:g" ${configPath}
}
function publish_draft(){
addline=$(git status | awk '/Untracked/{print NR}')
mpath=""
if [ "$addline" = '' ]; then
echo "没有新添加的文件,更换为当前修改的最后一个文件"
# 取最后一行
all_lines=$(git status | awk '/modified/{print $0}' | awk -F "[:]" 'END{print NR}' )
if [ $all_lines -gt 0 ]; then
read -p "选取需要更新的文件的行数(从1开始):" line
mpath=$(git status | awk '/modified/{print $0}' | awk -F "[:]" 'NR=="'"$line"'"{print $2}' )
else
mpath=$(git status | awk '/modified/{print $0}' | awk -F "[:]" 'END{print $2}' )
fi


else
echo "取新添加的文件"
let line=addline+2
mpath=$(git status | awk 'NR=="'"$line"'"{print}')
fi
read -p "markdown文件变动目录:[$mpath],继续执行下一步,回车键继续[y/n]" isContinue
set_config MarkdownFilePath $mpath

Digest=$(get_config Digest)
read -p "是否更换二级小标题:[$Digest],是否更换,回车键不更换[y/n]" isContinue
# 转成小写
iscontinue=$(echo $isContinue | tr '[A-Z]' '[a-z]')
if [ "$iscontinue" = 'y' ]; then
read -p '开始更换二级小标题:' Digest
set_config Digest $Digest
else
echo "不更换二级小标题"
fi


cpath=$(get_config CssFilePath)
read -p "css文件目录:[$cpath],是否更换,回车键不更换[y/n]" isContinue
# 转成小写
iscontinue=$(echo $isContinue | tr '[A-Z]' '[a-z]')
if [ "$iscontinue" = 'y' ]; then
read -p '开始更换目录:' cpath
set_config CssFilePath $cpath
else
echo "不更换目录"
fi


ipath=$(get_config ImagePath)
read -p "图片标题文件目录:[$ipath],是否更换,回车键不更换[y/n]" isContinue
# 转成小写
iscontinue=$(echo $isContinue | tr '[A-Z]' '[a-z]')
if [ "$iscontinue" = 'y' ]; then
read -p '开始更换目录:' ipath
set_config ImagePath $ipath
else
echo "不更换目录"
fi

Author=$(get_config Author)
read -p "是否更换作者名称:[$Author],是否更换,回车键不更换[y/n]" isContinue
# 转成小写
iscontinue=$(echo $isContinue | tr '[A-Z]' '[a-z]')
if [ "$iscontinue" = 'y' ]; then
read -p '开始更换作者名称:' Author
set_config Author $Author
else
echo "不更换作者名称"
fi
echo "开始执行发布草稿"
cd .vscode/ && go run main.go



}
function add_git(){
local msg=$1
git pull origin master
git add .
git commit -m $msg
git push origin master
}
echo "需要发布到草稿箱"
./.vscode/pushgitimg.sh
publish_draft


配置picgo图床

  • 使用picgo配置gitee图床,同时obsdian安装picgo插件,即可截图自动上传到gitee中,同时main.go中会自动解析,上传到微信中获取对应的mediaid
  • 同时标题的图片配置的是每日一图的api,可以根据env文件中自行配置是否要手动更换

github和gitee同步

  • 配置对应的key
  • 配置对应的workflow
  • 同时修改blog对应的hook地址,由github转成gitee,github会失败

html压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import (
"github.com/tdewolff/minify/v2"
"github.com/tdewolff/minify/v2/html"
)
func HtmlMinify(htmlstring string) (string, error) {
m := minify.New()
m.Add("text/html", &html.Minifier{
KeepDefaultAttrVals: true,
KeepDocumentTags: true,
KeepEndTags: true,
})

mb, err := m.String("text/html", htmlstring)
if err != nil {
return "", err
}
return mb, err
}

注意事项

  • wget -o x.gz不允许这么写,暂时不清楚原因在哪里
  • 截图的时候最好尺寸在550*550以内,否则上传图片不生效
  • 现在只能添加shell命令来配置,后面优化成go来写

优化

  • 本地shell命令转成main.go
0%