本帖最后由 eoven8 于 2023-12-16 16:06 编辑
种子文件转磁力链接源码 torrent2magnet源码功能如题,注意问题如下: 1.默认写入注册表关联种子文件,不喜欢修改源码 winreg.SetValue 那几行注释掉; 2.默认转换个人下载文件夹中的种子文件并将磁力链接复制到剪切板; 3.如果python版本较旧,请修改torrent_file_to_magnet(torrent_file)函数中的[b'info'][b'name'] 把 b 去掉再试; 4.默认转换成功后,删除种子文件,不喜欢可修改最后一行。 ###################################### #种子文件批量转换成磁力链 #运行前需要安装依赖 # pip install bencode.py==3.0.1 # Pip install pyperclip #可以打包成可执行程序 # Pip install pyinstaller # Pyinstaller -F torrent2magnet.py ###################################### #import sys,os #print(r'C:\Windows\py.exe "'+ __file__ +r'" %1') import winreg import bencode import hashlib import os import pyperclip import sys from urllib.parse import quote data_dir = os.environ['USERPROFILE']+'\Downloads' ###print(sys.argv) if len(sys.argv)==2: if os.path.isdir(sys.argv[1]): ###print(sys.argv[1]) data_dir = sys.argv[1] elif os.path.isfile(sys.argv[1]): ###print(os.path.dirname(sys.argv[1])) data_dir = os.path.dirname(sys.argv[1]) else: try: winreg.SetValue(winreg.HKEY_CLASSES_ROOT, r".torrent",winreg.REG_SZ,r"Torrent.Document") winreg.SetValue(winreg.HKEY_CLASSES_ROOT, r"Torrent.Document\shell\open\command",winreg.REG_SZ,sys.executable+r' "'+ __file__ +r'" %1') print(sys.executable+r' "'+ __file__ +r'" %1') print("已成功关联种子文件") except: print('请在“以管理员身份运行”的CMD窗口中调用本程序,命令行如下: \npy "'+__file__+'"') print('如果已经可以正常双击“种子”文件进行转换,请忽略!') print('') ###os.system("pause") torrent=[] magnet=[] def torrent_file_to_magnet(torrent_file): data = open(torrent_file, 'rb').read() metadata = bencode.bdecode(data) # print(metadata) name = metadata[b'info'][b'name'] dn = quote(name) info_bts = bencode.bencode(metadata[b'info']) info_hash = hashlib.sha1(info_bts).hexdigest() return f'magnet:?xt=urn:btih:{info_hash}'#&dn={dn}' ''' if __name__ == '__main__': print(torrent_file_to_magnet('[ThZu.Cc][ThZu.Cc]020421-001-carib-1080p.torrent')) ''' """-------------------------------------------------------- <<获取文件列表>> (1) os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。 这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。只支持在 Unix, Windows 下使用。 (2) os.path.join(path1[, path2[, ...]]) 把目录和文件名合成一个路径 ---------------------------------------------------------""" """获取文件列表""" def getRawFileList(path): """------------------------- files,names=getRawFileList(raw_data_dir) files: ['datacn/dialog/one.txt', 'datacn/dialog/two.txt'] names: ['one.txt', 'two.txt'] ----------------------------""" files = [] names = [] for f in os.listdir(path): if not f.endswith("~") or not f == "" : # 返回指定的文件夹包含的文件或文件夹的名字的列表 files.append(os.path.join(path, f)) # 把目录和文件名合成一个路径 names.append(f) return files, names files,names = getRawFileList(data_dir) '''print("files:", files) print("names:", names)''' for tf in files: if tf.endswith(".torrent"): torrent.append(tf) '''print(torrent)''' for to in torrent: magnet.append(torrent_file_to_magnet(to)) txt="" for l in magnet: print(l) txt=l+'\n'+txt print("成功转换",len(magnet),"个磁力链接") pyperclip.copy(txt) os.system("pause") for i in torrent: os.remove(i)
注:若转载请注明大神论坛来源(本贴地址)与作者信息。
|