importosimportreimportrequestsclassReplaceImage:path=''lineNum=0s=r'http[s]?://(?:ws1.sinaimg.cn|res.cloudinary.com)/.*?(?:jpg|png)'subpath=''key=''upload_url=''failednum=0payload={'key':key,'source':upload_url,'format':'json'}website='https://image.glumes.com/api/1/upload/'def__init__(self):self.url_re=re.compile(self.s)defsearch(self,path,key):self.path=pathself.handleDir(path)self.key=keydefhandleDir(self,path):dirs=os.listdir(path)fordindirs:subpath=os.path.join(path,d)ifos.path.isfile(subpath)andsubpath.endswith(".md"):self.handleFile(subpath)elifos.path.isdir(subpath):self.handleDir(subpath)print("program end")defhandleFile(self,fileName):print("\n")print("start read file %s..."%fileName)self.subpath=fileNamef=open(fileName,'r+')self.lineNum=1data=""whileTrue:line=f.readline()ifnotline:breakline=self.replaceImage(line)self.lineNum=self.lineNum+1data+=linef.close()withopen(fileName,"w+")asf:f.writelines(data)defreplaceImage(self,line):searchResult=self.searchImage(line)ifnotsearchResult:returnlineoldline=lineforresultinsearchResult:replace_url=self.uploadImage(result)line=self.replaceLine(line,result,replace_url)print("before replace is %s"%oldline)print("after replace is %s"%line)returnlinedefsearchImage(self,line):ifself.url_re.search(line):all_search=search.url_re.findall(line)returnall_searchelse:return[]defreplaceLine(self,line,search,url):returnline.replace(search,url)defuploadImage(self,url):print("start uploadImage and file name is %s line num is %d..."%(self.subpath,self.lineNum))self.payload['source']=urlr=requests.get(self.website,self.payload)res=r.json()statuscode=res['status_code']ifstatuscode==400:print("upload failed and code is %d and msg is %s"%(statuscode,res['error']['message']))print("upload image failed is %s and linenum is %d"%(url,self.lineNum))self.failednum+=1returnurlelse:print("upload success and code is %d"%statuscode)print("upload img %s to %s"%(url,res['image']['url']))returnres['image']['url']if__name__=="__main__":search=ReplaceImage()print("please input dir path and api key:\n")dir=input("dir:")key=input("key:")search.search(dir,key)