Typora-发布文章到博客园

Typora-发布文章到博客园

发布文件到博客园,需要先对博客园进行设置:

1. 允许MetaWeblog API 客户端访问

进入帐户中心, 点击博客设置

image-20220617165209966

滑动滚动条到最底部,点击其它设置,开启“允许 MetaWeblog 博客客户端访问”:

image-20220617165321640

注意上面的MetaWeblog访问地址:https://rpc.cnblogs.com/metaweblog/yongdaimi, 可以先记录下来,这个我们后面会用到。

注意:看清自己的地址,不要把我的地址直接拷过去。

2. 准备上传脚本

cnblogsImage.py

import xmlrpc.client
import ssl
import os
import json
import sys
ssl._create_default_https_context = ssl._create_unverified_context

rootPath = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(rootPath,"cnblogs.json"),"rb") as f:
    config = json.loads(f.read())


def uploadImage(images):
    for image in images:
        with open(image,"rb") as f:
            imageData = f.read()

        baseName = os.path.basename(image)
        suffix = baseName.split(".")[-1]
        file = dict(
            bits = imageData,
            name = baseName,
            type = f"image/{suffix}"
        )
        proxy = xmlrpc.client.ServerProxy(config["url"])
        s = proxy.metaWeblog.newMediaObject('', config['username'], config['password'],file)
        print(s["url"])

if __name__ == '__main__':
    uploadImage(sys.argv[1:])

拷贝上述代码到一个单独的python文件,将文件重命名为:cnblogsImage.py

cnblogsArticle.py

import xmlrpc.client
import ssl
import os
import json
import sys
ssl._create_default_https_context = ssl._create_unverified_context

rootPath = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(rootPath,"cnblogs.json"),"rb") as f:
    config = json.loads(f.read())

def uploadArticle(articles):
    for article in articles:
        with open(article,"r",encoding="utf8") as f:
            data = f.read()

        title = os.path.basename(article)[:-3]
        post = dict(
            dateCreated = xmlrpc.client.DateTime(),
            description = data,
            title = title,
            categories = ['[Markdown]'],
        )
        proxy = xmlrpc.client.ServerProxy(config["url"])
        s = proxy.metaWeblog.newPost('', config['username'], config['password'],post,True)
        # 输出文章连接
        userName = config["url"].split("/")[-1]
        print(f"https://www.cnblogs.com/{userName}/p/{s}.html")

if __name__ == '__main__':
    uploadArticle(sys.argv[1:])

拷贝上述代码到一个单独的python文件,将文件重命名为:cnblogsArticle.py

cnblogs.json

{
	"url": "https://rpc.cnblogs.com/metaweblog/yongdaimi",
	"username": "zhangsan",
	"password": "123456"
}

拷贝上述代码到一个单独的json文件,将文件重命名为:cnblogs.json, 接着:

  • 修改url的内容为之前保存的MetaWeblog访问地址;
  • 将username修改为你的博客园的用户名;
  • 将password修改为你的博客园的密码;

---------------------------------------------------------------------------------- 2022-06-29 更新 ------------------------------------------------------------------------------------------ 

博客园已更新访问策略,目前只能使用令牌登录(Token) 登录, 创建访问令牌后填在原来密码的地方,即可正常使用,访问令牌的获取方式在其它设置项中:

image-20220629102726160

image-20220629102830826

点击上方的复制按钮,用访问令牌来替换cnblogs.json文件中的password项的值,上述操作全部做完之后,将以上三个文件放置到一个指定的地方,比如我放置在:E:\opt\Typora\command 目录下:

image-20220617170718911

位置可随便指定。

3. 配置图片上传

打开Typora, 依次点击“文件”-“偏好设置”-“图像”,修改红框所示位置:

image-20220617170915769

在命令处输入上传图片时需要执行的python脚本的位置。比如我的放在:

python E:/opt/Typora/command/cnblogsImage.py

注意:python E:/opt/Typora/command/cnblogsImage.py 前面的python 最好还是加上,最近发现一个问题,就是如果你的python文件是使用VSCode 关联的,那么在触发上传指令时,会自动拉起VSCode, 加上 python 命令后,就相当于是调用python 解释器来执行后面的脚本(当然前提是你必须在环境变量里已经配置好了python解释器的路径, 我上面的截图没有加...)。

修改完毕后可以点击“验证图片上传选项”按钮,看是否能够成功上传图片:

image-20220617171052893

出现上图提示则代表可以顺利上传图片。

4. 配置文章发布

依次点击“文件”-“偏好设置”-“导出”,先添加一个导出选项:

image-20220617171428458

选择“自定义”:

image-20220617171515700

在弹出的对话框中选择确定,这里可以给新添加的导出项配置一个名称,比如我的已配置成“Cnblogs", 接下来需要设置导出指令:

python E:/opt/Typora/command/cnblogsArticle.py ${currentPath}

image-20220617171832676

注意:

我已经在系统环境变量里配置好的python解释器的路径,所以我可以把命令直接写成"python xxx" 这种形式,没有配置的话必须显式指明python解释器的实际路径,如:E:/sys/Python/python.exe E:/opt/Typora/command/cnblogsArticle.py ${currentPath}

${currentPath} 表示的是当前待发布文章的文件路径。

5. 验证发布

在导出时选择刚才配置的导出项:

image-20220617172448101

出现这个就代表文章发布成功了:

image-20220617172531857

到博客园首页看下:

image-20220617172759534

6. 不足之处

有一个不足的地方就是没有办法设置分类,通过博客园网站发布的文章是可以设置分类的,方便后期查找,这种方式的话目前只能在发布完成之后手动分类了。

参考链接

  1. Typora实现多平台发布文章
posted @ 2022-06-17 17:31  夜行过客  阅读(311)  评论(1编辑  收藏  举报