使用Python自动创建Hexo博客并生成博客缩略图

使用Python封装hexo博客框架的shell脚本,实现运行Python程序就能自动化创建hexo博客、同时实现随机给出博客使用的缩略图的URL。


最终效果展示

  • Python创建脚本效果
image-20210803104239281
  • 创建后生成的文件效果
image-20210803104431365
  • 创建后生成的缩略图效果

    此处需要注意,你的hexo主题文件要支持博客的缩略的才可以,我当前使用的主题是pure,缩略图需要存放在主题的source文件夹下,如下图。

image-20210803105347111
md文件头 效果

title: 使用Python自动创建Hexo博客并生成博客缩略图
thumbnail_url: /images/default_img/blog-default-4.jpg
date: 2021-08-03 10:35:29
image-20210803113836515

Python脚本自动创建Hexo博客并生成博客缩略图过程

  1. 首先在项目的根目录下创建main.py文件,当然名字也可以自己定。

  2. 创建项目目录检查函数,防止main.py不是在根目录下执行。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import os
    import random


    # 此处的dev就是项目的根目录名称,需要根据自己的情况进行命名
    def _mkdir(path=None, root_name='dev'):
    """获取项目根目录路径以及根目录下指定path的路径"""
    root = os.path.dirname(__file__)
    if root.split('/')[-1] != root_name:
    print('项目根目录不正确,请检查')
    else:
    if path is None:
    return root
    else:
    root_nex = os.path.join(root, path)
    return root_nex
  3. 修改博客默认的缩略图。前边提到的创建博客后会生成默认的缩略图,但所有的博客都使用同一个缩略图会不太美观,于是就有了针对缩略图自动修改的Python脚本。

    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
    def _random_blog_images(default_path='themes/pure/source/images/default_img', prd_path='/images/default_img/'):
    """获取blog缩略图默认的图片列表并随机选择一个,拼接生成线上使用的URL"""
    mkdir = _mkdir(default_path)
    default_image_list = get_file_path(mkdir)
    default_images = random.choice(default_image_list).split('/')[-1]
    image_path = prd_path + default_images
    return image_path


    # 'thumbnail_url: '是你在post.md模板文件头中创建的缩略图变量(字段)名称
    def _revise_blog_thumbnail_url(blog_path, blog_thumbnail='thumbnail_url: '):
    """创建新博客后,输入新博客的路径信息修改默认的缩略图URL"""
    print(' 修改博客缩略图URL')
    with open(blog_path) as f:
    blog = f.readlines()
    # 获取博客中默认缩略图的路径,下标
    thumbnail_url = [img for img in blog if blog_thumbnail in img]
    print(' 创建的博客中使用的缩略图:', thumbnail_url[0])
    thumbnail_url_index = blog.index(thumbnail_url[0])
    # 获取随机缩略图,替换博客中默认的thumbnail_url
    random_blog_images = _random_blog_images() + '\n'
    random_blog_images = blog_thumbnail + random_blog_images
    blog[thumbnail_url_index] = random_blog_images
    print(' 修改后博客中使用的缩略图:', random_blog_images)

    with open(blog_path, 'w+') as w:
    w.writelines(blog)
    print(' 博客缩略图URL修改成功')
  4. 定义一个交互函数,让运行main.py文件时能够进行输入操作。

    下边的"2 编译博客内容并上传到Github仓库"暂且不表,以后有时间再展开讲,计划是实现博客内容中的图片URL替换、搜索引擎的自动提交等等吧

    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
    def run_code():
    types = """
    该程序提供如下服务内容:
    1 创建新博客
    2 编译博客内容并上传到Github仓库

    请输入需要操作的序号:
    """
    print(types)
    inputs = input()
    if 1 <= int(inputs) <= 2:

    # 1 创建新博客
    if int(inputs) == 1:
    os.system('cd {0}'.format(_mkdir()))
    create_blog_name, create_blog_id, create_blog_path = input('请输入文章标题:'), input('请输入文章ID(url使用):'), input('请输入文章所属文件夹名称:')
    create_blog = create_blog_path + '/' + create_blog_id + ' "' + create_blog_name + '"'
    revise_url = create_blog_path + '/' + create_blog_id
    print('将创建博客内容:', create_blog)
    create_type = os.system('hexo new post --path {0}'.format(create_blog))
    if int(create_type) == 0:
    print('创建成功')
    _revise_blog_thumbnail_url('source/_posts/' + revise_url + '.md')
    else:
    print('创建异常,请检查')

    # 2 编译博客内容并上传到Github仓库
    if int(inputs) == 2:
    _revise_blog_img_url()
    os.system('cd {0}'.format(_mkdir()))
    # os.system('hexo clean && hexo deploy')
    os.system('hexo clean')
    os.system('hexo generate')
    os.system('cp -rf ../README.md public/')
    os.system('hexo deploy')
    else:
    print('输入错误,请输入(1-2)序号中需要操作的数字')

OK,使用Python自动创建Hexo博客并生成博客缩略图的完整内容就这些,非常简单且容易上手。

完整的代码如下:

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
# @Author : 曲书贤
# @File : main.py
# @CreateTime : 2021/7/07 15:50
# @Software : PyCharm
# @Comment : hexo创建、渲染和发布博客自动化脚本

import os
import random
from util.get import get_file_path


def _mkdir(path=None, root_name='dev'):
"""获取项目根目录路径以及根目录下指定path的路径"""
root = os.path.dirname(__file__)
if root.split('/')[-1] != root_name:
print('项目根目录不正确,请检查')
else:
if path is None:
return root
else:
root_nex = os.path.join(root, path)
return root_nex


def _random_blog_images(default_path='themes/pure/source/images/default_img', prd_path='/images/default_img/'):
"""获取blog缩略图默认的图片列表并随机选择一个,拼接生成线上使用的URL"""
mkdir = _mkdir(default_path)
default_image_list = get_file_path(mkdir)
default_images = random.choice(default_image_list).split('/')[-1]
image_path = prd_path + default_images
return image_path


def _revise_blog_thumbnail_url(blog_path, blog_thumbnail='thumbnail_url: '):
"""创建新博客后,修改默认的缩略图URL"""
print(' 修改博客缩略图URL')
with open(blog_path) as f:
blog = f.readlines()
# 获取博客中默认缩略图的路径,下标
thumbnail_url = [img for img in blog if blog_thumbnail in img]
print(' 创建的博客中使用的缩略图:', thumbnail_url[0])
thumbnail_url_index = blog.index(thumbnail_url[0])
# 获取随机缩略图,替换博客中默认的thumbnail_url
random_blog_images = _random_blog_images() + '\n'
random_blog_images = blog_thumbnail + random_blog_images
blog[thumbnail_url_index] = random_blog_images
print(' 修改后博客中使用的缩略图:', random_blog_images)

with open(blog_path, 'w+') as w:
w.writelines(blog)
print(' 博客缩略图URL修改成功')


def run_code():
types = """
该程序提供如下服务内容:
1 创建新博客
2 编译博客内容并上传到Github仓库
\n
请输入需要操作的序号:
"""
print(types)
inputs = input()
if 1 <= int(inputs) <= 2:

# 1 创建新博客
if int(inputs) == 1:
os.system('cd {0}'.format(_mkdir()))
create_blog_name, create_blog_id, create_blog_path = input('请输入文章标题:'), input('请输入文章ID(url使用):'), input('请输入文章所属文件夹名称:')
create_blog = create_blog_path + '/' + create_blog_id + ' "' + create_blog_name + '"'
revise_url = create_blog_path + '/' + create_blog_id
print('将创建博客内容:', create_blog)
create_type = os.system('hexo new post --path {0}'.format(create_blog))
if int(create_type) == 0:
print('创建成功')
_revise_blog_thumbnail_url('source/_posts/' + revise_url + '.md')
else:
print('创建异常,请检查')

# 2 编译博客内容并上传到Github仓库
if int(inputs) == 2:
_revise_blog_img_url()
os.system('cd {0}'.format(_mkdir()))
# os.system('hexo clean && hexo deploy')
os.system('hexo clean')
os.system('hexo generate')
os.system('cp -rf ../README.md public/')
os.system('hexo deploy')
else:
print('输入错误,请输入(1-2)序号中需要操作的数字')


if __name__ == '__main__':
run_code()

如有问题,欢迎留言~