def gopt(args, d: bool = False): re = getopt(args, 'h?i:d:p:m:r:ynFv:a:o:s', [ 'help', 'ac=', 'dm=', 'ad=', 'yf', 'nf', 'mc=', 'ar', 'nar', 'ax=', 'as=', 'ak=', 'ab', 'nab', 'fa=', 'sv=', 'ma=', 'ms=', 'da=', 'httpproxy=', 'httpsproxy=', 'jt=', 'jts=', 'af', 'naf', 'afp=', 'slt', 'nslt', 'te', 'nte', 'bd', 'nbd', 'cad', 'ncad', 'lrh', 'nlrh', 'ym', 'nm', 'yac', 'nac', 'ydm', 'ndm', 'yad', 'nad', 'yr', 'nr', 'ysv', 'nsv', 'yma', 'nma', 'yda', 'nda', 'ahttpproxy=', 'ahttpsproxy=', 'lan=', 'bp', 'nbp', 'in', 'nin', 'mt', 'nmt', 'vi=', 'uc', 'nuc', 'ass', 'nass', 'dmp', 'ndmp', 'vf=', 'lmd=', 'ynal', 'nnal', 'log', 'nlog', 'yauf', 'nauf', 'ydwa', 'ndwa', 'yol', 'nol', 'ltid' ]) if d: print(re) rr = re[0] r = {} h = False for i in rr: if i[0] == '-h' or i[0] == '-?' or i[0] == '--help': h = True if i[0] == '-i' and not 'i' in r: r['i'] = i[1] if i[0] == '-d' and not 'd' in r and i[1].isnumeric() and int( i[1]) > 0 and int(i[1]) < 9: r['d'] = int(i[1]) if i[0] == '-p' and not 'p' in r: r['p'] = i[1] if i[0] == '-m' and not 'm' in r: if i[1].lower() == 'true': r['m'] = True elif i[1].lower() == 'false': r['m'] = False if i[0] == '--ym' and not 'm' in r: r['m'] = True if i[0] == '--nm' and not 'm' in r: r['m'] = False if i[0] == '--ac' and not 'ac' in r: if i[1].lower() == 'true': r['ac'] = True elif i[1].lower() == 'false': r['ac'] = False if i[0] == '--yac' and not 'ac' in r: r['ac'] = True if i[0] == '--nac' and not 'ac' in r: r['ac'] = False if i[0] == '--dm' and not 'dm' in r: if i[1].lower() == 'true': r['dm'] = True elif i[1].lower() == 'false': r['dm'] = False if i[0] == '--ydm' and not 'dm' in r: r['dm'] = True if i[0] == '--ndm' and not 'dm' in r: r['dm'] = False if i[0] == '--ad' and not 'ad' in r: if i[1].lower() == 'true': r['ad'] = True elif i[1].lower() == 'false': r['ad'] = False if i[0] == '--yad' and not 'ad' in r: r['ad'] = True if i[0] == '--nad' and not 'ad' in r: r['ad'] = False if i[0] == '-r' and not 'r' in r: if i[1].lower() == 'true': r['r'] = True elif i[1].lower() == 'false': r['r'] = False if i[0] == '--yr' and not 'r' in r: r['r'] = True if i[0] == '--nr' and not 'r' in r: r['r'] = False if i[0] == '-y' and not 'y' in r: r['y'] = True if i[0] == '-n' and not 'y' in r: r['y'] = False if i[0] == '--yf' and not 'yf' in r: r['yf'] = True if i[0] == '--nf' and not 'yf' in r: r['yf'] = False if i[0] == '--mc' and not 'mc' in r: if i[1].lower() == 'avc': r['mc'] = True elif i[1].lower() == 'hev': r['mc'] = False if i[0] == '--ar' and not 'ar' in r: r['ar'] = True if i[0] == '--nar' and not 'ar' in r: r['ar'] = False if i[0] == '--ax' and not 'ax' in r: if i[1].isnumeric(): i2 = int(i[1]) if i2 < 17 and i2 > 0: r['ax'] = i2 if i[0] == '--as' and not 'as' in r: if i[1].isnumeric(): i2 = int(i[1]) if i2 > 0: r['as'] = i2 if i[0] == '--ak' and not 'ak' in r: if i[1].isnumeric(): i2 = int(i[1]) if i2 > 0 and i2 < 1025: r['ak'] = i2 if i[0] == '--ab' and not 'ab' in r: r['ab'] = True if i[0] == '--nab' and not 'ab' in r: r['ab'] = False if i[0] == '--fa' and not 'fa' in r: if i[1].lower() == 'none' or i[1].lower() == 'prealloc' or i[ 1].lower() == 'trunc' or i[1].lower() == 'falloc': r['fa'] = i[1].lower() if i[0] == '--sv' and not 'sv' in r: if i[1].lower() == 'true': r['sv'] = True elif i[1].lower() == 'false': r['sv'] = False if i[0] == '--ysv' and not 'sv' in r: r['sv'] = True if i[0] == '--nsv' and not 'sv' in r: r['sv'] = False if i[0] == '--ma' and not 'ma' in r: if i[1].lower() == 'true': r['ma'] = True elif i[1].lower() == 'false': r['ma'] = False if i[0] == '--yma' and not 'ma' in r: r['ma'] = True if i[0] == '--nma' and not 'ma' in r: r['ma'] = False if i[0] == '--ms' and not 'ms' in r: t = search("^[0-9]+[MK]?$", i[1]) if t != None: r['ms'] = i[1] if i[0] == '--da' and not 'da' in r: if i[1].lower() == 'true': r['da'] = True elif i[1].lower() == 'false': r['da'] = False if i[0] == '--yda' and not 'da' in r: r['da'] = True if i[0] == '--nda' and not 'da' in r: r['da'] = False if i[0] == '--httpproxy' and not 'httpproxy' in r: r['httpproxy'] = i[1] if i[0] == '--httpsproxy' and not 'httpsproxy' in r: r['httpsproxy'] = i[1] if i[0] == "--jt" and not 'jt' in r: if i[1].lower() == 'a' or i[1].lower() == 'b' or i[1].isnumeric(): r['jt'] = i[1].lower() if i[0] == '--jts' and not 'jts' in r: if checktime(i[1]): r['jts'] = i[1] if i[0] == '-F' and not 'F' in r: r['F'] = True if i[0] == '-v' and not 'v' in r: if i[1].isnumeric(): if int(i[1]) > 0: r['v'] = i[1] if i[0] == '-a' and not 'a' in r: if i[1].isnumeric(): if int(i[1]) > 0: r['a'] = i[1] if i[0] == '-o' and not 'o' in r: r['o'] = filterd(i[1]) if i[0] == '--af' and not 'af' in r: r['af'] = False if i[0] == '--naf' and not 'af' in r: r['af'] = True if i[0] == '--afp' and not 'afp' in r: r['afp'] = i[1] if i[0] == '-s' and not 's' in r: r['s'] = True if i[0] == '--slt' and not 'slt' in r: r['slt'] = True if i[0] == '--nslt' and not 'slt' in r: r['slt'] = False if i[0] == '--te' and not 'te' in r: r['te'] = True if i[0] == '--nte' and not 'te' in r: r['te'] = False if i[0] == '--bd' and not 'bd' in r: r['bd'] = True if i[0] == '--nbd' and not 'bd' in r: r['bd'] = False if i[0] == '--cad' and not 'cad' in r: r['cad'] = True if i[0] == '--ncad' and not 'cad' in r: r['cad'] = False if i[0] == '--lrh' and not 'lrh' in r: r['lrh'] = True if i[0] == '--nlrh' and not 'lrh' in r: r['lrh'] = False if i[0] == '--ahttpproxy' and not 'ahttpproxy' in r: r['ahttpproxy'] = i[1] if i[0] == '--ahttpsproxy' and not 'ahttpsproxy' in r: r['ahttpsproxy'] = i[1] if i[0] == '--lan' and not 'lan' in r and (i[1] == 'null' or i[1] in lan): r['lan'] = i[1] if i[0] == '--bp' and not 'bp' in r: r['bp'] = True if i[0] == '--nbp' and not 'bp' in r: r['bp'] = False if i[0] == '--in' and not 'in' in r: r['in'] = True if i[0] == '--nin' and not 'in' in r: r['in'] = False if i[0] == '--mt' and not 'mt' in r: r['mt'] = True if i[0] == '--nmt' and not 'mt' in r: r['mt'] = False if i[0] == '--vi' and not 'vi' in r: if i[1].isnumeric(): r['vi'] = int(i[1]) if i[0] == '--uc' and not 'uc' in r: r['uc'] = True if i[0] == '--nuc' and not 'uc' in r: r['uc'] = False if i[0] == '--ass' and not 'ass' in r: r['ass'] = True if i[0] == '--nass' and not 'ass' in r: r['ass'] = False if i[0] == '--dmp' and not 'dmp' in r: r['dmp'] = True if i[0] == '--ndmp' and not 'dmp' in r: r['dmp'] = False if i[0] == '--vf' and not 'vf' in r and i[1] in ['mkv', 'mp4']: r['vf'] = i[1] if i[0] == '--lmd' and not 'lmd' in r and i[1].isnumeric(): if int(i[1]) >= 0: r['lmd'] = int(i[1]) if i[0] == '--ynal' and not 'nal' in r: r['nal'] = True if i[0] == '--nnal' and not 'nal' in r: r['nal'] = False if i[0] == '--log' and not 'log' in r: r['log'] = True if i[0] == '--nlog' and not 'log' in r: r['log'] = False if i[0] == '--yauf' and not 'auf' in r: r['auf'] = True if i[0] == '--nauf' and not 'auf' in r: r['auf'] = False if i[0] == '--ydwa' and not 'dwa' in r: r['dwa'] = True if i[0] == '--ndwa' and not 'dwa' in r: r['dwa'] = False if i[0] == '--yol' and not 'ol' in r: r['ol'] = True if i[0] == '--nol' and not 'ol' in r: r['ol'] = False if i[0] == '--ltid': r['ltid'] = True if h: global la la = getdict('command', getlan(se, r)) ph() exit() for i in re[1]: if i.lower() == "show": r['SHOW'] = True return r
def gopt(args, d: bool = False): re = getopt(args, 'h?i:d:p:m:r:ynFv:a:o:scb:V:', [ 'help', 'ac=', 'dm=', 'ad=', 'yf', 'nf', 'mc=', 'ar', 'nar', 'ax=', 'as=', 'ak=', 'ab', 'nab', 'fa=', 'sv=', 'ma=', 'ms=', 'da=', 'httpproxy=', 'httpsproxy=', 'jt=', 'jts=', 'af', 'naf', 'afp=', 'slt', 'nslt', 'te', 'nte', 'bd', 'nbd', 'cad', 'ncad', 'lrh', 'nlrh', 'ym', 'nm', 'yac', 'nac', 'ydm', 'ndm', 'yad', 'nad', 'yr', 'nr', 'ysv', 'nsv', 'yma', 'nma', 'yda', 'nda', 'ahttpproxy=', 'ahttpsproxy=', 'lan=', 'bp', 'nbp', 'in', 'nin', 'mt', 'nmt', 'vi=', 'uc', 'nuc', 'ass', 'nass', 'dmp', 'ndmp', 'vf=', 'lmd=', 'ynal', 'nnal', 'log', 'nlog', 'yauf', 'nauf', 'ydwa', 'ndwa', 'yol', 'nol', 'ltid', 'ncc', 'ycc', 'nfo', 'nnfo', 'anopro', 'mxd=', 'imn', 'nimn', 'nlt=', 'nsp=', 'fnl=', 'lp', 'nlp' ]) if d: print(re) rr = re[0] r = {} h = False for i in rr: if i[0] == '-h' or i[0] == '-?' or i[0] == '--help': h = True if i[0] == '-i' and 'i' not in r: r['i'] = i[1] if i[0] == '-d' and 'd' not in r and i[1].isnumeric() and int( i[1]) > 0 and int(i[1]) < 9: r['d'] = int(i[1]) if i[0] == '-p' and 'p' not in r: r['p'] = i[1] if i[0] == '-m' and 'm' not in r: if i[1].lower() == 'true': r['m'] = True elif i[1].lower() == 'false': r['m'] = False if i[0] == '--ym' and 'm' not in r: r['m'] = True if i[0] == '--nm' and 'm' not in r: r['m'] = False if i[0] == '--ac' and 'ac' not in r: if i[1].lower() == 'true': r['ac'] = True elif i[1].lower() == 'false': r['ac'] = False if i[0] == '--yac' and 'ac' not in r: r['ac'] = True if i[0] == '--nac' and 'ac' not in r: r['ac'] = False if i[0] == '--dm' and 'dm' not in r: if i[1].lower() == 'true': r['dm'] = True elif i[1].lower() == 'false': r['dm'] = False if i[0] == '--ydm' and 'dm' not in r: r['dm'] = True if i[0] == '--ndm' and 'dm' not in r: r['dm'] = False if i[0] == '--ad' and 'ad' not in r: if i[1].lower() == 'true': r['ad'] = True elif i[1].lower() == 'false': r['ad'] = False if i[0] == '--yad' and 'ad' not in r: r['ad'] = True if i[0] == '--nad' and 'ad' not in r: r['ad'] = False if i[0] == '-r' and 'r' not in r: if i[1].lower() == 'true': r['r'] = True elif i[1].lower() == 'false': r['r'] = False if i[0] == '--yr' and 'r' not in r: r['r'] = True if i[0] == '--nr' and 'r' not in r: r['r'] = False if i[0] == '-y' and 'y' not in r: r['y'] = True if i[0] == '-n' and 'y' not in r: r['y'] = False if i[0] == '--yf' and 'yf' not in r: r['yf'] = True if i[0] == '--nf' and 'yf' not in r: r['yf'] = False if i[0] == '--mc' and 'mc' not in r: if i[1].lower() == 'avc': r['mc'] = True elif i[1].lower() == 'hev': r['mc'] = False if i[0] == '--ar' and 'ar' not in r: r['ar'] = True if i[0] == '--nar' and 'ar' not in r: r['ar'] = False if i[0] == '--ax' and 'ax' not in r: if i[1].isnumeric(): i2 = int(i[1]) if i2 < 17 and i2 > 0: r['ax'] = i2 if i[0] == '--as' and 'as' not in r: if i[1].isnumeric(): i2 = int(i[1]) if i2 > 0: r['as'] = i2 if i[0] == '--ak' and 'ak' not in r: if i[1].isnumeric(): i2 = int(i[1]) if i2 > 0 and i2 < 1025: r['ak'] = i2 if i[0] == '--ab' and 'ab' not in r: r['ab'] = True if i[0] == '--nab' and 'ab' not in r: r['ab'] = False if i[0] == '--fa' and 'fa' not in r: if i[1].lower() == 'none' or i[1].lower() == 'prealloc' or i[ 1].lower() == 'trunc' or i[1].lower() == 'falloc': r['fa'] = i[1].lower() if i[0] == '--sv' and 'sv' not in r: if i[1].lower() == 'true': r['sv'] = True elif i[1].lower() == 'false': r['sv'] = False if i[0] == '--ysv' and 'sv' not in r: r['sv'] = True if i[0] == '--nsv' and 'sv' not in r: r['sv'] = False if i[0] == '--ma' and 'ma' not in r: if i[1].lower() == 'true': r['ma'] = True elif i[1].lower() == 'false': r['ma'] = False if i[0] == '--yma' and 'ma' not in r: r['ma'] = True if i[0] == '--nma' and 'ma' not in r: r['ma'] = False if i[0] == '--ms' and 'ms' not in r: t = search("^[0-9]+[MK]?$", i[1]) if t is not None: r['ms'] = i[1] if i[0] == '--da' and 'da' not in r: if i[1].lower() == 'true': r['da'] = True elif i[1].lower() == 'false': r['da'] = False if i[0] == '--yda' and 'da' not in r: r['da'] = True if i[0] == '--nda' and 'da' not in r: r['da'] = False if i[0] == '--httpproxy' and 'httpproxy' not in r: r['httpproxy'] = i[1] if i[0] == '--httpsproxy' and 'httpsproxy' not in r: r['httpsproxy'] = i[1] if i[0] == "--jt" and 'jt' not in r: if i[1].lower() == 'a' or i[1].lower() == 'b' or i[1].isnumeric(): r['jt'] = i[1].lower() if i[0] == '--jts' and 'jts' not in r: if checktime(i[1]): r['jts'] = i[1] if i[0] == '-F' and 'F' not in r: r['F'] = True if i[0] == '-v' and 'v' not in r: if i[1].isnumeric(): if int(i[1]) > 0: r['v'] = i[1] if i[0] == '-a' and 'a' not in r: if i[1].isnumeric(): if int(i[1]) > 0: r['a'] = i[1] if i[0] == '-o' and 'o' not in r: r['o'] = filterd(i[1]) if i[0] == '--af' and 'af' not in r: r['af'] = False if i[0] == '--naf' and 'af' not in r: r['af'] = True if i[0] == '--afp' and 'afp' not in r: r['afp'] = i[1] if i[0] == '-s' and 's' not in r: r['s'] = True if i[0] == '--slt' and 'slt' not in r: r['slt'] = True if i[0] == '--nslt' and 'slt' not in r: r['slt'] = False if i[0] == '--te' and 'te' not in r: r['te'] = True if i[0] == '--nte' and 'te' not in r: r['te'] = False if i[0] == '--bd' and 'bd' not in r: r['bd'] = True if i[0] == '--nbd' and 'bd' not in r: r['bd'] = False if i[0] == '--cad' and 'cad' not in r: r['cad'] = True if i[0] == '--ncad' and 'cad' not in r: r['cad'] = False if i[0] == '--lrh' and 'lrh' not in r: r['lrh'] = True if i[0] == '--nlrh' and 'lrh' not in r: r['lrh'] = False if i[0] == '--ahttpproxy' and 'ahttpproxy' not in r: r['ahttpproxy'] = i[1] if i[0] == '--ahttpsproxy' and 'ahttpsproxy' not in r: r['ahttpsproxy'] = i[1] if i[0] == '--lan' and 'lan' not in r and (i[1] == 'null' or i[1] in lan): r['lan'] = i[1] if i[0] == '--bp' and 'bp' not in r: r['bp'] = True if i[0] == '--nbp' and 'bp' not in r: r['bp'] = False if i[0] == '--in' and 'in' not in r: r['in'] = True if i[0] == '--nin' and 'in' not in r: r['in'] = False if i[0] == '--mt' and 'mt' not in r: r['mt'] = True if i[0] == '--nmt' and 'mt' not in r: r['mt'] = False if i[0] == '--vi' and 'vi' not in r: if i[1].isnumeric(): r['vi'] = int(i[1]) if i[0] == '--uc' and 'uc' not in r: r['uc'] = True if i[0] == '--nuc' and 'uc' not in r: r['uc'] = False if i[0] == '--ass' and 'ass' not in r: r['ass'] = True if i[0] == '--nass' and 'ass' not in r: r['ass'] = False if i[0] == '--dmp' and 'dmp' not in r: r['dmp'] = True if i[0] == '--ndmp' and 'dmp' not in r: r['dmp'] = False if i[0] == '--vf' and 'vf' not in r and i[1] in ['mkv', 'mp4']: r['vf'] = i[1] if i[0] == '--lmd' and 'lmd' not in r and i[1].isnumeric(): if int(i[1]) >= 0: r['lmd'] = int(i[1]) if i[0] == '--ynal' and 'nal' not in r: r['nal'] = True if i[0] == '--nnal' and 'nal' not in r: r['nal'] = False if i[0] == '--log' and 'log' not in r: r['log'] = True if i[0] == '--nlog' and 'log' not in r: r['log'] = False if i[0] == '--yauf' and 'auf' not in r: r['auf'] = True if i[0] == '--nauf' and 'auf' not in r: r['auf'] = False if i[0] == '--ydwa' and 'dwa' not in r: r['dwa'] = True if i[0] == '--ndwa' and 'dwa' not in r: r['dwa'] = False if i[0] == '--yol' and 'ol' not in r: r['ol'] = True if i[0] == '--nol' and 'ol' not in r: r['ol'] = False if i[0] == '--ltid': r['ltid'] = True if i[0] == '--ycc' and 'cc' not in r: r['cc'] = True if i[0] == '--ncc' and 'cc' not in r: r['cc'] = False if i[0] == '--nfo' and 'nfo' not in r: r['nfo'] = True if i[0] == '--nnfo' and 'nfo' not in r: r['nfo'] = False if i[0] == '-V' and 'V' not in r: rs = search(r'^([0-9]+)(avc|hev)?$', i[1]) if rs is not None: vid = int(rs.groups()[0]) if vid in [16, 32, 64, 74, 80, 112, 116, 120, 125]: r['V'] = {'id': vid, 'codec': rs.groups()[1]} elif vid in range(1, 12): r['V'] = {'id': vid, 'codec': rs.groups()[1]} if i[0] == '--anopro' and 'anopro' not in r: r['anopro'] = True if i[0] == '--mxd' and 'mxd' not in r: if i[1].isnumeric(): if int(i[1]) >= 0: r['mxd'] = int(i[1]) if i[0] == '--imn' and 'imn' not in r: r['imn'] = True if i[0] == '--nimn' and 'imn' not in r: r['imn'] = False if i[0] == '--nlt' and search(r'^\+?\d+(\.\d+)?$', i[1]) and 'nlt' not in r: r['nlt'] = float(i[1]) if i[0] == '--nsp' and search(r'^\+?\d+(\.\d+)?$', i[1]) and 'nsp' not in r: t = float(i[1]) t = min(max(round(t * 4), 1), 8) / 4 if t in [1, 2]: t = round(t) r['nsp'] = t if i[0] == '--fnl' and i[1].isnumeric() and 'fnl' not in r: r['fnl'] = int(i[1]) if i[0] == '--lp' and 'lp' not in r: r['lp'] = True if i[0] == '--nlp' and 'lp' not in r: r['lp'] = False if i[0] == '-b': ree = urlsplit(i[1]) if ree.scheme == "bili": pat = f"{ree.netloc}{ree.path}" if ree.path == "/" and i[1].find("://") > -1: pat = ree.netloc argv = ['-i', unquote_plus(pat)] getp = parse_qs(ree.query, True) for key in getp.keys(): if key == 'b': continue val = getp[key] if len(key) == 1: key = f"-{key}" elif len(key) > 1: key = f"--{key}" else: continue if len(val) == 1 and val[0] == "": argv.append(key) else: for v in val: argv.append(key) argv.append(v) if d: print(argv) try: return gopt(argv) except GetoptError: t = i[1][5:] if t.startswith('//'): t = t[2:] argv = ['-i', t] if d: print(argv) return gopt(argv) if h: global la la = getdict('command', getlan(se, r)) ph() sys.exit(0) for i in re[1]: if i.lower() == "show": r['SHOW'] = True return r
def DanmuGeta(c, data, r, t, xml, xmlc, ip: dict, se: dict, che: bool = False): "全弹幕处理" ns = True if 's' in ip: ns = False o = "Download/" read = getset(se, 'o') if read != None: o = read if 'o' in ip: o = ip['o'] try: if not exists(o): mkdir(o) except: print(lan['ERROR3'].replace('<dirname>', o)) #创建文件夹<dirname>失败。 return -1 try: if not exists('Temp'): mkdir('Temp') except: print(lan['ERROR3'].replace('<dirname>', "Temp")) #创建Temp文件夹失败 return -1 fin = True if getset(se, 'in') == False: fin = False if 'in' in ip: fin = ip['in'] if t == 'av': bs = True at2 = False fi = True jt = False if getset(se, 'jt') == True: jt = True while bs: if fi and 'jt' in ip: fi = False at = ip['jt'] elif jt: at = 'a' elif ns: at = input(lan['INPUT2'].replace( '<value>', '1-365')) #请输入两次抓取之间的天数(有效值为<value>,a会启用自动模式(推荐)): else: print(lan['ERROR7']) #请使用"--jt <number>|a|b"来设置两次抓取之间的天数 return -1 if at.isnumeric() and int(at) <= 365 and int(at) >= 1: at = int(at) bs = False elif len(at) > 0 and at[0].lower() == 'a': at2 = True at = 1 bs = False if data['videos'] == 1: if fin: filen = o + file.filtern(data['title'] + "(AV" + str(data['aid']) + ',' + data['bvid'] + ',P' + str(c) + ',' + str(data['page'][c - 1]['cid']) + ").xml") else: filen = f"{o}{file.filtern(data['title'])}.xml" else: if fin: filen = o + file.filtern(data['title'] + '-' + f"{c}." + data['page'][c - 1]['part'] + "(AV" + str(data['aid']) + ',' + data['bvid'] + ',P' + str(c) + ',' + str(data['page'][c - 1]['cid']) + ").xml") else: filen = f"{o}{file.filtern(data['title'])}-{c}.{file.filtern(data['page'][c-1]['part'])}.xml" if exists(filen): fg = False bs = True if not ns: fg = True bs = False if 'y' in ip: if ip['y']: fg = True bs = False else: fg = False bs = False while bs: inp = input( f"{lan['INPUT1'].replace('<filename>',filen)}(y/n)?" ) #文件"<filename>"已存在,是否覆盖? if inp[0].lower() == 'y': bs = False fg = True elif inp[0].lower() == 'n': bs = False if fg: try: remove(filen) except: print(lan['ERROR4']) #删除原有文件失败,跳过下载 return -2 else: return -2 da = int(data['pubdate']) zl = 0 zg = 0 zm = 0 now = 1 now2 = now if ns: print(lan['OUTPUT5']) #正在抓取最新弹幕…… d2 = biliDanmuDown.downloadn(data['page'][c - 1]['cid'], r) if d2 == -1: print(lan['ERROR1']) #网络错误! exit() filen2 = "Temp/a_" + str(data['page'][c - 1]['cid']) + ".xml" if exists(filen2): remove(filen2) try: f = open(filen2, mode='w', encoding='utf8') f.write(d2) f.close() except: print(lan['ERROR2'].replace('<filename>', filen2)) #写入到文件"<filename>"时失败! return -3 d3 = biliDanmuXmlParser.loadXML(filen2) remove(filen2) ma = int(d3['maxlimit']) allok = False if len(d3['list']) < ma - 10: bs = True if not ns: bs = False while bs: sts = input( f"{lan['INPUT3'].replace('<number>',str(len(d3['list']))).replace('<limit>',str(ma))}(y/n)" ) if len(sts) > 0: if sts[0].lower() == 'y': bs = False elif sts[0].lower() == 'n': allok = True bs = False if not allok: d2 = d3 if ns: print(lan['OUTPUT6'].replace('<number>', str(len( d2['list'])))) #抓取到<number>条弹幕,最新弹幕将在最后处理 try: f2 = open(filen, mode='w', encoding='utf8') except: print(lan['ERROR5'].replace('<filename>', filen)) #打开文件"<filename>"失败 return -3 if not allok: try: f2.write('<?xml version="1.0" encoding="UTF-8"?>') f2.write( '<i><chatserver>%s</chatserver><chatid>%s</chatid><mission>%s</mission><maxlimit>%s</maxlimit><state>%s</state><real_name>%s</real_name><source>%s</source>' % (d2['chatserver'], d2['chatid'], d2['mission'], d2['maxlimit'], d2['state'], d2['real_name'], d2['source'])) except: print(lan['ERROR6'].replace('<filename>', filen)) #保存文件失败 return -3 mri = 0 mri2 = 0 t1 = 0 t2 = 0 tem = {} fir = True while not allok and biliTime.equal( biliTime.getDate(da), biliTime.getNowDate()) < 0 and ( (not at2) or (at2 and biliTime.equal(biliTime.getDate(da + now * 24 * 3600), biliTime.getNowDate()) < 0)): t1 = time.time() if (not at2) or fir: if ns: print(lan['OUTPUT7'].replace( '<date>', biliTime.tostr( biliTime.getDate(da)))) #正在抓取<date>的弹幕…… bs = True ts = 300 rec = 0 while bs: read = downloadh(filen2, r, data['page'][c - 1]['cid'], da) if read == -1: return -3 elif read == -3: rec = rec + 1 if rec % 5 != 0: time.sleep(5) print(lan['OUTPUT8'].replace( '<number>', str(rec))) #正在进行第<number>次重连 else: bss = True while bss: inn = input( f"{lan['INPUT4'].replace('<number>',str(rec))}(y/n)" ) #是否重连?(已经失败<number>次) if len(inn) > 0 and inn[0].lower() == 'y': time.sleep(5) print(lan['OUTPUT8'].replace( '<number>', str(rec))) #正在进行第<number>次重连 elif len(inn) > 0 and inn[0].lower() == 'n': exit() elif 'status' in read and read['status'] == -2: obj = json.loads(read['d']) if obj['code'] == -101: if obj['message'] == '账户未登录': ud = {} read = biliLogin.login(r, ud, ip) if read > 1: exit() else: print(obj) print(lan['OUTPUT9'].replace( '<number>', str(ts))) #休眠<number>s time.sleep(ts) ts = ts + 300 else: print(obj) print(lan['OUTPUT9'].replace( '<number>', str(ts))) #休眠<number>s time.sleep(ts) ts = ts + 300 else: bs = False d = read l = 0 g = 0 if ns: print(lan['OUTPUT10']) #正在处理弹幕…… for i in d['list']: if mri2 < int(i['ri']): mri2 = int(i['ri']) if mri < int(i['ri']): l = l + 1 if xml == 2: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 elif xml == 1: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 else: rr = False rr2 = False if biliTime.tostr(biliTime.getDate(da + now * 24 * 3600)) in tem: if ns: print(lan['OUTPUT11'].replace( '<date>', biliTime.tostr( biliTime.getDate(da + now * 24 * 3600)))) #从内存中获取了<date>的弹幕。 read = biliDanmuAuto.reload( tem.pop( biliTime.tostr( biliTime.getDate(da + now * 24 * 3600))), mri, ns) rr = True if read['z'] == read[ 'l'] and read['z'] > ma - 10 and now > 1: rr2 = True if (not rr) or (rr and rr2): if (not rr): read = biliDanmuAuto.getMembers( filen2, r, da + now * 24 * 3600, data['page'][c - 1]['cid'], mri, ip) if read == -1: return -3 while read['z'] == read[ 'l'] and read['z'] > ma - 10 and now > 1: #if ns: #print('尝试抓取了%s的弹幕,获取到%s条有效弹幕,未防止遗漏,间隔时间减半' % (biliTime.tostr(biliTime.getDate(da+now*24*3600)),read['l'])) tem[biliTime.tostr( biliTime.getDate(da + now * 24 * 3600))] = read now = now / 2 if now < 1: now = 1 read = biliDanmuAuto.getMembers( filen2, r, da + now * 24 * 3600, data['page'][c - 1]['cid'], mri, ip) if read == -1: return -3 now2 = now if read['l'] < ma * 0.5: now2 = now * 2 if now2 > 365: now2 = 365 l = read['l'] g = 0 mri2 = read['m'] if ns: print(lan['OUTPUT12']) #正在处理…… for i in read['d']['list']: if xml == 2: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 elif xml == 1: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen2)) #写入到文件"<filename>"时失败! return -3 bs2 = True while bs2 and biliTime.equal( biliTime.getDate(da + (now2 + now) * 24 * 3600), biliTime.getNowDate()) >= 0: if allok: read = biliDanmuAuto.getnownumber(d3, mri2) else: read = biliDanmuAuto.getnownumber(d2, mri2) if read['l'] == read['m']: now2 = now2 / 2 if now2 < 1: now2 = 1 else: bs2 = False m = l - g zl = zl + l zm = zm + m zg = zg + g if ns: print(lan['OUTPUT13'].replace('<number>', f"{l}({zl})")) #获取了<number>条弹幕。 if xml == 1 and ns: print(lan['OUTPUT14'].replace('<number>', f"{g}({zg})")) #过滤了<number>条弹幕。 print(lan['OUTPUT15'].replace( '<number>', f"{m}({zm})")) #实际输出了<number>条弹幕。 if t2 == 0 or t1 - t2 < 2: time.sleep(2) t2 = t1 if not at2: da = da + at * 3600 * 24 elif fir: fir = False else: da = da + now * 3600 * 24 now = now2 mri = mri2 if not allok: if ns: print(lan['OUTPUT16']) #开始处理最新的弹幕…… l = 0 g = 0 for i in d2['list']: if int(mri) < int(i['ri']): l = l + 1 if xml == 2: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 elif xml == 1: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 try: f2.write('</i>') f2.close() except: print(lan['ERROR2'].replace('<filename>', filen2)) #写入到文件"<filename>"时失败! return -3 m = l - g zl = zl + l zg = zg + g zm = zm + m if ns: print(lan['OUTPUT17'].replace('<number>', str(l))) #在最新弹幕中获取新弹幕<number>条。 if xml == 1 and ns: print(lan['OUTPUT14'].replace('<number>', str(g))) #过滤了<number>条弹幕。 print(lan['OUTPUT15'].replace('<number>', str(m))) #实际输出了<number>条弹幕。 if ns: print(lan['OUTPUT18'].replace('<number>', str(zl))) #总共获取了<number>条弹幕 if xml == 1 and ns: print(lan['OUTPUT3'].replace('<number>', str(zg))) #共计过滤<number>条弹幕。 print(lan['OUTPUT4'].replace('<number>', str(zm))) #实际输出<number>条弹幕。 else: if xml == 2: try: f2.write(d2) f2.close() except: print(lan['ERROR2'].replace('<filename>', filen)) #写入到文件"<filename>"时失败! return -3 if xml == 1: z = len(d3['list']) g = 0 for i in d3['list']: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 try: f2.close() except: print(lan['ERROR2'].replace('<filename>', filen)) #写入到文件"<filename>"时失败! return -3 m = z - g if ns: print(lan['OUTPUT13'].replace('<number>', str(z))) #获取了<number>条弹幕。 print(lan['OUTPUT14'].replace('<number>', str(g))) #过滤了<number>条弹幕。 print(lan['OUTPUT15'].replace('<number>', str(m))) #实际输出了<number>条弹幕。 return 0 elif t == 'ss': bs = True at2 = False if not che: pubt = data['mediaInfo']['time'][0:10] else: pubt = biliTime.tostr2(c['time'])[0:10] fi = True jt = False if getset(se, 'jt') == True: jt = True if 'jts' in ip: pubt = ip['jts'] while bs: if fi and 'jt' in ip: fi = False at = ip['jt'] elif jt: at = 'a' elif ns: at = input( lan['INPUT5'].replace('<value>', '1-365').replace( '<date>', str(pubt)) ) #请输入两次抓取之间的天数(有效值为<value>,输入a会启用自动模式(推荐),输入b可手动输入开始抓取的日期,日期目前为<date>): else: print(lan['ERROR7']) #请使用"--jt <number>|a|b"来设置两次抓取之间的天数 return -1 if at.isnumeric() and int(at) <= 365 and int(at) >= 1: at = int(at) bs = False elif len(at) > 0 and at[0].lower() == 'a': at2 = True at = 1 bs = False elif len(at) > 0 and at[0].lower() == 'b': if not ns: print(lan['ERROR8']) #请使用"--jts <date>"来修改抓取开始时间。 return -1 at3 = input(lan['INPUT6']) #请输入日期(格式为年-月-日,例如1989-02-25): if len(at3) > 0: if biliTime.checktime(at3): pubt = time.strftime('%Y-%m-%d', time.strptime(at3, '%Y-%m-%d')) else: print(lan['ERROR9']) #输入格式有误或者该日期不存在。 pubt = biliTime.mkt(time.strptime(pubt, '%Y-%m-%d')) da = int(pubt) pat = o + file.filtern( '%s(SS%s)' % (data['mediaInfo']['title'], data['mediaInfo']['ssId'])) try: if not exists(pat): mkdir(pat) except: print(lan['ERROR3'].replace('<dirname>', pat)) #创建文件夹<dirname>失败。 return -1 if c['s'] == 'e': if fin: filen = '%s/%s' % ( pat, file.filtern('%s.%s(%s,AV%s,%s,ID%s,%s).xml' % (c['i'] + 1, c['longTitle'], c['titleFormat'], c['aid'], c['bvid'], c['id'], c['cid']))) else: filen = '%s/%s' % ( pat, file.filtern(f"{c['i']+1}.{c['longTitle']}.xml")) else: if fin: filen = '%s/%s' % (pat, file.filtern( '%s%s.%s(%s,AV%s,%s,ID%s,%s).xml' % (c['title'], c['i'] + 1, c['longTitle'], c['titleFormat'], c['aid'], c['bvid'], c['id'], c['cid']))) else: filen = '%s/%s' % ( pat, file.filtern( f"{c['title']}{c['i']+1}.{c['longTitle']}.xml")) if exists(filen): fg = False bs = True if not ns: fg = True bs = False if 'y' in ip: if ip['y']: fg = True bs = False else: fg = False bs = False while bs: inp = input( f"{lan['INPUT1'].replace('<filename>',filen)}(y/n)?" ) #文件"<filename>"已存在,是否覆盖? if inp[0].lower() == 'y': bs = False fg = True elif inp[0].lower() == 'n': bs = False if fg: try: remove(filen) except: print(lan['ERROR4']) #删除原有文件失败,跳过下载 return -2 else: return -2 zl = 0 zg = 0 zm = 0 now = 1 now2 = now if ns: print(lan['OUTPUT5']) #正在抓取最新弹幕…… d2 = biliDanmuDown.downloadn(c['cid'], r) if d2 == -1: print(lan['ERROR1']) #网络错误! exit() filen2 = "Temp/a_" + str(c['cid']) + ".xml" if exists(filen2): remove(filen2) try: f = open(filen2, mode='w', encoding='utf8') f.write(d2) f.close() except: print(lan['ERROR2'].replace('<filename>', filen2)) #写入到文件"<filename>"时失败! return -3 d3 = biliDanmuXmlParser.loadXML(filen2) remove(filen2) ma = int(d3['maxlimit']) allok = False if len(d3['list']) < ma - 10: bs = True if not ns: bs = False while bs: sts = input( f"{lan['INPUT3'].replace('<number>',str(len(d3['list']))).replace('<limit>',str(ma))}(y/n)" ) if len(sts) > 0: if sts[0].lower() == 'y': bs = False elif sts[0].lower() == 'n': allok = True bs = False if not allok: d2 = d3 if ns: print(lan['OUTPUT6'].replace('<number>', str(len( d2['list'])))) #抓取到<number>条弹幕,最新弹幕将在最后处理 try: f2 = open(filen, mode='w', encoding='utf8') except: print(lan['ERROR5'].replace('<filename>', filen)) #打开文件"<filename>"失败 return -3 if not allok: try: f2.write('<?xml version="1.0" encoding="UTF-8"?>') f2.write( '<i><chatserver>%s</chatserver><chatid>%s</chatid><mission>%s</mission><maxlimit>%s</maxlimit><state>%s</state><real_name>%s</real_name><source>%s</source>' % (d2['chatserver'], d2['chatid'], d2['mission'], d2['maxlimit'], d2['state'], d2['real_name'], d2['source'])) except: print(lan['ERROR6'].replace('<filename>', filen)) #保存文件失败 return -3 mri = 0 mri2 = 0 t1 = 0 t2 = 0 tem = {} fir = True while not allok and biliTime.equal( biliTime.getDate(da), biliTime.getNowDate()) < 0 and ( (not at2) or (at2 and biliTime.equal(biliTime.getDate(da + now * 24 * 3600), biliTime.getNowDate()) < 0)): t1 = time.time() if (not at2) or fir: if ns: print(lan['OUTPUT7'].replace( '<date>', biliTime.tostr( biliTime.getDate(da)))) #正在抓取<date>的弹幕…… bs = True ts = 300 rec = 0 while bs: read = downloadh(filen2, r, c['cid'], da) if read == -1: return -3 elif read == -3: rec = rec + 1 if rec % 5 != 0: time.sleep(5) print(lan['OUTPUT8'].replace( '<number>', str(rec))) #正在进行第<number>次重连 else: bss = True while bss: inn = input( f"{lan['INPUT4'].replace('<number>',str(rec))}(y/n)" ) #是否重连?(已经失败<number>次) if len(inn) > 0 and inn[0].lower() == 'y': time.sleep(5) print(lan['OUTPUT8'].replace( '<number>', str(rec))) #正在进行第<number>次重连 elif len(inn) > 0 and inn[0].lower() == 'n': exit() elif 'status' in read and read['status'] == -2: obj = json.loads(read['d']) if obj['code'] == -101: if obj['message'] == '账户未登录': ud = {} read = biliLogin.login(r, ud, ip) if read > 1: exit() else: print(obj) print(lan['OUTPUT9'].replace( '<number>', str(ts))) #休眠<number>s time.sleep(ts) ts = ts + 300 else: print(obj) print(lan['OUTPUT9'].replace( '<number>', str(ts))) #休眠<number>s time.sleep(ts) ts = ts + 300 else: bs = False d = read l = 0 g = 0 if ns: print(lan['OUTPUT10']) #正在处理弹幕…… for i in d['list']: if mri2 < int(i['ri']): mri2 = int(i['ri']) if mri < int(i['ri']): l = l + 1 if xml == 2: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 elif xml == 1: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 else: rr = False rr2 = False if biliTime.tostr(biliTime.getDate(da + now * 24 * 3600)) in tem: if ns: print(lan['OUTPUT11'].replace( '<date>', biliTime.tostr( biliTime.getDate(da + now * 24 * 3600)))) #从内存中获取了<date>的弹幕。 read = biliDanmuAuto.reload( tem.pop( biliTime.tostr( biliTime.getDate(da + now * 24 * 3600))), mri, ns) rr = True if read['z'] == read[ 'l'] and read['z'] > ma - 10 and now > 1: rr2 = True if (not rr) or (rr and rr2): if (not rr): read = biliDanmuAuto.getMembers( filen2, r, da + now * 24 * 3600, c['cid'], mri, ip) if read == -1: return -3 while read['z'] == read[ 'l'] and read['z'] > ma - 10 and now > 1: #if ns: #print('尝试抓取了%s的弹幕,获取到%s条有效弹幕,未防止遗漏,间隔时间减半' % (biliTime.tostr(biliTime.getDate(da+now*24*3600)),read['l'])) tem[biliTime.tostr( biliTime.getDate(da + now * 24 * 3600))] = read now = now / 2 if now < 1: now = 1 read = biliDanmuAuto.getMembers( filen2, r, da + now * 24 * 3600, c['cid'], mri, ip) if read == -1: return -3 now2 = now if read['l'] < ma * 0.5: now2 = now * 2 if now2 > 365: now2 = 365 l = read['l'] g = 0 mri2 = read['m'] if ns: print(lan['OUTPUT12']) #正在处理…… for i in read['d']['list']: if xml == 2: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 elif xml == 1: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen2)) #写入到文件"<filename>"时失败! return -3 bs2 = True while bs2 and biliTime.equal( biliTime.getDate(da + (now2 + now) * 24 * 3600), biliTime.getNowDate()) >= 0: if allok: read = biliDanmuAuto.getnownumber(d3, mri2) else: read = biliDanmuAuto.getnownumber(d2, mri2) if read['l'] == read['m']: now2 = now2 / 2 if now2 < 1: now2 = 1 else: bs2 = False m = l - g zl = zl + l zm = zm + m zg = zg + g if ns: print(lan['OUTPUT13'].replace('<number>', f"{l}({zl})")) #获取了<number>条弹幕。 if xml == 1 and ns: print(lan['OUTPUT14'].replace('<number>', f"{g}({zg})")) #过滤了<number>条弹幕。 print(lan['OUTPUT15'].replace( '<number>', f"{m}({zm})")) #实际输出了<number>条弹幕。 if t2 == 0 or t1 - t2 < 2: time.sleep(2) t2 = t1 if not at2: da = da + at * 3600 * 24 elif fir: fir = False else: da = da + now * 3600 * 24 now = now2 mri = mri2 if not allok: if ns: print(lan['OUTPUT16']) #开始处理最新的弹幕…… l = 0 g = 0 for i in d2['list']: if int(mri) < int(i['ri']): l = l + 1 if xml == 2: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 elif xml == 1: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 try: f2.write('</i>') f2.close() except: print(lan['ERROR2'].replace('<filename>', filen2)) #写入到文件"<filename>"时失败! return -3 m = l - g zl = zl + l zg = zg + g zm = zm + m if ns: print(lan['OUTPUT17'].replace('<number>', str(l))) #在最新弹幕中获取新弹幕<number>条。 if xml == 1 and ns: print(lan['OUTPUT14'].replace('<number>', str(g))) #过滤了<number>条弹幕。 print(lan['OUTPUT15'].replace('<number>', str(m))) #实际输出了<number>条弹幕。 if ns: print(lan['OUTPUT18'].replace('<number>', str(zl))) #总共获取了<number>条弹幕 if xml == 1 and ns: print(lan['OUTPUT3'].replace('<number>', str(zg))) #共计过滤<number>条弹幕。 print(lan['OUTPUT4'].replace('<number>', str(zm))) #实际输出<number>条弹幕。 else: if xml == 2: try: f2.write(d2) f2.close() except: print(lan['ERROR2'].replace('<filename>', filen)) #写入到文件"<filename>"时失败! return -3 if xml == 1: z = len(d3['list']) g = 0 for i in d3['list']: read = biliDanmuXmlFilter.Filter(i, xmlc) if read: g = g + 1 else: try: f2.write(biliDanmuCreate.objtoxml(i)) except: print(lan['ERROR2'].replace( '<filename>', filen)) #写入到文件"<filename>"时失败! return -3 try: f2.close() except: print(lan['ERROR2'].replace('<filename>', filen)) #写入到文件"<filename>"时失败! return -3 m = z - g if ns: print(lan['OUTPUT13'].replace('<number>', str(z))) #获取了<number>条弹幕。 print(lan['OUTPUT14'].replace('<number>', str(g))) #过滤了<number>条弹幕。 print(lan['OUTPUT15'].replace('<number>', str(m))) #实际输出了<number>条弹幕。 return 0
def gopt(args,d:bool=False) : re = getopt(args, 'h?i:d:p:m:r:ynFv:a:o:scb:', ['help', 'ac=', 'dm=', 'ad=', 'yf', 'nf', 'mc=', 'ar', 'nar', 'ax=', 'as=', 'ak=', 'ab', 'nab', 'fa=', 'sv=', 'ma=', 'ms=', 'da=', 'httpproxy=', 'httpsproxy=', 'jt=', 'jts=', 'af', 'naf', 'afp=', 'slt', 'nslt', 'te', 'nte', 'bd', 'nbd', 'cad', 'ncad', 'lrh', 'nlrh', 'ym', 'nm', 'yac', 'nac', 'ydm', 'ndm', 'yad', 'nad', 'yr', 'nr', 'ysv', 'nsv', 'yma', 'nma', 'yda', 'nda', 'ahttpproxy=', 'ahttpsproxy=', 'lan=', 'bp', 'nbp', 'in', 'nin', 'mt', 'nmt', 'vi=', 'uc', 'nuc', 'ass', 'nass', 'dmp', 'ndmp', 'vf=', 'lmd=', 'ynal', 'nnal', 'log', 'nlog', 'yauf', 'nauf', 'ydwa', 'ndwa', 'yol', 'nol', 'ltid']) if d: print(re) rr=re[0] r={} h=False for i in rr: if i[0]=='-h' or i[0]=='-?' or i[0]=='--help': h=True if i[0]=='-i' and not 'i' in r: r['i']=i[1] if i[0]=='-d' and not 'd' in r and i[1].isnumeric() and int(i[1])>0 and int(i[1])<9 : r['d']=int(i[1]) if i[0]=='-p' and not 'p' in r : r['p']=i[1] if i[0]=='-m' and not 'm' in r : if i[1].lower()=='true' : r['m']=True elif i[1].lower()=='false' : r['m']=False if i[0]=='--ym' and not 'm' in r: r['m']=True if i[0]=='--nm' and not 'm' in r: r['m']=False if i[0]=='--ac' and not 'ac' in r: if i[1].lower()=='true' : r['ac']=True elif i[1].lower()=='false' : r['ac']=False if i[0]=='--yac' and not 'ac' in r: r['ac']=True if i[0]=='--nac' and not 'ac' in r: r['ac']=False if i[0]=='--dm' and not 'dm' in r: if i[1].lower()=='true' : r['dm']=True elif i[1].lower()=='false' : r['dm']=False if i[0]=='--ydm' and not 'dm' in r: r['dm']=True if i[0]=='--ndm' and not 'dm' in r: r['dm']=False if i[0]=='--ad' and not 'ad' in r: if i[1].lower()=='true' : r['ad']=True elif i[1].lower()=='false' : r['ad']=False if i[0]=='--yad' and not 'ad' in r: r['ad']=True if i[0]=='--nad' and not 'ad' in r: r['ad']=False if i[0]=='-r' and not 'r' in r: if i[1].lower()=='true' : r['r']=True elif i[1].lower()=='false' : r['r']=False if i[0]=='--yr' and not 'r' in r: r['r']=True if i[0]=='--nr' and not 'r' in r: r['r']=False if i[0]=='-y' and not 'y' in r: r['y']=True if i[0]=='-n' and not 'y' in r: r['y']=False if i[0]=='--yf' and not 'yf' in r: r['yf']=True if i[0]=='--nf' and not 'yf' in r: r['yf']=False if i[0]=='--mc' and not 'mc' in r: if i[1].lower()=='avc' : r['mc']=True elif i[1].lower()=='hev' : r['mc']=False if i[0]=='--ar' and not 'ar' in r: r['ar']=True if i[0]=='--nar' and not 'ar' in r: r['ar']=False if i[0]=='--ax' and not 'ax' in r: if i[1].isnumeric() : i2=int(i[1]) if i2<17 and i2>0 : r['ax']=i2 if i[0]=='--as' and not 'as' in r: if i[1].isnumeric() : i2=int(i[1]) if i2>0 : r['as']=i2 if i[0]=='--ak' and not 'ak' in r: if i[1].isnumeric() : i2=int(i[1]) if i2>0 and i2<1025 : r['ak']=i2 if i[0]=='--ab' and not 'ab' in r: r['ab']=True if i[0]=='--nab' and not 'ab' in r: r['ab']=False if i[0]=='--fa' and not 'fa' in r: if i[1].lower()=='none' or i[1].lower()=='prealloc' or i[1].lower()=='trunc' or i[1].lower()=='falloc': r['fa']=i[1].lower() if i[0]=='--sv' and not 'sv' in r: if i[1].lower()=='true' : r['sv']=True elif i[1].lower()=='false' : r['sv']=False if i[0]=='--ysv' and not 'sv' in r: r['sv']=True if i[0]=='--nsv' and not 'sv' in r: r['sv']=False if i[0]=='--ma' and not 'ma' in r: if i[1].lower()=='true' : r['ma']=True elif i[1].lower()=='false' : r['ma']=False if i[0]=='--yma' and not 'ma' in r: r['ma']=True if i[0]=='--nma' and not 'ma' in r: r['ma']=False if i[0]=='--ms' and not 'ms' in r: t=search("^[0-9]+[MK]?$",i[1]) if t!=None : r['ms']=i[1] if i[0]=='--da' and not 'da' in r: if i[1].lower()=='true' : r['da']=True elif i[1].lower()=='false' : r['da']=False if i[0]=='--yda' and not 'da' in r: r['da']=True if i[0]=='--nda' and not 'da' in r: r['da']=False if i[0]=='--httpproxy' and not 'httpproxy' in r: r['httpproxy']=i[1] if i[0]=='--httpsproxy' and not 'httpsproxy' in r: r['httpsproxy']=i[1] if i[0]=="--jt" and not 'jt' in r: if i[1].lower()=='a' or i[1].lower()=='b' or i[1].isnumeric(): r['jt']=i[1].lower() if i[0]=='--jts' and not 'jts' in r: if checktime(i[1]) : r['jts']=i[1] if i[0]=='-F' and not 'F' in r: r['F']=True if i[0]=='-v' and not 'v' in r: if i[1].isnumeric() : if int(i[1])>0 : r['v']=i[1] if i[0]=='-a' and not 'a' in r: if i[1].isnumeric(): if int(i[1])>0: r['a']=i[1] if i[0]=='-o' and not 'o' in r: r['o']=filterd(i[1]) if i[0]=='--af' and not 'af' in r: r['af']=False if i[0]=='--naf' and not 'af' in r: r['af']=True if i[0]=='--afp' and not 'afp' in r: r['afp']=i[1] if i[0]=='-s' and not 's' in r: r['s']=True if i[0]=='--slt' and not 'slt' in r: r['slt']=True if i[0]=='--nslt' and not 'slt' in r: r['slt']=False if i[0]=='--te' and not 'te' in r: r['te']=True if i[0]=='--nte' and not 'te' in r: r['te']=False if i[0]=='--bd' and not 'bd' in r: r['bd']=True if i[0]=='--nbd' and not 'bd' in r: r['bd']=False if i[0]=='--cad' and not 'cad' in r: r['cad']=True if i[0]=='--ncad' and not 'cad' in r: r['cad']=False if i[0]=='--lrh' and not 'lrh' in r: r['lrh']=True if i[0]=='--nlrh' and not 'lrh' in r: r['lrh']=False if i[0]=='--ahttpproxy' and not 'ahttpproxy' in r: r['ahttpproxy']=i[1] if i[0]=='--ahttpsproxy' and not 'ahttpsproxy' in r: r['ahttpsproxy']=i[1] if i[0]=='--lan' and not 'lan' in r and (i[1]=='null' or i[1] in lan) : r['lan']=i[1] if i[0]=='--bp' and not 'bp' in r: r['bp']=True if i[0]=='--nbp' and not 'bp' in r: r['bp']=False if i[0]=='--in' and not 'in' in r: r['in']=True if i[0]=='--nin' and not 'in' in r: r['in']=False if i[0]=='--mt' and not 'mt' in r: r['mt']=True if i[0]=='--nmt' and not 'mt' in r: r['mt']=False if i[0]=='--vi' and not 'vi' in r: if i[1].isnumeric(): r['vi'] = int(i[1]) if i[0] == '--uc' and not 'uc' in r: r['uc'] = True if i[0] == '--nuc' and not 'uc' in r: r['uc'] = False if i[0] == '--ass' and not 'ass' in r: r['ass'] = True if i[0] == '--nass' and not 'ass' in r: r['ass'] = False if i[0] == '--dmp' and not 'dmp' in r: r['dmp'] = True if i[0] == '--ndmp' and not 'dmp' in r: r['dmp'] = False if i[0] == '--vf' and not 'vf' in r and i[1] in ['mkv', 'mp4']: r['vf'] = i[1] if i[0] == '--lmd' and not 'lmd' in r and i[1].isnumeric(): if int(i[1]) >= 0: r['lmd'] = int(i[1]) if i[0] == '--ynal' and not 'nal' in r: r['nal'] = True if i[0] == '--nnal' and not 'nal' in r: r['nal'] = False if i[0] == '--log' and not 'log' in r: r['log'] = True if i[0] == '--nlog' and not 'log' in r: r['log'] = False if i[0] == '--yauf' and not 'auf' in r: r['auf'] = True if i[0] == '--nauf' and not 'auf' in r: r['auf'] = False if i[0] == '--ydwa' and not 'dwa' in r: r['dwa'] = True if i[0] == '--ndwa' and not 'dwa' in r: r['dwa'] = False if i[0] == '--yol' and not 'ol' in r: r['ol'] = True if i[0] == '--nol' and not 'ol' in r: r['ol'] = False if i[0] == '--ltid': r['ltid'] = True if i[0] == '-b': ree = urlsplit(i[1]) if ree.scheme == "bili": pat = f"{ree.netloc}{ree.path}" if ree.path == "/" and i[1].find("://") > -1: pat = ree.netloc argv = ['-i', unquote_plus(pat)] getp = parse_qs(ree.query, True) for key in getp.keys(): if key == 'b': continue val = getp[key] if len(key) == 1: key = f"-{key}" elif len(key) > 1: key = f"--{key}" else: continue if len(val) == 1 and val[0] == "": argv.append(key) else: for v in val: argv.append(key) argv.append(v) if d: print(argv) try: return gopt(argv) except GetoptError: t = i[1][5:] if t.startswith('//'): t = t[2:] argv = ['-i', t] if d: print(argv) return gopt(argv) if h: global la la=getdict('command',getlan(se,r)) ph() exit() for i in re[1] : if i.lower()=="show": r['SHOW'] = True return r