ying-ck / fanqienovel-downloader

下载番茄小说
GNU Affero General Public License v3.0
266 stars 23 forks source link

新功能 #9

Closed qxqycb closed 1 month ago

qxqycb commented 1 month ago

作者你好! 我在昨天给您的项目fanqienovel-downloader-v1.0.3添加了一个新功能:1. 正常模式 - 下载整本小说到一个文件;2. 分章保存模式 - 每个章节保存为单独的文件, 并且速度也加快了, 但是原来的保存一个json文件来更新的功能没有了 望准许 屏幕截图 2024-08-14 184244 源码.txt

qxqycb commented 1 month ago

新版本 修复了原来下载章节排序的问题 源码2.txt

ying-ck commented 1 month ago

唔,好像也不是不行。 其实速度慢是因为防止封ip设置的随机延迟。我或许可以合并一下新功能?

qxqycb commented 1 month ago

OK 我可以试一下在你v1.05的基础上修改一下

ying-ck commented 1 month ago

其实保存为txt的本质就是将json格式的文件{章节名:章节内容,…}转换为纯文本,只要换方式处理就可以实现分章保存。

qxqycb commented 1 month ago

用正则表达式,之前做过 pattern = r'第[0-9一二三四五六七八九十百千万零一二三四五六七八九十]+\s*章|番外'

def split_novel(file_path, pattern, target_encoding='utf-8'): try:

使用chardet检测原始编码

    with open(file_path, 'rb') as f:
        raw_content = f.read()
    detected_encoding = chardet.detect(raw_content)['encoding'] or target_encoding

    # 读取文件内容
    with open(file_path, 'r', encoding=detected_encoding) as file:
        content = file.read()

    # 使用正则表达式分割内容
    chapters = re.split(pattern, content)

    # 过滤掉空的章节标题和内容
    chapters = [chap.strip() for chap in chapters if chap.strip()]

    # 保存章节到新文件
    for chapter_number, chapter in enumerate(chapters, start=1):
        if chapter:  # 确保章节内容不为空
            chapter_filename = f"{os.path.splitext(file_path)[0]}_第_{chapter_number}.txt"
            with open(chapter_filename, 'w', encoding=target_encoding) as new_file:
                new_file.write(chapter)
            print(f"章节 {chapter_number} 已保存为: {chapter_filename}")

except Exception as e:
    print(f"处理文件时发生错误: {e}")
qxqycb commented 1 month ago

唔,好像也不是不行。 其实速度慢是因为防止封ip设置的随机延迟。我或许可以合并一下新功能?

关于防止封ip,我试了几十次,一次性下了一千多章,也没有被封,可能不用考虑吧

ying-ck commented 1 month ago

我的意思其实是使用json模块读取 小说名.json 后,就有了一个完整内容的字典,可以直接调用不用再分章节。

qxqycb commented 1 month ago

理解了,也可以

ying-ck commented 1 month ago

好了,到点睡觉,明日细谈

qxqycb commented 1 month ago

晚安,祝你做个好梦! 提个意见:把record.json和config.json用一个单独的文件夹装起来;把下载的小说用另一个文件夹装。 以上操作可以防止一些用户不懂这些是什么然后删了

qxqycb commented 1 month ago

新版,基于v1.05修改

修改内容

1.把record.json和config.json用一个单独的文件夹(data)储存; 2.把下载的小说用另一个文件夹(“小说名+.txt”)储存; 3.把用于检查更新的(小说名+.json)的json文件储存"data"文件夹中新建一个"小说名"文件夹中; 4.把open方式改为with open,防止打开和保存文件时出错 源码.txt

ying-ck commented 1 month ago

Screenshot_20240815_072708_com.yujian.ResideMenuDemo.jpg

早上根本打不开github,现在终于可以看了。你可以发一个拉取请求合并代码。

ying-ck commented 1 month ago

我把你的代码稍微改了改,恢复了断点重下的功能并减少了磁盘占用。删除了sort来保持章节顺序等。 但是,使用pyinstaller打包后居然无法创建文件夹! 或许只能用batch命令行试一下了。

ying-ck commented 1 month ago

还在使用nuitka尝试中

qxqycb commented 1 month ago

你把你改的代码发给我,我试一试

ying-ck commented 1 month ago

fanqienovel-downloader-v1.0.6.txt

ying-ck commented 1 month ago

ok,解决了

ying-ck commented 1 month ago

只要使用相对路径就行了

qxqycb commented 1 month ago

可以添加一个退出的代码,例如: print('\n输入书的id直接下载\n输入下面的数字进入其他功能:') print('1. 更新小说列表') print('2. 设置') print('3.退出') elif inp == '3': print('退出程序')

退出程序

    break
ying-ck commented 1 month ago

qxqycb commented 1 month ago

防止用户下载过程中强制退出

ying-ck commented 1 month ago

其实没关系,毕竟每5章存一次,打开就可以继续下

ying-ck commented 1 month ago

那么我发布了啊

qxqycb commented 1 month ago

等一下

qxqycb commented 1 month ago

算了,发吧

qxqycb commented 1 month ago

Screenshot_20240815_072708_com.yujian.ResideMenuDemo.jpg

早上根本打不开github,现在终于可以看了。你可以发一个拉取请求合并代码。

找到原因了,一模一样 原因

ying-ck commented 1 month ago

天呐,我还以为是我的问题。