Python脚本实现Typora插入图片自动上传到Chevereto图床

每次用typora写markdown笔记,添加图片要从网页端上传到图床,然后才能获取url。这样实在是很影响效率。于是采用python脚本实现自动上传。

图床是用开源项目Chevereto在群晖上搭建的,通过端口转发连接外网。脚本参考YouWolf大哥的利用python脚本实现使用typora编写markdown时图片自动上传到chevereto图床 - YouWolf’s Blog

实现功能:Typora添加本地图片自动上传到Chevereto图床并自动替换url。

环境:Win10专业版

Python版本:3.8.5

Typora版本:0.9.98

Untitled• - Typora 2021-01-02 14-38-44 00_00_00-00_00_30

新建个文件夹,建立upload_pic.pyconfig.json两个文件

并且打开Chevereto图床访客上传图片的许可

Upload_pic.py

upload_pic.py文件加入以下代码,无需修改。请事先确保所需库已经安装。

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
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
# author: guiu
# data: 2020.2.28

import requests
import json
import mimetypes
import argparse
import sys

APP_DESC = """
upload pictures automatically
"""

print(APP_DESC)
if len(sys.argv) == 1:
sys.argv.append('--help')

parser = argparse.ArgumentParser()
parser.add_argument('-s', '--source', type=str, nargs='+', help="", required=True)
parser.add_argument('-c', '--config', default="./config.json", help="读取配置文件", required=True)
args = parser.parse_args()

# 从参数中获取要上传的文件列表
img_list = args.source
# print(img_list)

def read_conf(path):
with open(path,"r",encoding="utf-8") as f:
confstr = f.read()
conf = json.loads(confstr)
return conf

def up_to_chevereto(img_list):
# 获得本地图片路径后,上传至图床并记录返回的json字段
for img in img_list:
# 先判断传过来的是本地路径还是远程图片地址
if "http" == img[:4]:
# 非本地图片的话可以考虑下载到本地再上传,但是没这个必要
print(img)
continue
else:
try:
res_json = upload(formatSource(img))
parse_response_url(res_json,img)
except:
print(img+"\t上传失败")

def upload(files):
# 图床api
# APIKey = "THERE PUT YOUR APIKEY"
conf = read_conf(args.config)
url = conf['url'] + "?key=" + conf['APIKEY']
r = requests.post(url, files=files)
return json.loads(r.text)

def formatSource(filename):
imageList = []
mime_type = mimetypes.guess_type(filename)[0]
imageList.append(
('source', (filename, open(filename, 'rb'), mime_type))
)
#print (imageList)
return imageList

def parse_response_url(json, img_path):
# 从返回的json中解析字段
if json['status_code'] != 200:
print("{}\tweb端返回失败,可能是APIKey不对. status_code {} .".format(
img_path, json['status_code'])
)
else:
img_url = json["image"]["url"]
print(img_url)

up_to_chevereto(img_list)

获取API

  • 到你的Chevereto站点->仪表盘->设置->API

image-20210102140335143

config.json

1
2
3
4
{
"APIKEY": "你的API KEY",
"url": "https://你的图床域名/api/1/upload/"
}
  • APIKEY:填写你的API KEY
  • url:填写你的http://你的站点域名/api/1/upload/
    • 比如我的是https://fanghaoyu.myds.me:5003/api/1/upload/

Typora设置

  • 打开typora->文件->偏好设置->图像->上传服务设定->选择Custom Command
  • 如果需要自动上传,插入图片时选择上传图片,并勾选如图所示选项

image-20210102141508162

  • 填写以下命令,路径填你自己的。注意:windows下要两个反斜杠转义
1
python 你的upload.py路径 -c 你的config.json路径 -s

我的:

1
python  F:\\markdown笔记\\upload_pic.py -c  F:\\markdown笔记\\config.json -s

点击验证图片上传选项,出现以下结果表示配置正确

image-20210102142132695

打赏
  • Copyrights © 2020-2021 haoyu fang
  • 访问人数: | 浏览次数:

请我喝杯啤酒吧~

支付宝
微信