前言

typecho 是个好东西,然而不管是他自带的 markdown 编辑器,还是 Handsomevditor.js 编辑器,都不太好用。觉得还没有 Gitlab 的 WebEditor 好

比如:没有深色模式,在线编辑不稳定等。尤其是没有深色模式就很难受。我觉得合理的一种模式是,将 markdown 文件设法弄到本地,然后用 vscode 或者 typora 之类的编辑器来写,最后同步到服务器。而这些本地的内容还可以利用 Github Gitlab 等进行版本控制和同步,这就比那个简陋的 web 编辑器好很多了。

这就类似 Hexo,Gitbook 等静态 blog,不过不需要在本地生成静态页面,而是丢给 typecho 去搞。只需要用 c# 简单写一个工具来进行本地和服务器之间的同步即可。

db 结构与模型

typecho 会创建多张表,其中有用的一张叫做 typecho_contents,文章内容存在 text 字段里面,因此只要读写数据库就能实现我们的目的。

干脆摆个烂直接用 Microsoft.EntityFrameworkCore 算了。

[Table("typecho_contents")]
public class Contents
{
    [Key, Column("cid")]
    public int Cid { get; set; }

    [Column("title")]
    public string? Title { get; set; }

    [Column("slug")]
    public string? Slug { get; set; }

    [Column("text")]
    public string? Text { get; set; }

    [Column("created")]
    public long Created { get; set; }

    [Column("modified")]
    public long Modified { get; set; }
  
    [Column("type")]
    public string? Type { get; set; }

    [Column("parent")]
    public int Parent { get; set; }
}

直接从远程数据库把数据拉下来,然后建立目录结构,再把文章内容放到对应的文件里面。每篇文章按照 title 新建一个目录,将内容放入 content.md,然后图片也存在此目录中,方便自动化。

注意

请注意数据库安全性。建议设置强密码并使用 Fail2Ban 来防止爆破。

自动化

为了内容同步的批量化和自动化,再实现了一个任务配置:
这个东西其实应该一行一个方便注释掉,当时脑抽了整成这样,不过反正能用

{
    "tasks":
    [
        {
            "enable": true,
            "cmd": "pull",
            "param": "all"
        },
        {
            "enable": false,
            "cmd": "push",
            "param": "13"
        }
    ]
}

这个东西可以指定需要拉取和推送的文章的 cid,避免过多的数据库交互。

1 start 欢迎使用 Typecho 1651989598
2 start-page 关于 1651989598
3 3 测试 1652375960
13 13 Hello World 1652370855
16 16 从零开始的3D打印机折腾(1)repstrap 1652466417
38 38 从零开始的3D打印机折腾(2)细节与优化 1652539270
40 40 typecho写作环境优化 1652887362
Task [PullAll] completed.

运行 pull all 后,会在当前目录下生成一个 Blog.json 文件,存储了所有文章的信息,如:

"Attrs": [
    {
      "Cid": 1,
      "Title": "欢迎使用 Typecho",
      "Slug": "start",
      "Type": "post",
      "CreatedTime": "2022/5/8 13:59:58",
      "ModifiedTime": "2022/5/8 13:59:58"
    }
]

不过文章多了以后 Blog.json 行数会很多,导致查找不方便。
其实可以在每篇文章的目录下生成独立的 json 文件 不过暂且摆了,多了再说

这样就可以愉快的使用 vscode 来写文章了,然而图片的自动化暂时还没搞,还得在 web 编辑器上传和插入。不过比起使用 web 编辑器编写全部内容,已经是好很多了,有空以后再搞。

Blog Structure

最后修改:2022 年 06 月 22 日
如果觉得我的文章对您有用,请喵一声