碎碎念

使用Gridea构建的静态博客有以下不便:

  1. 加载图片的Markdown代码与Obsidian并不统一。 我习惯于在Obsidian中编写博客、所见即所得,而由于相关代码不统一,我不能直接将Obsidian的Markdown代码复制入Gridea中,而是需要通过 转换程序 等方式进行处理。如果人工添加,则需要在Gridea右侧的菜单栏按钮中一张一张添加,这是很繁琐的。

去掉文件名前缀的转换程序:

import os

PREFIX = "Pasted image "

def remove_prefix_from_filename(filename):
    if filename.lower().startswith(PREFIX.lower()):
        return filename[len(PREFIX):]
    return None

def main():
    for filename in os.listdir('.'):
        if os.path.isfile(filename):
            new_name = remove_prefix_from_filename(filename)
            if new_name and not os.path.exists(new_name):
                print(f"Renaming: {filename} -> {new_name}")
                os.rename(filename, new_name)
            elif new_name and os.path.exists(new_name):
                print(f"Skipping (target exists): {filename} -> {new_name}")

if __name__ == "__main__":
    main()

将obsidian的图片格式转换为Gridea格式的转换程序:

import re
import sys

def main(src_path: str, dst_path: str):
    pattern = re.compile(
        r'!\[\[Pasted image ([0-9]{8}[0-9]{6}\.png)\]\]',
        flags=re.IGNORECASE
    )

    with open(src_path, 'r', encoding='utf-8') as f:
        content = f.read()

    new_content = pattern.sub(
        lambda m: f'![](https://meredith2328.github.io/post-images/{m.group(1)})',
        content
    )

    with open(dst_path, 'w', encoding='utf-8') as f:
        f.write(new_content)

    print(f'已处理并保存:{dst_path}')

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('用法:python obsidian2gridea.py <源文件.md> <目标文件.md>')
        sys.exit(1)
    src_file = sys.argv[1]
    dst_file = sys.argv[2]
    main(src_file, dst_file)