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

来论坛比较久了,一直没啥贡献,这次发布一个原创工具。

软件叫种子工具箱,可能名字有点夸大成分,由于功能本身很简单,这纯粹是由于创建项目的时候随手取了Torrent Box这个项目名。工具的作用,查看种子内的文件清单,快速转磁链,以及BT下载状态校验。注意,如果你习惯常开迅雷、比特彗星等Bt下载工具,可能不需要这个工具,由于它的功能这些成熟的软件本身都有,适合不想打开这类大型软件(此工具较小启动很快),或者像我一样使用一些网盘离线功能,不想迅雷创建下载任务再去右键得到磁力链接,单纯需要一个种子转磁链工具的用户。

说说软件的开发由来,一次我使用网盘的离线功能,新建Bt任务需要打开本地的种子文件,过程繁琐,而磁力链接直接粘贴就可以创建了,而且种子文件如果包含敏感字眼,直接提示违规,而磁力反而能创建成功…呃,所以种子转磁力链接成了我的重大需求。楼主本身是写python为主,网上找到了这篇博客资料(

博客

),感谢原博的分享。我在作者的工具类上,根据自己的测试做了修改,根据发现的一些不兼容的种子,使用两个bencode库来完善解析,最终我本地的种子测下来都通过,这也是此工具的核心。


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

以下都以

无控制台版本为例

,软件主窗口,如下:

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

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

双击“Path”表头,打开下载状态校验窗口

,这个窗口下文再说。这里这么设计,纯粹是不想加按钮破坏设计好的布局,此功能差不多是最后加的。

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

磁链,点复制按钮,或者按快捷键Ctrl+C,复制磁力链接到剪切板。

退出按钮,ESC快捷键,以及窗口关闭按钮,关闭软件。

补充,解析按钮的快捷键是Enter。


接下来说说下载状态校验窗口,顾名思义,用来检查缺哪个文件、以及下了多少的百分比。

Bt下载工具在文件状态一栏,是可以直接看百分比,但假设我是不想打开这类Bt软件,或者我是用其他方式如IDM从网盘下载的。加上

Bt下载工具都有中间文件,所以此工具的大小提示仅供参考目的

,此工具的

主要

目的是统计缺了哪些。

列如我自己的使用场景,网盘离线下载一个大量小文件的种子,离线成功了95%,我直接把这

95%下载下来,剩余的用迅雷下载。那么我缺哪些文件?这就可以用此窗口来解决了。

  • 第一个,指拖入的文件夹内所有子级的路径清单,包括子级的子级,格式: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文件,可以自定义修改

    ,分别表明:

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

窗口是否置顶
主窗口启动宽高
上次使用文件夹
树形列表是否自动展开
树形列表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重命名或删除,树形列表没有图标(默认样式),方便不喜爱图标的进行自定义(可以用大小一样的其他图标替换),如下:

其他开发说明:

  • 程序UI框架用的PySimpleGUI 4.x版本,5.0开始收费,适合做小玩意我也没打算深入研究,有的问题搜不到答案。
  • 程序写了很久,暂时不开源,等后来有精力写完文档再放到代码仓库。
  • 解析种子最好用的库,我测下来是bencodingpy,虽然这个库很新,我比较了六七个库。种子转磁链示例代码如下,供参考:
  • 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结尾字符串,不侵犯用户隐私。(如果杀毒软件报毒应该是误报)

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

6.关于磁力转种子,找了库发现效果很差,所以放弃了。这个需求应该很小众,论坛有前辈写的工具,另外迅雷、比特彗星这些成熟软件只要创建下载任务成功就会自动保存种子,直接去下载目录找找,一般是特征码命名的隐藏.torrent文件。
7.导出的TXT,单行是以|来分隔的,不是逗号,由于我思考到有些路径可能会含有,导致分割出错。
8.楼主水平一般,开发时发现的问题已经都解决,但难免还有问题,请大家轻喷。这个帖子我写了很久,不知道会不会有人用这个工具,如果是一些小问题请大家忽略,本来只是小工具,严重的程序bug请跟帖,有时间会修复,最好提供下种子或磁链的特征码。
9. 后续不加功能,只修bug。(自己食言了,加了许多新功能)

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

下载地址:
无控制台版本

带控制台版本



注意上面的地址,

还是1.0版本,目前新版本未发布。

关于新版本v1.1,实则9月份我在积极开发,但后续忙起来了,暂时搁置了。

有需要的朋友收藏贴子,等更新了会有提示

,可能下个月,目前还有少部分功能没做完,所以不会发布残缺版本。新版本加入了BittorrentV2协议支持、正则搜索种子内容,以及连接qBittorrent添加下载任务。
如果帖子不能修改了,会放在评论区。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
随机推荐
评论 共44条

请登录后发表评论