Example #1
0
 def __init__(self, ip: dict, fl: List[str]):
     if 'u' in ip:
         self._upa = True
     if 'c' in ip:
         self._onlyc = True
     if 'j' in ip:
         self._java = ip['j']
     if not exists('webuihtml/js(origin)/'):
         raise FileNotFoundError('webuihtml/js(origin)/')
     if len(fl) == 0:
         fl = listdir('webuihtml/js(origin)/')
     self._r = Session()
     if not self._onlyc:
         tag = self._get_tag(
             'https://api.github.com/repos/jquery/jquery/tags')
         if not exists('webuihtml/jso/'):
             mkdir('webuihtml/jso/')
         self._check('webuihtml/jso/jquery.js',
                     f"https://code.jquery.com/jquery-{tag}.min.js", tag)
         self._check('webuihtml/jso/qrcode.min.js',
                     "https://github.com/davidshimjs/qrcodejs/raw/master/qrcode.min.js")
         tag = self._get_tag(
             'https://api.github.com/repos/emn178/js-sha256/tags')
         self._check('webuihtml/jso/sha256.min.js',
                     "https://github.com/emn178/js-sha256/raw/master/build/sha256.min.js", tag)
         tag = self._get_tag(
             'https://api.github.com/repos/fengyuanchen/viewerjs/tags')
         self._check('webuihtml/jso/viewer.min.js',
                     'https://github.com/fengyuanchen/viewerjs/raw/master/dist/viewer.min.js', tag)
         if not exists('webuihtml/csso/'):
             mkdir('webuihtml/csso/')
         self._check('webuihtml/csso/viewer.min.css',
                     'https://github.com/fengyuanchen/viewerjs/raw/master/dist/viewer.min.css', tag)
         tag = self._get_tag(
             'https://api.github.com/repos/zenorocha/clipboard.js/tags')
         self._check('webuihtml/jso/clipboard.min.js',
                     'https://github.com/zenorocha/clipboard.js/raw/master/dist/clipboard.min.js', tag)
         tag = self._get_tag(
             'https://api.github.com/repos/eligrey/FileSaver.js/tags')
         self._check('webuihtml/jso/FileSaver.min.js',
                     "https://github.com/eligrey/FileSaver.js/raw/master/dist/FileSaver.min.js", tag)
         if not self._check_java():
             raise FileNotFoundError('Can not find java.')
         tag = self._get_compiler_tag()
         self._check(
             'compiler.jar', f"https://repo1.maven.org/maven2/com/google/javascript/closure-compiler/{tag}/closure-compiler-{tag}.jar", tag)
         tag = self._get_tag(
             'https://api.github.com/repos/dankogai/js-base64/tags')
         self._check_with_com('webuihtml/jso/base64.min.js',
                              "https://github.com/dankogai/js-base64/raw/main/base64.js", tag)
     else:
         if not self._check_java():
             raise FileNotFoundError('Can not find java.')
         if not exists('compiler.jar'):
             raise FileNotFoundError('compiler.jar')
     for fn in fl:
         fn2 = f'webuihtml/js(origin)/{fn}'
         if not exists(fn2):
             raise FileNotFoundError(fn2)
         self._com_javascript(fn)
Example #2
0
def analyse(code, begin=None, end=None, param=None):
    paramjson = json.loads(param)
    print(code)
    print(begin)
    print(end)
    print(param)

    ma1 = int(paramjson["ma1"])
    ma2 = int(paramjson["ma2"])

    # 0 获取数据
    data = loadDaily(code=code)
    # 计算所需数据
    lib.ma(data, ma1)
    lib.ma(data, ma2)
    lib.shift(data, ["ma" + str(ma1), "ma" + str(ma2)], [-1])
    lib.itemv(data, items=["close"], axis=[5, 10, 20, 30])
    data = data.dropna(axis=0, how="any")

    data["b"] = data.apply(signal, axis=1, args=(ma1, ma2))

    outpath = datapath + "/maline/" + code
    mkdir(outpath)
    data.to_csv(outpath + "/result.csv")
    rdata = data[data["b"] == 1]
    print(rdata.values)
    return rdata
Example #3
0
 def update(self) -> int:
     t = time()
     li = self.downloadPlaylist()
     if li is None:
         return None
     m = self._mts
     for i in li:
         t = urlsplitfn(i)
         if t[:-3].isnumeric():
             t = int(t[:-3])
             if m == -1:
                 m = t - 1
                 self._mts = t - 1
             if t > m:
                 m = t
     if m == self._mts:
         return t
     r = self.genUrl(self._mts, m, li[0])
     self._mts = m
     dirN = f"{self._dirName}/{self._stream['quality']}"
     if not exists(dirN):
         mkdir(dirN)
     ts = TSDownloader(f"{self._tname},{self._tc}", self._r, dirN, r, self._dp, self._logg)
     self._threadMap[self._tc] = ts
     ts.start()
     self._tc += 1
     return t
Example #4
0
 def save(self, fn: str):
     self.update()
     pn = dirname(fn)
     if not exists(pn):
         mkdir(pn)
     a = splitext(fn)
     fn = a[0] + '.nfo'
     if exists(fn):
         remove(fn)
     with open(fn, 'w', encoding='utf8') as f:
         f.write('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>')
         f.write(self.root.toxml())
Example #5
0
 def openf(self, fn: str):
     if self.__f is not None:
         self.__f.close()
         self.__f = None
     rfd, rfn = spfln(fn)
     rfd = filterd(rfd)
     rfn = filtern(rfn, 100)
     if not exists(rfd):
         mkdir(rfd)
     self.__f = open(f"{rfd}{rfn}", 'w', encoding='utf8')
     if self.__index == 1:
         self.__fn = f"{rfd}{rfn}"
     self.__fsize = 0
     self.__tsize = 0
Example #6
0
def getCode(readPath, locationPath):
    zx = BarCodeReader()
    # path = "G:/python-zxing/source/"  # 待读取的文件夹
    path_list = os.listdir(readPath)
    path_list.sort()  # 对读取的路径进行排序
    arr = []
    arrPath = ""
    flag = 0
    for filename in path_list:
        if filename.endswith('jpg'):
            start = time.process_time()
            arr.append(filename)
            with open(os.path.join(readPath, filename), "r") as code1:
                print(os.path.join(readPath, filename))
                print(str())
                img = Image.open("G://python-zxing//source//IMG_20181225_134218.jpg")
                out = img.resize((800, 1000)).convert('L')
                # out = img.convert('L')
                en = ImageEnhance.Contrast(out)
                en_end = en.enhance(2)
                result = en_end.crop((100, 400, 600, 800))
                result.save('tmp.png', 'png')
                barcode = zx.decode('tmp.png')
                code = str(barcode).split("'")[1][0:12]
                end = time.process_time()
                runtime = end-start
                print('图片分析时间  %s 毫秒' % (int(round(runtime * 1000))))

                # print(code)
                path2 = "G:/python-zxing/source/pic/"  # 待读取的文件夹
                # print(arr)
                if(code != ""):
                    flag = 1
                    file.mkdir(locationPath+code)
                    arrPath = locationPath+code
            # print(flag)
                if(flag == 1):
                    # print("-------------------------------------")
                    # for item in arr:
                        # print(item)
                    try:
                        shutil.copy(filename, arrPath)
                    except IOError:
                        print('cannot COPY')
                if(len(arr) == 3):
                    arr = []
                    flag = 0
    return
Example #7
0
def parseMeizitu(html, host, page):
    lists = parseHtml.parseList(html)
    for list in lists:
        time.sleep(2)
        filePath = "img/" + list['name']
        file.mkdir(filePath)
        deilHtml = requestHttp.getHttp(list['link'])
        imgs = parseHtml.parseDeil(deilHtml)

        for i, img in enumerate(imgs):
            filename = filePath + '/' + str(i) + '.jpg'  # 保持图片路径
            print('开始下载图片:' + img['img'])

            if os.path.exists(filename) == False:  # 判断图片是否存在
                # auto_down(img['img'],filename)
                getDown(img['img'], filename)
            else:
                print('下载图片:' + img['img'] + '已经存在')
            print('结束下载图片:' + filename)
    getIndex(host, page)
Example #8
0
def lrdownload(data:dict,r:Session,ip:dict,se:dict,xml,xmlc:list) :
    """下载直播回放弹幕
    -1 文件夹创建失败
    -2 API解析失败
    -3 打开文件失败"""
    log = False
    logg = None
    if 'logg' in ip:
        log = True
        logg = ip['logg']
    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 os.path.exists(o) :
            mkdir(o)
    except :
        if log:
            logg.write(format_exc(), currentframe(), "LIVE RECORD BARRAGE MKDIR FAILED")
        print(lan['ERROR3'].replace('<dirname>',o))#创建文件夹<dirname>失败。
        return -1
    fin=True
    if getset(se,'in')==False :
        fin=False
    if 'in' in ip:
        fin=ip['in']
    if fin:
        filen='%s%s.xml'%(o,file.filtern('%s(%s,%s)'%(data['title'],data['rid'],data['roomid'])))
    else :
        filen=f"{o}{file.filtern(data['title'])}.xml"
    if log:
        logg.write(f"ns = {ns}\no = '{o}'\nfin = {fin}\nfilen = {filen}\n", currentframe(), "LIVE RECORD BARRAGE PARA")
    if os.path.exists(filen) :
        fg=False
        bs=True
        if not ns:
            fg=True
            bs=False
        if 'y' in se:
            fg = se['y']
            bs = False
        if 'y' in ip :
            fg = ip['y']
            bs = False
        while bs:
            inp=input(f"{lan['INPUT1'].replace('<filename>',filen)}(y/n)?")#文件"<filename>"已存在,是否覆盖?
            if len(inp)>0 :
                if inp[0].lower()=='y' :
                    fg=True
                    bs=False
                elif inp[0].lower()=='n' :
                    bs=False
        if fg:
            os.remove(filen)
        else :
            return 0
    dm=[]
    ot={'chatserver':'api.live.bilibili.com','chatid':data['rid'],'mission':0,'maxlimit':8000,'state':0,'real_name':0,'source':'k-v'}
    ot['list']=[]
    if 'dm' in data and data['dm'] is not None:
        for i in data['dm']['index_info']:
            uri = f"https://api.live.bilibili.com/xlive/web-room/v1/dM/getDMMsgByPlayBackID?rid={data['rid']}&index={i['index']}"
            if log:
                logg.write(f"GET {uri}", currentframe(), "GET LIVE RECORD BARRAGE")
            re = r.get(uri)
            if log:
                logg.write(f"status = {re.status_code}\n{re.text}", currentframe(), "GET LIVE RECORD BARRAGE RESULT")
            re=re.json()
            if re['code'] != 0:
                print(f"{re['code']} {re['message']}")
                return -2
            if re['data']['dm']['dm_info'] is not None:
                for j in re['data']['dm']['dm_info']:
                    dm.append(j)
    else:
        ind = 0
        while True:
            uri = f"https://api.live.bilibili.com/xlive/web-room/v1/dM/getDMMsgByPlayBackID?rid={data['rid']}&index={ind}"
            if log:
                logg.write(f"GET {uri}", currentframe(), "GET LIVE RECORD BARRAGE2")
            re = r.get(uri)
            if log:
                logg.write(f"status = {re.status_code}\n{re.text}", currentframe(), "GET LIVE RECORD BARRAGE2 RESULT")
            re = re.json()
            if re['code'] == 10002:
                break
            elif re['code'] != 0:
                print(f"{re['code']} {re['message']}")
                return -2
            if re['data']['dm']['dm_info'] is not None:
                for j in re['data']['dm']['dm_info']:
                    dm.append(j)
            ind = ind + 1
    if len(dm) == 0:
        print(lan['NOLIVEDM'])  # 该直播回放没有任何弹幕。
        return 0
    if ns:
        print(lan['OUTPUT19'].replace('<number>',str(len(dm))))#解析完毕,共获得<number>条弹幕。\n正在将JSON转换为XML……
    for i in dm :
        t={}
        t['ti']='%.5f'%(i['ts']/1000)
        t['mod']=i['dm_mode']
        t['fs']=i['dm_fontsize']
        t['fc']=i['dm_color']
        t['ut']=round(i['check_info']['ts']/1000)
        t['dp']=i['dm_type']
        t['si']=i['user_hash']
        t['ri']=0
        t['t']=i['text']
        ot['list'].append(t)
    try :
        f=open(filen,mode='w',encoding='utf8')
        f.write('<?xml version="1.0" encoding="UTF-8"?>')
        f.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>' % (ot['chatserver'],ot['chatid'],ot['mission'],ot['maxlimit'],ot['state'],ot['real_name'],ot['source']))
    except:
        if log:
            logg.write(format_exc(), currentframe(), "LIVE RECORD BARRAGE ERROR 1")
        print(lan['ERROR5'].replace('<filename>',filen))#打开文件"<filename>"失败
        return -3
    if xml==1 :
        l=0 #过滤数量
        z=len(dm) #总数量
        for i in ot['list'] :
            read=Filter(i,xmlc)
            if read :
                l=l+1
            else :
                try :
                    f.write(objtoxml(i))
                except :
                    if log:
                        logg.write(format_exc(), currentframe(), "LIVE RECORD BARRAGE ERROR 2")
                    print(lan['ERROR6'].replace('<filename>',filen))#保存文件失败
                    return -3
        if ns:
            print(lan['OUTPUT3'].replace('<number>',str(l)))#共计过滤%s条
            print(lan['OUTPUT4'].replace('<number>',str(z-l)))#实际输出<number>条
    else :
        for i in ot['list'] :
            f.write(objtoxml(i))
    try :
        f.write('</i>')
        f.close()
    except :
        if log:
            logg.write(format_exc(), currentframe(), "LIVE RECORD BARRAGE ERROR 3")
        print(lan['ERROR6'].replace('<filename>',filen))#保存文件失败
        return -3
    print(lan['OUTPUT20'])#下载完毕!
    return 0
Example #9
0
def DanmuGetn(c, data, r, t, xml, xmlc, ip: dict, se: dict):
    "处理现在的弹幕"
    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 -3
    try:
        if not exists('Temp'):
            mkdir('Temp')
    except:
        print(lan['ERROR3'].replace('<dirname>', "Temp"))  #创建Temp文件夹失败
        return -3
    fin = True
    if getset(se, 'in') == False:
        fin = False
    if 'in' in ip:
        fin = ip['in']
    if t == 'av':
        d = biliDanmuDown.downloadn(data['page'][c - 1]['cid'], r)
        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 d == -1:
            print(lan['ERROR1'])  #网络错误
            exit()
        if exists(filen):
            fg = False
            bs = True
            if not ns:
                bs = False
                fg = True
            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 -1
            else:
                return -1
        if xml == 2:
            try:
                f = open(filen, mode='w', encoding='utf8')
                f.write(d)
                f.close()
            except:
                print(lan['ERROR2'].replace('<filename>',
                                            filen))  #写入到文件"<filename>"时失败!
                return -2
            return 0
        else:
            filen2 = "Temp/n_" + str(data['page'][c - 1]['cid']) + ".xml"
            if exists(filen2):
                remove(filen2)
            try:
                f = open(filen2, mode='w', encoding='utf8')
                f.write(d)
                f.close()
            except:
                print(lan['ERROR2'].replace('<filename>',
                                            filen2))  #写入到文件"<filename>"时失败!
                return -2
            d = biliDanmuXmlParser.loadXML(filen2)
            remove(filen2)
            try:
                f = open(filen, mode='w', encoding='utf8')
            except:
                print(lan['ERROR5'].replace('<filename>',
                                            filen))  #打开文件"<filename>"失败
                return -2
            try:
                f.write('<?xml version="1.0" encoding="UTF-8"?>')
                f.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>'
                    % (d['chatserver'], d['chatid'], d['mission'],
                       d['maxlimit'], d['state'], d['real_name'], d['source']))
            except:
                print(lan['ERROR6'].replace('<filename>', filen))  #保存文件失败
                return -2
            if ns:
                print(f"{lan['OUTPUT1']}{len(d['list'])}")  #总计:
                print(lan['OUTPUT2'])  #正在过滤……
            l = 0
            for i in d['list']:
                read = biliDanmuXmlFilter.Filter(i, xmlc)
                if read:
                    l = l + 1
                else:
                    try:
                        f.write(biliDanmuCreate.objtoxml(i))
                    except:
                        print(lan['ERROR6'].replace('<filename>',
                                                    filen))  #保存文件失败
                        return -2
            if ns:
                print(lan['OUTPUT3'].replace('<number>', str(l)))  #共计过滤%s条
                print(lan['OUTPUT4'].replace(
                    '<number>', str(len(d['list']) - l)))  #实际输出<number>条
            try:
                f.write('</i>')
                f.close()
            except:
                print(lan['ERROR6'].replace('<filename>', filen))  #保存文件失败
                return -2
            return 0
    elif t == 'ss':
        d = biliDanmuDown.downloadn(c['cid'], r)
        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 -3
        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 d == -1:
            print(lan['ERROR1'])  #网络错误!
            exit()
        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 -1
            else:
                return -1
        if xml == 2:
            try:
                f = open(filen, mode='w', encoding='utf8')
                f.write(d)
                f.close()
            except:
                print(lan['ERROR2'].replace('<filename>',
                                            filen))  #写入到文件"<filename>"时失败!
                return -2
            return 0
        else:
            filen2 = "Temp/n_" + str(c['cid']) + ".xml"
            if exists(filen2):
                remove(filen2)
            try:
                f = open(filen2, mode='w', encoding='utf8')
                f.write(d)
                f.close()
            except:
                print(lan['ERROR2'].replace('<filename>',
                                            filen2))  #写入到文件"<filename>"时失败!
                return -2
            d = biliDanmuXmlParser.loadXML(filen2)
            remove(filen2)
            try:
                f = open(filen, mode='w', encoding='utf8')
            except:
                print(lan['ERROR5'].replace('<filename>',
                                            filen))  #打开文件"<filename>"失败
                return -2
            try:
                f.write('<?xml version="1.0" encoding="UTF-8"?>')
                f.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>'
                    % (d['chatserver'], d['chatid'], d['mission'],
                       d['maxlimit'], d['state'], d['real_name'], d['source']))
            except:
                print(lan['ERROR6'].replace('<filename>', filen))  #保存文件失败
                return -2
            if ns:
                print(f"{lan['OUTPUT1']}{len(d['list'])}")  #总计:
                print(lan['OUTPUT2'])  #正在过滤……
            l = 0
            for i in d['list']:
                read = biliDanmuXmlFilter.Filter(i, xmlc)
                if read:
                    l = l + 1
                else:
                    try:
                        f.write(biliDanmuCreate.objtoxml(i))
                    except:
                        print(lan['ERROR6'].replace('<filename>',
                                                    filen))  #保存文件失败
                        return -2
            if ns:
                print(lan['OUTPUT3'].replace('<number>', str(l)))  #共计过滤%s条
                print(lan['OUTPUT4'].replace(
                    '<number>', str(len(d['list']) - l)))  #实际输出<number>条
            try:
                f.write('</i>')
                f.close()
            except:
                print(lan['ERROR6'].replace('<filename>', filen))  #保存文件失败
                return -2
            return 0
Example #10
0
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
Example #11
0
def downloadNicoM3U(r: Session, url: str, index: int, fn: str, se: dict, ip: dict):
    '''下载M3U媒体播放列表
    - url m3u地址
    - index 从几个segment开始
    - fn 文件名
    - se 设置字典
    - ip 名里字典
    -1 请求错误
    -2 写入文件错误'''
    logg: Logger = ip['logg'] if 'logg' in ip else None
    oll: autoopenfilelist = ip['oll'] if 'oll' in ip else None
    speed = 0
    if logg:
        logg.write(f"GET {url}", currentframe(), "M3U Downloader Get M3U File")
    re = r.get(url)
    if logg:
        logg.write(f"status = {re.status_code}\n{re.text}", currentframe(), "M3U Downloader M3U Content")
    if re.status_code >= 400:
        return -1, index
    li = parseSimpleMasterM3U(re.text, url)
    if logg:
        logg.write(f"li = {li}", currentframe(), "M3U Downloader M3U List")
    li = li[index:]
    totalSize = 0
    le = len(li)
    dirName = splitext(fn)[0]
    if not exists(f"{dirName}/"):
        mkdir(dirName)
    startInd = index
    startTime = time()
    lastTime = startTime
    for link in li:
        ok = False
        tfn = f"{dirName}/{index+1}.ts"
        if exists(tfn):
            if logg:
                logg.write(f"Segement {index} already exist, skip. link: {link}", currentframe(), "M3U Downloader Skip")
            if startInd == index:
                startInd += 1
            index += 1
            continue
        for retry in range(4):
            if retry:
                print(retry)
            try:
                if logg:
                    logg.write(f"GET Segement {index}: {link}", currentframe(), "M3U Downloader Download Segement")
                re = r.get(link)
                if logg:
                    logg.write(f"status = {re.status_code}", currentframe(), "M3U Downloader Download Segement")
                if re.status_code >= 400:
                    return -1, index
                try:
                    with open(tfn, 'wb') as f:
                        s = f.write(re.content)
                        totalSize += s
                    if logg:
                        logg.write(f"Write {s} bytes to file \"{tfn}\".", currentframe(), "M3U Downloader Write File")
                    oll.add(tfn)
                    ok = True
                    break
                except:
                    if logg:
                        logg.write(format_exc(), currentframe(), "M3U Downloader Write File Error")
                    return -2, index
            except:
                if logg:
                    logg.write(format_exc(), currentframe(), "M3U Downloader Download Error")
        if not ok:
            return -1, index
        now = time()
        percent = round((index + 1) / le * 100, 2)
        speedn = totalSize / (now - startTime)
        print(f"\r{percent}%({index+1}/{le})\t{fsize(totalSize)}({totalSize}B)\t{round(now-startTime, 2)}s\t{fsize(speedn)}/s({round(speedn)}B/s)", end="")
        if speed > 0 and index > startInd + 6 and now < lastTime + (6 / speed):
            sleepTime = lastTime + (6 / speed) - time()
            if sleepTime > 0.1:
                sleep(sleepTime)
            now = time()
        lastTime = now
        index += 1
    return 0, index
Example #12
0
def lrdownload(data:dict,r:Session,ip:dict,se:dict,xml,xmlc:list) :
    """下载直播回放弹幕
    -1 文件夹创建失败
    -2 API解析失败
    -3 打开文件失败"""
    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 os.path.exists(o) :
            mkdir(o)
    except :
        print(lan['ERROR3'].replace('<dirname>',o))#创建文件夹<dirname>失败。
        return -1
    fin=True
    if getset(se,'in')==False :
        fin=False
    if 'in' in ip:
        fin=ip['in']
    if fin:
        filen='%s%s.xml'%(o,file.filtern('%s(%s,%s)'%(data['title'],data['rid'],data['roomid'])))
    else :
        filen=f"{o}{file.filtern(data['title'])}.xml"
    if os.path.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 len(inp)>0 :
                if inp[0].lower()=='y' :
                    fg=True
                    bs=False
                elif inp[0].lower()=='n' :
                    bs=False
        if fg:
            os.remove(filen)
        else :
            return 0
    dm=[]
    ot={'chatserver':'api.live.bilibili.com','chatid':data['rid'],'mission':0,'maxlimit':8000,'state':0,'real_name':0,'source':'k-v'}
    ot['list']=[]
    for i in data['dm']['index_info']:
        re=r.get('https://api.live.bilibili.com/xlive/web-room/v1/dM/getDMMsgByPlayBackID?rid=%s&index=%s'%(data['rid'],i['index']))
        re=re.json()
        if re['code']!=0 :
            print('%s %s'%(re['code'],re['message']))
            return -2
        for j in re['data']['dm']['dm_info'] :
            dm.append(j)
    if ns:
        print(lan['OUTPUT19'].replace('<number>',str(len(dm))))#解析完毕,共获得<number>条弹幕。\n正在将JSON转换为XML……
    for i in dm :
        t={}
        t['ti']='%.5f'%(i['ts']/1000)
        t['mod']=i['dm_mode']
        t['fs']=i['dm_fontsize']
        t['fc']=i['dm_color']
        t['ut']=round(i['check_info']['ts']/1000)
        t['dp']=i['dm_type']
        t['si']=i['user_hash']
        t['ri']=0
        t['t']=i['text']
        ot['list'].append(t)
    try :
        f=open(filen,mode='w',encoding='utf8')
        f.write('<?xml version="1.0" encoding="UTF-8"?>')
        f.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>' % (ot['chatserver'],ot['chatid'],ot['mission'],ot['maxlimit'],ot['state'],ot['real_name'],ot['source']))
    except:
        print(lan['ERROR5'].replace('<filename>',filen))#打开文件"<filename>"失败
        return -3
    if xml==1 :
        l=0 #过滤数量
        z=len(dm) #总数量
        for i in ot['list'] :
            read=Filter(i,xmlc)
            if read :
                l=l+1
            else :
                try :
                    f.write(objtoxml(i))
                except :
                    print(lan['ERROR6'].replace('<filename>',filen))#保存文件失败
                    return -3
        if ns:
            print(lan['OUTPUT3'].replace('<number>',str(l)))#共计过滤%s条
            print(lan['OUTPUT4'].replace('<number>',str(z-l)))#实际输出<number>条
    else :
        for i in ot['list'] :
            f.write(objtoxml(i))
    try :
        f.write('</i>')
        f.close()
    except :
        print(lan['ERROR6'].replace('<filename>',filen))#保存文件失败
        return -3
    print(lan['OUTPUT20'])#下载完毕!
    return 0