图床自动上传脚本创建

前言

不知道什么时候开始平时经常使用的sm.ms图床网站突然就被墙了,怎么登都上不去…然后恰巧本人魔法上网莫名的也崩了,30G的流量一点都用不出去,两者似乎达成了莫名的Combo,让我想要上传图片写个人博客变得困难起来了。起初在泥电某群内遇到一个QQ图床,但是发现不能上传Hexo,最后幸运的是在好朋友的帮助下找到了sm.ms的一个备用链接smms.app,同时也注意到了上传图片的限制,一次性传的图片有限制,恰巧该图床网站提供了一个API接口使用,因此便诞生了此文

QQ 图床创建

失败原因猜测

QQ图床似乎是QQ内发送的图会被保存到服务器上,然后通过QQ类软件可以进行访问,但是上传到Hexo时会因为Referer的来源不是本地或者是QQ类产品而导致无法浏览

构建方式

QQ图床主要构造十分简单,只需要在QQ上发送一张图片,那么就会生成对应的Url满足下面规则:

1
http://gchat.qpic.cn/gchatpic_new/0/530077417-0-<你的md5>/0

此处的MD5为我们发送的图片的MD5值,需要注意的是MD5中的字母需要全部大写,构造完毕后我们即可进行访问

构建脚本

此处采用Python来完成我们的Url生成,该脚本会扫描当前目录下的图片(.png.jpg),然后按照上面规则进行产生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
38
39
40
import hashlib
import os
import sys
import re


path = sys.argv[0]
path = os.path.dirname(path)
# print(path)
files = os.listdir(path)

# print(files)
flag = 0
for i in files:
png = re.search(".png",i)
jpg = re.search(".jpg",i)
if png != None or jpg != None:
flag = 1
file_name = path + '\\' +i
print("文件名称: ",file_name)

data = open(file_name,"rb").read()
after_md5 = hashlib.md5(data).hexdigest()
after_md5 = after_md5.encode()

change_md5 = ""
for i in range(len(after_md5)):
if after_md5[i] >= ord("a") and after_md5[i] <= ord("z"):
change_md5 += chr(after_md5[i] - 32)
else:
change_md5 += chr(after_md5[i])

url = f"http://gchat.qpic.cn/gchatpic_new/0/530077417-0-{change_md5}/0"

print("对应外链: ",url,"\n")

if flag == 0:
print("当前目录没有图片 ~")

os.system("pause")

SM.MS 图床创建

QQ图床不同SM.MS已经给我们提供了对应的API,我们可以直接使用Pythonrequests库进行发送请求即可

API文档链接 : https://doc.sm.ms/

构建脚本

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
import os
import sys
import re
from unicodedata import name
import requests


def Get_API_Token(UserName,PassWord):
data = {
"username": UserName,
"password": PassWord,
}
url = "https://smms.app/api/v2/token"
res = requests.post(data=data,url=url)
res = res.json()
state = res['success']
if state == True:
token = res['data']['token']
return token
else:
print("账号或密码有误 ~")
os.system("pause")
exit(0)


def Upload_Pic(UserName,PassWord):
path = sys.argv[0]
path = os.path.dirname(path)
files = os.listdir(path)
flag = 0
for i in files:
png = re.search(".png",i)
jpg = re.search(".jpg",i)
jpeg = re.search(".jpeg",i)
if png != None or jpg != None or jpeg != None:
flag = 1
file_name = path + '\\' +i


token = Get_API_Token(UserName,PassWord)
headers = {
'Authorization': token,
}
files = {
'smfile':open(file_name,"rb")
}
url = "https://smms.app/api/v2/upload"
res = requests.post(url=url,files=files,headers=headers).json()
state = res['success']
if state == True:
print("图片名称: ",res['data']['filename'])
print("图片路径: ",file_name)
print("外链链接: ",res['data']['url'])
print("删除链接: ",res['data']['delete'])
print('\n')
else:
print("图片名称: ",i)
print("图片路径: ",file_name)
print("图片上传失败啦 ~")
print('\n')
continue

if flag == 0:
print("当前目录下没有图片 ~")
os.system("pause")
exit(0)


if __name__ == "__main__":
UserName ="" # 输入账号的地方
PassWord ="" # 输入密码的地方
Upload_Pic(UserName,PassWord)


图床自动上传脚本创建
https://equinox-shame.github.io/2022/09/12/图床脚本创建/
作者
梓曰
发布于
2022年9月12日
许可协议