Привожу пару логов:
33655046: 0419(SPX).rar : rar
/bin/sh: 1: Syntax error: “(” unexpected
Traceback (most recent call last):
File “./shareleak.py”, line 109, in <module>
dumper.get_file(id)
File “./shareleak.py”, line 54, in get_file
os.rename('tmp.file', ‘slil_dump/’ + extension + “/” + str(id) +'__'+ filename)
33654972: Новая_папка_(19).rar : rar
/bin/sh: 1: Syntax error: “(” unexpected
Traceback (most recent call last):
File “./shareleak.py”, line 109, in <module>
dumper.get_file(id)
File “./shareleak.py”, line 54, in get_file
os.rename('tmp.file', ‘slil_dump/’ + extension + “/” + str(id) +'__'+ filename)
OSError: No such file or directory
Дальше привожу код самого скрипта:
#!/usr/bin/env python # -*- coding: UTF-8 -*- # usage: # ./shareleak.py --site slil.ru --start 33611648 --end 33611600 # ./shareleak.py --site rghost.ru --start 39606500 --end 39604000 from subprocess import Popen, PIPE import urllib2, os import re, argparse,locale #Skip files by extension music = ['mp3','wav','midi','mid', 'm3u', 'm4a','ogg','wma','flac','pls'] video = ['avi','mpg','mp4','3gp','mov','flv','dem','bsp','wmv'] image = ['jpg','png','gif','jpeg','bmp'] bin = ['exe','dll','bin','scr'] font = ['ttf','txd'] skip_extensions = music + video + image + bin + font #allow extensions allow_extensions = ['txt','rar','zip','7z'] class slil: def get_file(self,id): page = urllib2.urlopen("http://slil.ru/" + str(id)).read().decode('cp1251') address = '' for line in page.splitlines(): if line.find('var l1nk=')==-1: continue parts = line.split("'") address = "http://slil.ru" + parts[1] + parts[3] break if len(address) < 3: print str(id) + ': FILE_NOT_FOUND' return filename = address.split('/')[5] extension = os.path.splitext(filename)[1].replace('.','').lower() #if extension not in allow_extensions: # return if extension in skip_extensions: return print(str(id) +': '+filename + ' : '+ extension) if not os.path.exists('slil_dump/'+extension): os.makedirs('slil_dump/'+extension) #use tmp file to fix wget bug args = 'wget ' + address + ' -O tmp.file' Popen(args, stdin=PIPE, stdout=PIPE, shell=True).communicate('') os.rename('tmp.file', 'slil_dump/' + extension + "/" + str(id) +'__'+ filename) def upload_file(self,path): pass class rghost: def get_file(self,id): try: page = urllib2.urlopen("http://rghost.ru/" + str(id)).read() except : return address = '' for line in page.splitlines(): if line.find('http://rghost.ru/download/')==-1: continue address = line.split('"')[1] break if len(address) < 3: print str(id) + ': FILE_NOT_FOUND' return filename = re.findall(r'<h1>(.*?)<small>', page, re.DOTALL)[0].split('>')[1].replace('</a','') extension = os.path.splitext(filename)[1].replace('.','').lower() #if extension not in allow_extensions: # return if extension in skip_extensions: return print(str(id) +': '+filename + ' : '+ extension) if not os.path.exists('rghost_dump/'+extension): os.makedirs('rghost_dump/'+extension) #use tmp file to fix wget bug args = 'wget ' + address + ' -O tmp.file' Popen(args, stdin=PIPE, stdout=PIPE, shell=True).communicate('') os.rename('tmp.file', 'rghost_dump/' + extension + "/" + str(id) +'__'+ filename) def upload_file(self,path): pass if __name__ == "__main__": #locale.setlocale(locale.LC_ALL, "ru_RU.UTF-8"), parser = argparse.ArgumentParser(description="Small file storage dumper. Supports slil.ru, rghost.ru") parser.add_argument('--site', action="store",help='site target slil.ru or rghost.ru', required=True) parser.add_argument('--start', action="store", type=int, help='start number', required=True) parser.add_argument('--end', action="store", type=int, help='end number', required=True) args = parser.parse_args() if args.site == 'slil.ru': dumper = slil() else: dumper = rghost() for id in xrange(args.start,args.end,-1): dumper.get_file(id)
Собственно вопрос, как исправить эту ошибку и сделать, что бы скрипт нормально работал с файлами, в именах которых встречаются скобки?