Skip to content

使用Hexo风格的Markdown格式化,整理与归档图片的工具

Notifications You must be signed in to change notification settings

jevonsflash/BlogTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BlogTool

使用Hexo风格的Markdown格式化,整理与归档图片的工具。

介绍

根据指定的Hexo模板(Scaffold) 批量将Markdown文件格式化,并将Markdown编辑插入的图片保存到本地。

特点

  1. 支持MetaWeblog协议,本地Markdown文件
  2. Hexo模板头处理和常用标签处理
  3. 支持图片处理
    • 图片保存为内嵌Base64编码
    • 图片保存为资源文件夹
    • 图片保存为标签插件
    • 自定义图片文字水印(支持:PNG、JPG、Webp、Gif、Tiff、BMP)
    • 图片压缩(支持:PNG、JPG、Webp、Tiff),转换格式
  4. 支持Ai生成内容
    • Ai 生成文章摘要
    • [Todo] Ai 生成标签列表
    • [Todo] Ai 生成文章封面图

更新内容

Date Version Content
V0.1.0 2024-4-22 初始版本
V0.2.0 2024-5-3 完成本地获取Markdown文件
V0.2.1 2024-5-11 修复错误
V0.3.0 2024-8-22 添加Ai生成文章摘要功能

配置

支持基于JSON配置文件和命令行参数配置。

配置文件

默认的配置文件appsettings.json内容如下:

{
  "HexoPath": "./", //指定一个Hexo的根目录,其中必须包含scaffolds模板Markdown文件【可被-x参数覆盖】
  "OutputPath": "./source/_posts", //指定一个路径,作为Markdown和图片的导出目标,指定后会覆盖配置【可被-o参数覆盖】
  "SkipFileWhenException": true, //是否跳过处理异常的文件 true:跳过该文件,继续处理其它文件 false:抛出异常,终止处理
  "AssetsStore": {
    "AddWatermark": false, // 是否添加水印
    "CompressionImage": false, //是否压缩图片
    "SubPath": ".", //图片于输出子目录
    "Image": {
      "SkipNotSupportFormat": true, // 遇到不支持的图片类型是否跳过,否则就抛异常终止
      "WatermarkText": "InCerry", // 水印文字
      "WatermarkFontSize": 30, // 水印文字大小,如果图片小于文字大小,那么会缩放
      "WatermarkFont": "Microsoft Yahei", // 使用的字体类型,默认使用微软雅黑,Mac和Linux用户可自行配置系统安装的字体
      "WatermarkFontColor": "#FFF", // 字体颜色
      "CompressionLevel": "Low", // 压缩级别,级别越高大小越小,质量就越低,级别从低到高为:Low Medium High
      "ConvertFormatTo": "jpg" // 是否转换格式,支持一些常见的图片格式,如果不想转换,填null即可 如:"ConvertFormatTo": null
    }
  },

  //for cnblogs
  "GetMarkdown": {
    "MetaWeblog": {
      "MetaWeblogURL": "https://rpc.cnblogs.com/metaweblog/jevonsflash", // MetaWeblog地址
      "Username": "jevonslin", //用户名 - 替换成你自己的用户名
      "Password": "9B5BAC9F20931E93EB3F39EF329001C0604ED59808E5656CDB1FA1ED85D7881C" //密码 - 替换成你自己的密码
    },
    // for oschina
    //"MetaWeblog": {
    //      "MetaWeblogURL": "https://my.oschina.net/action/xmlrpc/jevonsflash",
    //      "BlogURL": "https://my.oschina.net/blog",
    //      "Username": "jevonslin",
    //      "Password": "9B5BAC9F20931E93EB3F39EF329001C0604ED59808E5656CDB1FA1ED85D7881C"
    //},
    "Local": {
      "Path": ".", //获取Markdown文件的本地路径
      "Recursive": "false" //是否递归获取
    },

    "ReadMorePosition": 5, //<!-- more -->标签所在的行数,设置-1时将不添加此标签
    "RecentTakeCount": 1, //获取最近文件数,
    "Aigc": {
      "Target": "Description,Tag", // Ai 内容生成目标,可选Description,Tag,用英文逗号隔开
      "Provider": "DashScope", // Ai 内容生成提供者
      "ApiKey": "sk-00000000000000000000000000000000" //Ai 内容生成密钥 - 替换成你自己的密钥
    }
  },
  "MarkdownProvider": "MetaWeblog", //Markdown内容提供者,值为MetaWeblog, Local【可被-m参数覆盖】
  "AssetsStoreProvider": "Local" //图片存储方式,值为Embed, Local, Hexo-Asset-Folder, Hexo-Tag-Plugin【可被-a参数覆盖】
}

命令行参数

参数列表:

参数 含义 用法
-x Hexo 指定一个Hexo的根目录,其中必须包含scaffolds模板Markdown文件, 指定后会覆盖配置
-o Output 指定一个路径,作为Markdown和图片的导出目标,指定后会覆盖配置
-r RecentTakeCount 获取最近Markdown文件数
-m MarkdownProvider 值为metaweblog, local, 指定后会覆盖配置
-a AssetsStoreProvider 值为embed, local, hexo-asset-folder, hexo-tag-plugin, 指定后会覆盖配置
-w WaitAtEnd 指定时,程序执行完成后,将等待用户输入退出
-h Help 查看帮助

快速开始

准备你Hexo博客

  1. 在磁盘上(如D:\Project)创建工作目录,使用hexo-cli创建项目
mkdir -p D:\Project 
cd D:\Project
hexo init blog
  1. 下载BlogTool到你的Hexo项目根目录

https://github.com/jevonsflash/BlogTool/raw/master/BT/blogtool.exe

  1. 用Markdown格式写几篇博客,因为HexoPath默认配置为./所以你的.md文件可以暂时保存在Hexo项目根目录

  2. 在当前目录下运行

blogtool.exe -r 1 -a local
  1. 执行Hexo调试三连或者部署三连,就可以看到效果了
hexo clean
hexo generate
hexo deploy

示例

为方便演示,我用自己的博客演示,从代码仓库下载我的博客Hexo项目

mkdir -p D:\Project 
cd D:\Project
git clone https://github.com/jevonsflash/blog.git blog

Sample1:图片保存在本地assets文件夹

blogtool.exe -r 5 -a local -x D:\Project\blog\ -o D:\Project\blog\source\_posts

alt text

Sample2:图片保存为标签插件

blogtool.exe -r 5 -a hexo-asset-folder -x D:\Project\blog\ -o D:\Project\blog\source\_posts

alt text

Markdown 中的图片修改为{% asset_path slug %}格式

alt text

可扩展性

BlogTool默认提供LocalMarkdownProviderMetaWeblogMarkdownProvider两个Markdown内容提供者

你可以自己定义一个Markdown内容提供者,比如从你的网盘,Ftp或第三方Api获得Markdown内容。

下面演示如何扩展一个通过传入文本来提供Markdown内容:

public class TextMarkdownProvider : MarkdownProvider
{
    public override ICollection<IMarkdown> GetMarkdowns(GetMarkdownOption option, params object[] objects)
    {
        var markdowns = new List<IMarkdown>();
        var p = objects[0] as dynamic;
        markdowns.Add(new PostInfo()
        {
            Categories = p.Category,
            Title = p.Title,
            Description = p.Content,
            DateCreated = DateTime.Now,
        });


        return markdowns;
    }
}

使用:

creator.SetMarkdownProvider(getMarkdownOption, new TextMarkdownProvider(), new { Title = title, Content = content new List<string>(){"TagA","TagB"}});
var mds = creator.Create(objects);

Todo:

  • 本地Markdown导入
  • WPF界面
  • 图床存储图片
  • AIGC 内容提取

已知问题

作者信息

作者:林小

邮箱:jevonsflash@qq.com

License

The MIT License (MIT)