hexo-matery record


1 前言

忙了两天终于搭建了自己的博客,win下hexo+github+matery。其中踩坑不少,还要很多地方需要完善、精化。写下这篇有博客以来的第一篇文章以记录后续的改善。

先在此记录一下待解决问题:

  1. 使用官方推荐的插件代码高亮,{}不能被正确转义, 目前的方法是降 hexo 的版本(4.2没有这个问题),等GitHub的issue solution吧.
  2. valine 升级1.4.1后在Google中显示问题, Firefox倒是没有.
  3. 目录想设置个多级分类, finding
  4. 写个脚本, 在typora书写中,获取当前时间戳.
  5. 有时间搞个文章加密插件
  6. 针对特定文章关闭评论
  7. 关闭友链区的评论
  8. logo有时间精化一下
  9. seo优化,
  10. 百度统计,Google统计
  11. 再多就有点花里胡哨了,就这样

2 toc显示问题 以及 配置标题自动编号

发现一级标题不能在toc显示,以为是bug,后来发现主题默认toc开启的是h2,h3,h4, 于是修改为h1, h2, h3.

标题自动编号:

  1. win下 安装插件 hexo-heading-index
npm install hexo-heading-index --save
  1. 根目录配置:
    heading_index:
     enable: true
     index_styles: "{1} {1} {1} {1} {1} {1}"
     connector: "."
     global_prefix: ""
     global_suffix: " "
    关于具体的配置信息,参考hexo-heading-index

到此,clean, g, d 后,发现目录变成了这样:

批注 2020-08-21 220912

但是,这个设置时针对全局的,这意味这只要在其他地方使用了层级符号,那么也会带有“数字”,为了避免这个情况,有两种解决办法。

  1. 在其他地方不使用层级符号 fh不是
  2. 设置heading-index 前几级编号,后几级使用肯定不会显示数字。

针对第二种方法,需要修改 hexo-heading-index/lib/index.js 文件

function updateHeadingIndexes(options, data) {
    var $ = cheerio.load(data, { decodeEntities: false });
    var headings = $('h1, h2, h3'); // 在这里, 保留几级看个人使用喜好

# end

3 利用脚本写入文章更新时间

想每次写完文章都记录一下文章的更新时间,方便纠错以及提供时间线。

此脚本可以给所有脚本加时间戳以及给单个文件加时间戳。

关于更多的实用 blog 脚本, 可以访问我的GitHub,地址:blog_script, 喜欢的话star一下,谢谢。

代码如下:

import time
import sys
import glob
import os


def get_stamp(post_name):
    """

    :param post_name:
    :return:  null
    """

    time_stamp = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))

    def write_stamp(file_name):
        """

        :param file_name:
        :return: null
        """
        with open(file_name, "a+", encoding='utf-8') as f:
            f.write("\n")
            f.write("> ___#end___ 以上内容于 " + time_stamp + " 更新")

        return

    """ 所有文件加时间戳 """
    if post_name == "all":
        filename = "../source/_posts/*.md"
        for name in glob.glob(filename):
            write_stamp(name)
    else:
        """单个文件加时间戳 """
        filename = "../source/_posts/" + post_name + ".md"
        if os.path.exists(filename):
            write_stamp(filename)
        else:
            print("filename error\n")

    return


if __name__ == "__main__":
    if len(sys.argv) == 2 and sys.argv[0] == "get_stamp.py":
        get_stamp(sys.argv[1])
    else:
        print("command error\n")

首先在博客根目录下新建目录my_script,并将python脚本以get_stamp.py命名并放入此目录。在此目录下打开bash,运行以下命令

单个文件加时间戳,postname为你要加时间戳的md文件

 python get_stamp.py postname

所有博客目录下所有md文件加时间戳

 python get_stamp.py all

效果如下:

时间戳效果展示

当然,你也可以在此脚本的基础上进行修改以适配其他情况, 以及增加功能

#end 以上内容于 2020-08-22-00-50-07 更新

4 关闭友链区评论,md页放上面。

5 文章加密

发现文章已经配置了加密功能,只需要在主题中开启配置即可。

简单写了个轮子,实用性一般般的样子,bash命令下给文档加密,缺点是需要一次性读文件,当文章特别长时。。。不过这种极端情况很少,折腾试试,直接贴代码 :

import hashlib
import sys
import glob
import os
import frontmatter


def encrypt_md(post_name, raw_pwd):
    """

    generate and write hash256 pwd
    :param post_name:  md filename
    :param raw_pwd:
    :return:  null
    """

    def gen_pwd(raw_pwd):
        """

        :param raw_pwd:
        :return:
        """
        hash256 = hashlib.sha256()
        hash256.update((raw_pwd).encode('utf-8'))
        return hash256.hexdigest()

    def w_pwd(name, hash_pwd):
        """

        :param name:
        :param pwd:
        :return:
        """
        with open(name, "r+", encoding="utf-8") as f:
            md = frontmatter.load(f)
            md.metadata["password"] = hash_pwd
            f.seek(0, 0)
            f.write(frontmatter.dumps(md))

        return

    """ 所有文件加密 """
    if post_name == "all":
        dir_name = "../source/_posts/*.md"
        for filename in glob.glob(dir_name):
            w_pwd(filename, gen_pwd(raw_pwd))
    else:
        """ 单个文件加密"""
        filename = "../source/_posts/" + post_name + ".md"
        if os.path.exists(filename):
            w_pwd(filename, gen_pwd(raw_pwd))
        else:
            print("filename error\n")


if __name__ == "__main__":
    if len(sys.argv) == 3 and sys.argv[0] == "encrypt.py":
        encrypt_md(sys.argv[1], sys.argv[2])
    else:
        print("command error\n")

使用方法:

如果你的根目录下还没有 _my_script_ 文件,那就新建一个,将代码写到该文件夹下,encrpt.py 命名,

  1. 单个文件加密,在 my_script目录下开启bash, win下执行命令,其他环境参考
 python encrypt.py postname password
  1. 多个 md 文件加密
 python encrypt.py all password

其中,postname 加密的md文件名, password 是要 设置的密码,注意密码不能含有空格。另外,如果还没有 frontmatter 包,需要进行安装。另外,网站填写密码是原生 password , 非md文件中的。

pip安装命令:

pip install python-frontmatter

关于更多的实用 blog 脚本, 可以访问我的GitHub,地址:blog_script, 喜欢的话 star一下,谢谢。

#end 以上内容于 2020-08-22-10-17-05 更新

6 seo优化


作者: diuzi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 diuzi !
评论
评论
  目录