Esempio n. 1
0
def classify_files(jav, num_fail, settings, dict_data, list_classify_basis,
                   root_classify):
    # 如果需要归类,且不是针对文件夹来归类
    if settings.bool_classify and not settings.bool_classify_folder:
        # 移动的目标文件夹路径
        root_dest = root_classify + sep
        for j in list_classify_basis:
            root_dest += dict_data[j].rstrip(
            )  # 【临时变量】归类的目标文件夹路径    C:\Users\JuneRain\Desktop\测试文件夹\葵司\
        # 还不存在该文件夹,新建
        if not exists(root_dest):
            makedirs(root_dest)
        path_new = root_dest + sep + jav.name  # 【临时变量】新的影片路径
        # 目标文件夹没有相同的影片,防止用户已经有一个“avop-127.mp4”,现在又来一个
        if not exists(path_new):
            rename(jav.path, path_new)
            print('    >归类视频文件完成')
            # 移动字幕
            if jav.subtitle:
                path_subtitle_new = root_dest + sep + jav.subtitle  # 【临时变量】新的字幕路径
                if jav.path_subtitle != path_subtitle_new:
                    rename(jav.path_subtitle, path_subtitle_new)
                    # 不再更新 jav.path_subtitle,下面不会再操作 字幕文件
                print('    >归类字幕文件完成')
            jav.root = root_dest  # 【更新】jav.root
        else:
            num_fail += 1
            record_fail('    >第' + str(num_fail) +
                        '个失败!归类失败,重复的影片,归类的目标文件夹已经存在相同的影片:' + path_new + '\n')
            raise FileExistsError  # 【终止对该jav的整理】
    return jav, num_fail
Esempio n. 2
0
def classify_folder(jav, num_fail, settings, dict_data, list_classify_basis,
                    root_classify, root, bool_separate_folder,
                    num_all_episodes):
    if settings.bool_classify and settings.bool_classify_folder and jav.episode == num_all_episodes:  # 需要移动文件夹,且,是该影片的最后一集
        # 用户选择的文件夹是一部影片的独立文件夹,为了避免在这个文件夹里又生成新的归类文件夹
        if bool_separate_folder and root_classify.startswith(root):
            print('    >无法归类,请选择该文件夹的上级文件夹作它的归类根目录')
            return num_fail
        # 归类放置的目标文件夹
        root_dest = root_classify + sep
        # 移动的目标文件夹
        for j in list_classify_basis:
            root_dest += dict_data[j].rstrip(
                ' .'
            )  # 【临时变量】 文件夹移动的目标上级文件夹  C:\Users\JuneRain\Desktop\测试文件夹\1\葵司\
        root_new = root_dest + sep + jav.folder  # 【临时变量】 文件夹移动的目标路径   C:\Users\JuneRain\Desktop\测试文件夹\1\葵司\【葵司】AVOP-127\
        # print(root_new)
        # 还不存在归类的目标文件夹
        if not exists(root_new):
            makedirs(root_new)
            # 把现在文件夹里的东西都搬过去
            jav_files = listdir(jav.root)
            for i in jav_files:
                rename(jav.root + sep + i, root_new + sep + i)
            # 删除“旧房子”,这是javsdt唯一的删除操作,而且os.rmdir只能删除空文件夹
            rmdir(jav.root)
            print('    >归类文件夹完成')
        # 用户已经有了这个文件夹,可能以前处理过同车牌的视频
        else:
            num_fail += 1
            record_fail('    >第' + str(num_fail) +
                        '个失败!归类失败,归类的目标位置已存在相同文件夹:' + root_new + '\n')
            raise FileExistsError
    return num_fail
Esempio n. 3
0
def rename_folder(jav, num_fail, settings, dict_data, list_name_folder,
                  bool_separate_folder, num_all_episodes):
    if settings.bool_rename_folder:
        # 构造 新文件夹名folder_new
        folder_new = ''
        for j in list_name_folder:
            folder_new += (dict_data[j])
        folder_new = folder_new.rstrip(' .')  # 【临时变量】新的所在文件夹。去除末尾空格和“.”
        # 是独立文件夹,才会重命名文件夹
        if bool_separate_folder:
            # 当前视频是该车牌的最后一集,他的兄弟姐妹已经处理完成,才会重命名它们的“家”。
            if jav.episode == num_all_episodes:
                list_root_now = jav.root.split(sep)
                del list_root_now[-1]
                root_new = sep.join(
                    list_root_now) + sep + folder_new  # 【临时变量】新的影片所在文件夹路径。
                # 想要重命名的目标影片文件夹不存在
                if not exists(root_new):
                    rename(jav.root, root_new)
                    jav.root = root_new  # 【更新】jav.root
                # 目标影片文件夹存在,但就是现在的文件夹,即新旧相同
                elif jav.root == root_new:
                    pass
                # 真的有一个同名的文件夹了
                else:
                    num_fail += 1
                    record_fail('    >第' + str(num_fail) +
                                '个失败!重命名文件夹失败,已存在相同文件夹:' + root_new + '\n')
                    raise FileExistsError  # 【终止对该jav的整理】
                print('    >重命名文件夹完成')
        # 不是独立的文件夹,建立独立的文件夹
        else:
            path_separate_folder = jav.root + sep + folder_new  # 【临时变量】需要创建的的影片所在文件夹。
            # 确认没有同名文件夹
            if not exists(path_separate_folder):
                makedirs(path_separate_folder)
            path_new = path_separate_folder + sep + jav.name  # 【临时变量】新的影片路径
            # 如果这个文件夹是现成的,在它内部确认有没有“abc-123.mp4”。
            if not exists(path_new):
                rename(jav.path, path_new)
                # 移动字幕
                if jav.subtitle:
                    path_subtitle_new = path_separate_folder + sep + jav.subtitle  # 【临时变量】新的字幕路径
                    rename(jav.path_subtitle, path_subtitle_new)
                    # 下面不会操作 字幕文件 了,jav.path_subtitle不再更新
                    print('    >移动字幕到独立文件夹')
                jav.root = path_separate_folder  # 【更新】jav.root
            # 里面已有“avop-127.mp4”,这不是它的家。
            else:
                num_fail += 1
                record_fail('    >第' + str(num_fail) +
                            '个失败!创建独立文件夹失败,已存在相同的视频文件:' + path_new + '\n')
                raise FileExistsError  # 【终止对该jav的整理】
    return jav, num_fail
Esempio n. 4
0
def rename_mp4(jav, num_fail, settings, dict_data, list_name_video,
               path_relative, str_cd):
    if settings.bool_rename_video:
        # 构造新文件名,不带文件类型后缀
        name_without_ext = ''
        for j in list_name_video:
            name_without_ext += dict_data[j]
        name_without_ext = name_without_ext.rstrip(
        ) + str_cd  # 去除末尾空格,否则windows会自动删除空格,导致程序仍以为带空格
        path_new = jav.root + sep + name_without_ext + jav.type  # 【临时变量】path_new 视频文件的新路径
        # 一般情况,不存在同名视频文件
        if not exists(path_new):
            rename(jav.path, path_new)
            record_video_old(jav.path, path_new)
        # 已存在目标文件,但就是现在的文件
        elif jav.path.upper() == path_new.upper():
            try:
                rename(jav.path, path_new)
            # windows本地磁盘,“abc-123.mp4”重命名为“abc-123.mp4”或“ABC-123.mp4”没问题,但有用户反映,挂载的磁盘会报错“file exists error”
            except:
                num_fail += 1
                record_fail('    >第' + str(num_fail) + '个失败!请自行重命名大小写:' +
                            path_relative + '\n')
        # 存在目标文件,不是现在的文件。
        else:
            num_fail += 1
            record_fail('    >第' + str(num_fail) +
                        '个失败!重命名影片失败,重复的影片,已经有相同文件名的视频了:' + path_new + '\n')
            raise FileExistsError  # 【终止对该jav的整理】
        dict_data['视频'] = name_without_ext  # 【更新】 dict_data['视频']
        jav.name = name_without_ext + jav.type  # 【更新】jav.name,重命名操作可能不成功,但之后的操作仍然围绕成功的jav.name来命名
        print('    >修改文件名' + str_cd + '完成')
        # 重命名字幕
        if jav.subtitle and settings.bool_rename_subtitle:
            subtitle_new = name_without_ext + jav.subtitle_type  # 【临时变量】subtitle_new
            path_subtitle_new = jav.root + sep + subtitle_new  # 【临时变量】path_subtitle_new
            if jav.path_subtitle != path_subtitle_new:
                rename(jav.path_subtitle, path_subtitle_new)
                jav.subtitle = subtitle_new  # 【更新】 jav.subtitle 字幕完整文件名
            print('    >修改字幕名完成')
    return dict_data, jav, num_fail
Esempio n. 5
0
                '是否流出'] = settings.custom_divulge_expression if bool_divulge else ''

            # 影片的相对于所选文件夹的路径,用于报错
            path_relative = sep + jav.path.replace(root_choose, '')

            # 获取nfo信息的javdb网页
            try:
                # 用户指定了网址,则直接得到jav所在网址
                if '图书馆' in jav.name:
                    url_appointg = re.search(r'仓库(.+?)\.', jav.name)
                    if str(url_appointg) != 'None':
                        url_on_web = url_db + 'v/' + url_appointg.group(1)
                    else:
                        num_fail += 1
                        record_fail('    >第' + str(num_fail) +
                                    '个失败!你指定的javdb网址有错误:' + path_relative +
                                    '\n')
                        continue  # 【退出对该jav的整理】
                # 用户没有指定网址,则去搜索
                else:
                    url_search_web = url_db + 'search?q=' + jav.car + '&f=all'
                    print('    >搜索车牌:', url_search_web)
                    # 得到javdb搜索网页html
                    html_web, cookies = get_search_db_html(
                        url_search_web, cookies, proxy_db)
                    # 尝试找movie-box   0链接 1车牌
                    list_search_results = re.findall(
                        r'href="/v/(.+?)" class="box" title=".+?"[\s\S]*?uid">(.+?)</div>',
                        html_web, re.DOTALL)  # 匹配处理“标题”
                    # print(list_search_results)
                    if list_search_results:  # 搜索结果页面只有一个box
Esempio n. 6
0
            # 程序接下来是在javlibrary搜索信息,但可以设置去javbus下载图片。如果javlibrary上的搜索结果不唯一,那么再去javbus下载图片可能导致张冠李戴。
            bool_unique = True  # javlibrary有唯一的搜素结果。如果 bool_unique 变化为 false,就不会去javbus下载图片。

            # 获取nfo信息的javlibrary网页
            try:
                # 用户指定了网址,则直接得到jav所在网址
                if '图书馆' in jav.name:
                    url_appointg = re.search(r'图书馆(jav.+?)\.', jav.name)
                    if str(url_appointg) != 'None':
                        url_search_web = url_library + '?v=' + url_appointg.group(
                            1)
                    else:
                        num_fail += 1
                        record_fail('    >第' + str(num_fail) +
                                    '个失败!你指定的library网址有错误:' + path_relative +
                                    '\n')
                        continue  # 【退出对该jav的整理】
                # 用户没有指定网址,则去搜索
                else:
                    url_search_web = url_library + 'vl_searchbyid.php?keyword=' + jav.car
                print('    >搜索车牌:', url_search_web)
                # 得到javlibrary搜索网页html
                html_web = get_library_html(url_search_web, proxy_library)
                # 从前:搜索结果,大部分情况就是这个影片的网页(搜索结果唯一,javlibrary会自动跳转到该jav唯一的网页),另一种情况是多个搜索结果的网页
                # 1.1.2版本请无视这一行:访问javlibrary需要cloudflare的通行证,自动跳转时,cookie会发生变化,导致用现有cookie无权访问跳转后的页面。所以现在程序不希望requests帮助自动跳转,而是只得到跳转前网页上的线索,再自行访问这个跳转目标网页。
                # 尝试找标题,第一种情况:找得到,就是这个影片的网页。
                titleg = re.search(r'<title>([A-Z].+?) - JAVLibrary</title>',
                                   html_web)  # 匹配处理“标题”
                # 搜索结果就是AV的页面。事实上,现在只有用户指定了网址,这一步判定才能成功。现在要么是多个搜索结果的网页,要么是跳转前的几句html语句,根本不可能“搜索一下就是AV的页面”。
                if str(titleg) != 'None':
Esempio n. 7
0
         url_on_web = url_321 + 'video/' + url_appointg.group(1)
         print('    >获取信息:', url_on_web)
         html_web = get_321_html(url_on_web, proxy_321)
         # 尝试找标题,jav321上的标题不包含车牌,title_only表示单纯的标题
         titleg = re.search(r'<h3>(.+?) <small>',
                            html_web)  # 匹配处理“标题”
         # 搜索结果就是AV的页面
         if str(titleg) != 'None':
             title_only = titleg.group(1)
             print(title_only)
         # 找不到标题,jav321找不到影片
         else:
             # print(html_web)
             num_fail += 1
             record_fail('    >第' + str(num_fail) +
                         '个失败!你指定的jav321网址找不到影片:' +
                         path_relative + '\n')
             continue  # 【退出对该jav的整理】
     else:
         num_fail += 1
         record_fail('    >第' + str(num_fail) +
                     '个失败!你指定的jav321网址有错误:' + path_relative +
                     '\n')
         continue  # 【退出对该jav的整理】
 # 用户没有指定网址,则去搜索
 else:
     # 得到jav321搜索网页html
     print('    >搜索车牌:', url_search_321)
     html_web = post_321_html(url_search_321, {'sn': jav.car},
                              proxy_321)
     # print(html_web)