磁力链转bt种子怎么转?python在线代码解析方法介绍

磁力链转bt种子怎么转?python在线代码解析方法介绍

BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些。而且很多论坛或者网站限制了文件上传的类型,分享一个BT种子还需要改文件后缀或者压缩一次,其他人需要下载时候还要额外多一步下载种子的操作。

所以将BT种子转换为占用空间更小,分享更方便的磁力链还是有挺大好处的。

首先一个方案是使用bencode这个插件,通过pip方式安装或者自行下载源文件https://pypi.python.org/pypi/bencode/1.0通过python setup.py install方式安装均可。

相应的将BT种子转换为磁力链代码为:

?

123
45678910111213
importbencode, hashlib, base64, urllib
torrent=open('ubuntu-12.04.2-server-amd64.iso.torrent','rb').read()metadata=bencode.bdecode(torrent)hashcontents=bencode.bencode(metadata['info'])digest=hashlib.sha1(hashcontents).digest()b32hash=base64.b32encode(digest)params={'xt':'urn:btih:%s'%b32hash,'dn': metadata['info']['name'],'tr': metadata['announce'],'xl': metadata['info']['length']}paramstr=urllib.urlencode(params)magneturi='magnet:?%s'%paramstrprintmagneturi

还有另外一个效率相对较高,而且更方便的方案是安装libtorrent,在ubuntu只需要apt-get install python-libtorrent即可对应转换磁力链的代码为:

?
123importlibtorrent as btinfo=bt.torrent_info('test.torrent')print"magnet:?xt=urn:btih:%s&dn=%s"%(info.info_hash(), info.name())

转换磁力链接为bt种子文件

下面来看一个反过程,将磁力链转化为种子文件。
1、需要先安装python-libtorrent包 ,在ubuntu环境下,可以通过以下指令完成安装:

?
1# sudo apt-get install python-libtorrent

2、代码如下:

?
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172#!/usr/bin/env pythonimportshutilimporttempfileimportos.path as ptimportsysimportlibtorrent as ltfromtimeimportsleepdefmagnet2torrent(magnet, output_name=None):ifoutput_nameand\notpt.isdir(output_name)and\notpt.isdir(pt.dirname(pt.abspath(output_name))):print("Invalid output folder: "+pt.dirname(pt.abspath(output_name)))print("")sys.exit(0)tempdir=tempfile.mkdtemp()ses=lt.session()params={'save_path': tempdir,'duplicate_is_error':True,'storage_mode': lt.storage_mode_t(2),'paused':False,'auto_managed':True,'duplicate_is_error':True}handle=lt.add_magnet_uri(ses, magnet, params)print("Downloading Metadata (this may take a while)")while(nothandle.has_metadata()):try:sleep(1)exceptKeyboardInterrupt:print("Aborting...")ses.pause()print("Cleanup dir "+tempdir)shutil.rmtree(tempdir)sys.exit(0)ses.pause()print("Done")torinfo=handle.get_torrent_info()torfile=lt.create_torrent(torinfo)output=pt.abspath(torinfo.name()+".torrent")ifoutput_name:ifpt.isdir(output_name):output=pt.abspath(pt.join(output_name, torinfo.name()+".torrent"))elifpt.isdir(pt.dirname(pt.abspath(output_name))):output=pt.abspath(output_name)print("Saving torrent file here : "+output+" ...")torcontent=lt.bencode(torfile.generate())f=open(output,"wb")f.write(lt.bencode(torfile.generate()))f.close()print("Saved! Cleaning up dir: "+tempdir)ses.remove_torrent(handle)shutil.rmtree(tempdir)returnoutputdefshowHelp():print("")print("USAGE: "+pt.basename(sys.argv[0])+" MAGNET [OUTPUT]")print(" MAGNET\t- the magnet url")print(" OUTPUT\t- the output torrent file name")print("")defmain():iflen(sys.argv) <2:showHelp()sys.exit(0)magnet=sys.argv[1]output_name=Noneiflen(sys.argv) >=3:output_name=sys.argv[2]magnet2torrent(magnet, output_name)if__name__=="__main__":main()

3、用法如下

?
1# python Magnet_To_Torrent2.py [torrent file]

相关内容