吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5167|回复: 64
收起左侧

[原创工具] 种子工具箱V1.0 快速查看种子内容以及转磁链

  [复制链接]
charlesz97 发表于 2024-8-24 22:07
本帖最后由 charlesz97 于 2024-11-25 01:05 编辑



来论坛比较久了,一直没啥贡献,这次发布一个原创工具。软件叫种子工具箱,可能名字有点夸大成分,因为功能本身很简单,这纯粹是因为创建项目的时候随手取了Torrent Box这个项目名。工具的作用,查看种子内的文件清单,快速转磁链,以及BT下载状态校验。注意,如果你习惯常开迅雷、比特彗星等Bt下载工具,可能不需要这个工具,因为它的功能这些成熟的软件本身都有,适合不想打开这类大型软件(此工具较小启动很快),或者像我一样使用一些网盘离线功能,不想迅雷创建下载任务再去右键得到磁力链接,单纯需要一个种子转磁链工具的用户。
说说软件的开发由来,一次我使用网盘的离线功能,新建Bt任务需要打开本地的种子文件,过程繁琐,而磁力链接直接粘贴就可以创建了,而且种子文件如果包含敏感字眼,直接提示违规,而磁力反而能创建成功...呃,所以种子转磁力链接成了我的重要需求。楼主本身是写python为主,网上找到了这篇博客资料(博客),感谢原博的分享。我在作者的工具类上,根据自己的测试做了修改,根据发现的一些不兼容的种子,使用两个bencode库来完善解析,最终我本地的种子测下来都通过,这也是此工具的核心。


接下来介绍工具的用法。软件有两个版本,一个无控制台版本,拖入种子自动解析,另一个版本有控制台窗口,需要手动点解析,版本差异留到最后解释。以下都以无控制台版本为例,软件主窗口,如下:

20240824170335.png
将.torrent后缀的种子文件拖入软件窗口,会自动解析,点浏览是打开选择对话框(默认打开下载文件夹,后续打开你上次使用的文件夹),如果你对种子文件使用文件管理器右键复制为路径,窗口会自动读取剪切板填到路径文本框(仅在路径栏为空时才会读取剪切板,可以用清空按钮),拖入是开一个小窗口用于拖入文件(和主窗口直接拖入功能是重叠的)。黄色字体显示的是种子的标题,即Bt下载工具创建任务时显示在最上方的文本。种子内容,以树形列表来显示。文件夹可以展开(默认展开)。
20240825141431.png


树形结构内的一些操作:(1)最下边空白区右键,显示“展开/折叠全部”,用于折叠或打开全部节点(种子内容可能会铺满,以至于没有空白区,可以最大化后,在列表最后一条的下边几个像素唤出此菜单);(2)文件上右键,显示“复制”,或者直接双击也是复制,文件夹的话,一样,右键多出“展开/折叠”,当然双击展开收缩是默认行为,同时我写的双击复制也生效。(3)双击“Size”表头,文件(夹)大小倒叙排列,再点击则是顺序排列,之后如此交替(注意,仅一级节点有效,二级及以上是跟随父节点)(4)双击“Path”表头,打开下载状态校验窗口,这个窗口下文再说。这里这么设计,纯粹是不想加按钮破坏设计好的布局,此功能差不多是最后加的。

提示部分,蓝色的字体,会直接提示最大的文件是哪个,当你双击或右键复制某个节点,会提示复制的文本。

磁链,点复制按钮,或者按快捷键Ctrl+C,复制磁力链接到剪切板。
退出按钮,ESC快捷键,以及窗口关闭按钮,关闭软件。
补充,解析按钮的快捷键是Enter。

接下来说说下载状态校验窗口,顾名思义,用来检查缺哪个文件、以及下了多少的百分比。Bt下载工具在文件状态一栏,是可以直接看百分比,但假设我是不想打开这类Bt软件,或者我是用其他方式如IDM从网盘下载的。加上Bt下载工具都有中间文件,所以此工具的大小提示仅供参考目的,此工具的主要目的是统计缺了哪些。比如我自己的使用场景,网盘离线下载一个大量小文件的种子,离线成功了95%,我直接把这95%下载下来,剩余的用迅雷下载。那么我缺哪些文件?这就可以用此窗口来解决了。
20240825141241.png


拖入或粘贴待校验的文件夹,点校验(种子信息是主窗口解析后传入的):差异阈值等会讲。列表会显示缺失的文件、文件夹,以及大小和预期不一样的文件(预期是指种子内标记的此文件大小)。点击自动复制(用于得到出错的路径),可以多选(按住Ctrl或Shift)。下面的导出Txt,用于把有用信息保存(或者其他地方编程来读取)。导出txt的三个选项菜单文本有点啰嗦,我在设计的时候想的是避免歧义误导。
  • 第一个,指拖入的文件夹内所有子级的路径清单,包括子级的子级,格式:bink2w64.dll|file|395472|386.20 KB,第三项是字节大小。(如果是文件夹,Fonts|folder|0|0 B,大小都是0,因为我获取的文件夹都是4096,虽然可以递归计算得到真实大小,但是并无必要,主窗口树形列表有文件夹大小,是为了更人性化)(版本1.1已改进,可显示文件夹实际大小
  • 第二个,和主窗口树形列表一样的内容,格式:LocalCacheWinGame|144.58 GB|155237312440.0,最后一项是字节大小。
  • 第三个,和校验后的列表显示内容完全一样,用于记录。

关于阈值的设置,最小0,次小0.001,最大1.000,步进是0.05(指拖动滑动条),如果要以0.001来调整,可以点滑动条左侧或右侧,则会减少或增加0.0001。现在假定种子内有一个1G的文件,再假定1G=1000M,我设置阈值为0.05,1000*0.05=50,意味着上下浮动50M,即本地磁盘对应的此文件,950M-1050M之间合格,超过范围的会显示到列表里,指出大小不一致。如果你需要一个字节的差异都不能有,将阈值设为0即可。阈值设计的目的,是为了容错性和兼容性,以我自己的经历看,国外有些网盘页面指出的大小和下载下来实际大小不一致,只能用hash来校验,再比如HuggingFace模型大小和实际下载下来的大小差异。所以阈值的设计,是为了不出现一点大小的差异就报告为错误,减少误判。(实际情况下,bt下载工具会对种子内文件分块下载,然后校验sha1哈希,不会出现缺少字节的情况,所以要么置为0要么置为1



其他补充说明:
  • 工具的有控制台版本,功能和上述无控制台一样,差异是无控制台版更加自动、高效,有控制台版更保守,解析按钮需要点击,树状列表不自动展开,拖入小窗口不自动关闭,强调手动性。另外,有控制台版本会打印种子内的信息,比如编码格式、发布者等,有时候需要查看这类信息(注意:有一个坑,一般种子内文件很少,解析立马完成,如果种子内的文件几万个,比如我测试一个游戏种子,17000个文件,界面卡住近10秒,这里我做一下解释,其实就是大量文本的打印变成了高耗时(已确认是超长字符串拼接、传递造成的,版本1.1已修复此问题),程序单线程的,界面失去了响应,同样的种子无控制台版只需要2秒,遇到这类情况等解析完成就是了,一般不会出现)。
  • 程序使用python3.8.19编写,nuitka编译打包,理论上可以运行在Win7及以上64位系统,已测试Win7和Win10,Win-X86、Win-Arm64应该不支持。(程序打完包38.7M,有点大,但是启动很快。Ps:pyinstaller打完包31.2M,不过纠结这点大小无意义)
  • 程序根目录有一个settings.ini文件,可以自定义修改,分别表示:

20240824213708.png


窗口是否置顶
主窗口启动宽高
上次使用文件夹
树形列表是否自动展开
树形列表Path列默认宽度
校验窗口的默认阈值
是否自动读取剪切板种子路径
文件后缀排除
主窗口屏幕位置


  • 树形列表Path列默认宽度,有些路径特别长,修改默认Path列宽度就有必要了,需要配合【主窗口启动宽高】来设置,增加窗口宽度,增加列宽度,注意tree-col0-width的单位是字符,不是像素
  • 文件后缀排除,这个本来该做到界面上设置的,但是是最后加的我不想动界面。程序默认排除了一些格式,注意第一时间按照需要进行修改,比如txt,默认设置下不会在树形结构显示。此设置影响三处功能,特别重要,一是树形列表被排除的不显示(父级文件夹大小直接受到影响 ),二是校验窗口错误列表被排除的不显示,三是校验窗口校验文件夹扫描时被排除的不统计,也直接影响导出的txt,注意这些都是文件后缀排除的影响,不是程序bug
  • 窗口置顶,为了方便拖入文件,但可能有些小伙伴会反感,修改为False即可取消置顶(不区分大小写)
  • 其他酌情修改,保持格式,保存时编码选utf8无bom,如果改坏了程序不能启动,可以直接删除会自动生成

   4.程序UI框架用的PySimpleGUI、Tkinter,有些自动适应窗口大小的布局我不熟,后台我用的捕捉调整大小事件计算拉伸大小(树形列表的高度拉伸很明显不协调)(版本1.1已改为自动适应窗口大小),如果你用的4k以上的显示器,可能右侧有一些空白区,不影响功能。(用pyqt可能更灵活就解决了,但我一开始没想做成这么复杂,最大化按钮之前禁用的,但考虑到路径可能很长很长...)
   5.关于拖入小窗口,设计的似乎很多余,这是因为拖拽功能用的tkinterdnd2这个库,封装了tkinter,而PySimpleGUI也封装了tkinter,主窗口只有一个,为了避免冲突,我设计了拖拽小窗口。但后来觉得不完美,读了tkinterdnd2源码,自己做了简单封装,使得主窗口可以直接拖入,原先做的小窗口功能就直接保留着。
   6.校验窗口的导出TXT功能可以活用,不使用校验直接导出,比如导出种子的文件清单,直接导出某个文件夹的子文件清单(必须拖入目标文件夹)(注意文件后缀排除这个设置影响导出结果)
   7.树形列表有些文本显示为?的,是因为超出显示范围了(tkinter支持的字符范围\u0000-\uffff),复制到的文本、校验功能的路径匹配等不受影响。
   8.校验窗口,因为涉及到了磁盘IO,后台用了asyncio异步处理,执行任务时按钮和关闭窗口会禁用,如果有高耗时的任务不要强行关闭窗口,等待完成提示。
   9、窗口大小、位置,阈值设置,每次退出自动保存,启动时读取。
   10、工具内的文件ID并无实际意义,用于标识特定文件及文件夹,也可用于了解文件个数(滚动条拉到底,查看最大的ID)
   11、pics文件夹下的file.png、folder.png重命名或删除,树形列表没有图标(默认样式),方便不喜欢图标的进行自定义(可以用大小一样的其他图标替换),如下:
20240825141127.png

   12、树形列表的表头是随机取一种颜色,字体颜色是黑白随机,可能会出现浅色背景白色字体以致于无法看清,这个问题不大,表头双击仍然有效。(版本1.1已修正,浅色字体背景不会同时出现


其他开发说明:
  • 程序UI框架用的PySimpleGUI 4.x版本,5.0开始收费,适合做小玩意我也没打算深入研究,有的问题搜不到答案。
  • 程序写了很久,暂时不开源,等以后有精力写完文档再放到代码仓库。
  • 解析种子最好用的库,我测下来是bencodingpy,虽然这个库很新,我比较了六七个库。种子转磁链示例代码如下,供参考:
  • [Python] 纯文本查看 复制代码
    from bencodingpy import decode as bdecode, encode as bencode
    import hashlib
    
    torrent_file = 'test.torrent'
    with open(torrent_file, 'rb') as f:
        torrent_data = bdecode(f.read())
    
    info_bencoding = bencode(torrent_data['info'])
    info_hash = hashlib.sha1(info_bencoding).hexdigest()
    
    magnet_uri = 'magnet:?xt=urn:btih:' + info_hash
  • 程序的所有敏感操作, 读取种子文件、读写ini文件、写入txt文件、读写剪切板,没有联网或其他敏感操作。自动读剪切板,settings.ini修改auto-read-clip可以关闭。读取剪切板核心代码如下,仅获取.torrent结尾字符串,不侵犯用户隐私。(如果杀毒软件报毒应该是误报)
20240824215901.png
   6.关于磁力转种子,找了库发现效果很差,所以放弃了。这个需求应该很小众,论坛有前辈写的工具,另外迅雷、比特彗星这些成熟软件只要创建下载任务成功就会自动保存种子,直接去下载目录找找,一般是特征码命名的隐藏.torrent文件。
   7.导出的TXT,单行是以|来分隔的,不是逗号,因为我考虑到有些路径可能会含有,导致分割出错。
   8.楼主水平一般,开发时发现的问题已经都解决,但难免还有问题,请大家轻喷。这个帖子我写了很久,不知道会不会有人用这个工具,如果是一些小问题请大家忽略,本来只是小工具,严重的程序bug请跟帖,有时间会修复,最好提供下种子或磁链的特征码。
   9. 后续不加功能,只修bug。(自己食言了,加了很多新功能)

有些写着写着涉及用到的技术了,不是所有人都熟悉python,大家见谅,直接看工具用法的部分,其他不重要的忽略。
改了几遍排版还是有点乱,但顺序应该是清晰的,大家将就看吧。

下载地址:
无控制台版本   no-cmd.txt (51 Bytes, 下载次数: 64)
带控制台版本   with-cmd.txt (51 Bytes, 下载次数: 77)






注意上面的地址,还是1.0版本,目前新版本未发布。
关于新版本v1.1,其实9月份我在积极开发,但后续忙起来了,暂时搁置了。有需要的朋友收藏贴子,等更新了会有提示,可能下个月,目前还有少部分功能没做完,所以不会发布残缺版本。新版本加入了BittorrentV2协议支持、正则搜索种子内容,以及连接qBittorrent添加下载任务。
如果帖子不能修改了,会放在评论区。

20241125004113.png



免费评分

参与人数 12吾爱币 +16 热心值 +11 收起 理由
Capybara + 1 谢谢@Thanks!
无影寒冬 + 1 + 1 谢谢@Thanks!
hbpgyb + 1 + 1 谢谢@Thanks!
nanan + 1 + 1 谢谢@Thanks!
pbgz + 1 + 1 谢谢@Thanks!
jiansen1991 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
鸠山一茶 + 1 + 1 谢谢@Thanks!
uhao + 1 + 1 我很赞同!
hhlzf + 1 我很赞同!
happyfox1999 + 1 + 1 用心讨论,共获提升!
lvg158 + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| charlesz97 发表于 2024-8-26 16:19
不修改帖子,补充说明两点:
(1)settings.ini修改后,另存为,编码一定要选择utf8(无Bom)保存。我这里测试,如果是utf8有BOM保存的,启动时读取ini失败,会使用默认设置,导致自定义设置无效。
(2)最大文件的提示,是一个很有用的功能。比如你在其他论坛下载一个种子,里面一大堆广告文件,眼睛看瞎了,最大文件会直接告诉你视频在哪个文件夹下(少数情况下广告视频比正主还大)(设置文件后缀排除也可以用来减少干扰文件)

我发现少数种子会报错,这个无法避免,取决于内置库的解析能力,后续能修则修。应该比例很小,大多数情况下都没问题,我本地用脚本测了2000个左右(比较懒,下了没删,用everything搜出来的)。
 楼主| charlesz97 发表于 2024-8-27 00:09
pengjingli 发表于 2024-8-26 22:37
谢谢楼主分享,有个小问题,运行窗口一直前置状态,不知道怎么设置像正常窗口一样

修改根目录settings.ini,topmost = False,修改后另存为,编码选择utf8(无Bom)保存,启动时窗体就取消置顶(前置)了
xtrn90 发表于 2024-8-26 09:20
12405697 发表于 2024-8-26 00:38
不错的功能
15967673079 发表于 2024-8-26 08:09
多谢分享
songleqian 发表于 2024-8-26 09:09
下载使用,多谢
51svip 发表于 2024-8-26 09:46
好东西,实用,收藏一下
happyfox1999 发表于 2024-8-26 10:31
感谢楼主分享!!
hhlzf 发表于 2024-8-26 10:58
谢谢,不错的工具
luoluosa 发表于 2024-8-26 12:45
感谢楼主分享
w7456 发表于 2024-8-26 12:59
谢谢分享原创软件,辛苦了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 09:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表