前言
不知道什么时候开始平时经常使用的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)
files = os.listdir(path)
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")
|
与QQ图床
不同SM.MS
已经给我们提供了对应的API
,我们可以直接使用Python
的requests
库进行发送请求即可
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)
|