使用 alfred 结合 sm.ms构建自动上传图片脚本

平时在写博客的时候上传图片是一个很头疼的事情,需要完成以下步骤:

  • 截图
  • 保存成文件
  • 上传到图床
  • 获取文件地址
  • 到文章中黏贴

这样一套流程真的很复杂,同时浪费了很多时间,我们使用 alfred 结合 sm.ms 的 api 可以便捷地完成这项工作.

ps.本篇博客中的所有图片均由脚本完成上传.

img

截图工具选择

截图可以选择 mac 自带的截图工具,但是不能再截取以后编辑,这里我推荐 xnip,免费版本足够用,功能相当强大.

img

获取 sm.ms Authorization

img

到 sm.ms 注册/登录以后拿到 token,然后看下接口文档:
https://doc.sm.ms/#api-Image-Upload
使用 postman 测试下:

img

编写 python 脚本

python 我没学过,自己网上找了点教程,写的不好的请见谅…

安装必须的环境

1
2
pip3 install Pillow
pip3 install requests

编写 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

'''
@Author: 韩宏斌
@Description: this is the description
@version: 1.0.0
@LastEditors: 韩宏斌
@Date: 2020-03-31 17:13:25
@LastEditTime: 2020-04-03 17:02:00
@FilePath: /playback/Users/hanhongbin/py/uploadImg.py
'''


try:
from PIL import ImageGrab
from PIL import Image
import requests
img = ImageGrab.grabclipboard()
if isinstance(img, Image.Image):
img.save('/tmp/img.png', 'png')
files = {'smfile': open('/tmp/img.png', "rb")}
if (files["smfile"].seek(0, 2)/(1024*1024)) < 5:
req_url = "https://sm.ms/api/v2/upload"
req_header = {
"Authorization": "OifHQalFhmpEwUKRBYTtFU4xD1znRTfx"
}
files = {'smfile': open('/tmp/img.png', "rb")}
response = requests.post(
req_url,
headers=req_header,
files=files
)
if response.json()["success"]:
url = response.json()["data"]["url"]
print("![img]("+url+")")
else:
print("上传失败了,请重试一下哦")
else:
print("不支持上传大于 5M 的图片哦")

else:
print("当前剪切板第一条不是图片哦")
except ModuleNotFoundError:
print('ModuleNotFoundError')
except SyntaxError:
print('SyntaxError')

编写 alfred workflow

img

上图是完整的 workflow.

  • 使用⌃+⌥+⌘+U来触发脚本
  • 触发系统通知(开始上传图片)
  • 执行脚本
  • 处理结果(播放声音/触发通知/复制 url 到剪切板)

在 workflow 中可以是支持直接写 py 的,但是是默认的 python2,因此我在 shell 中执行了:

1
python3 /Users/hanhongbin/py/uploadImg.py #py文件路径

img

thank u !