Python实现上传图床脚本

SM.MS 是由 V2EX大佬 @Showfom 自建的,无外链限制,无流量限制的公共图床,而且带有很简洁的API文档。在写markdown文档的时候,插入图片确实是一件我觉得挺麻烦的事情,所以,自己就简单实现了这样一个简单的小脚本,目的是在上传图片到图床时候,直接返回图片服务器地址,然后我们把地址复制到markdown的图片语法的地址栏上就可以在别处访问了。

sm.ms

python是我很喜欢的一门语言,尤其是日常遇到一些问题,一些小脚本能提供自己很大的帮助(重点是很爽啊hhh)

思路综述

首先这个脚本主要的目的就是通过SM.MS提供的API接口,把本地图片上传到公共图床,直接返回图片服务器地址。

所以,我们接下来思考怎样可以实现这样的功能:

  1. SM.MS(一下简述为SM) 提供的接口,应该怎样调用。
  2. 在python中,使用requests模块可以实现简单请求,但是现在上传的是图片内容,应该如何设置。
  3. 怎样获取返回的地址。

这就是最基础的想法了(所以我说这就是一个简单小脚本2333333)在上面的基础上,假设想要更加完备,更加像一个工具的话,需要增加些判断内容:

  1. 判断图片是否存在
  2. 使用命令行参数
  3. 完善错误提醒,并且安全退出脚本程序。
  4. 拓展:自定义上传图片尺寸

我们主要看上面几点。

SM.MS API接口

根据文档,我们可以很清晰看到上传至图床的设置十分简单。主要需要以下几个设置:

name descp remark
请求方式 POST
请求URL https://sm.ms/api/upload
主要参数名称 smfile 类型:File

也有请求示例:

![smms_upload_demo]()

这里的重点就是看Content-Type请求头设置Content-Type: multipart/form-data;

使用postman来测试上传接口

test_for_postman_success

可以在浏览器中打开返回数据中的url,就可以看到刚刚上传的图片了。

test_relook

使用Requests模块库完成请求操作

Requests模块库使用十分简单,而且文档十分友好(笑。

test_requests

这是一个很简单的requests请求,其中,使用requests.get方法访问目标网页,直接打印结果,会返回一个状态码200,可以打印r.text来获取页面内容。这里不再啰唆了23333

但是我们这里需要的是通过POST请求,上传图片啊!对于这样的需求我们查看文档,上面我们知道官方示例中请求头有一个设置是:Content-Type: multipart/form-data;,故我们在requesets中也是找寻相关文件内容上传的文档。

根据文档,我们可以显式地设置文件名,文件类型和请求头

files = {'smfile': open(path, 'rb')}

上述代码,我们设置请求参数名为smfile文件名为path

完善:命令行参数与文件存在判断

命令行参数sys.argv

文件存在判断os.path.exists

python json字符串处理

添加alisa至zsh,全局使用脚本

这步挺简单的,个人使用的是zsh,就是添加一行 alias 到 .zshrc ,

alias graphbed='python3 /Users/taozz/Dropbox/projectCode/tools/graph_bed_use_smms.py'

以后,在终端输入 graphed [ photo_url ] 即可使用该脚本上传图片至图床,并把图片url返回打印,复制使用即可。

拓展

http请求头相关

总结

上述内容,只是很简单地进行一个脚本编写思路的记录,

  1. 为什么要写这个脚本(目标与适用范围)
  2. 用什么写(文档准备)
  3. 怎么写(基础实现的编写与每一步的测试)
  4. 如何完善(方便使用与基本判断)

对我而言,就是一个知识回顾总结的过程。在其中回顾学习了一些常见操作,如sys.argv, os, json.loads等。

这是我写的第一个关于python的文章,确实很简单,在我眼中python就是这样一门语言,“想做什么,去做什么”,对于我个人,喜欢这门语言,但是目前的情况,我的水平还不足够担当这门语言的工作,所以写点小脚本自己玩玩呗!coding is funny, especially with python.

资料链接

Tags// , , ,