大神论坛

找回密码
快速注册
查看: 359 | 回复: 0

[源码] 种子文件转磁力链接源码 torrent2magnet源码

主题

帖子

0

积分

初入江湖

UID
666
积分
0
精华
威望
0 点
违规
大神币
68 枚
注册时间
2023-10-14 10:49
发表于 2023-12-16 16:06
本帖最后由 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)


注:若转载请注明大神论坛来源(本贴地址)与作者信息。

返回顶部