600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 使用Python实现BT种子和磁力链接的相互转换

使用Python实现BT种子和磁力链接的相互转换

时间:2019-03-02 09:02:59

相关推荐

使用Python实现BT种子和磁力链接的相互转换

后端开发|Python教程

Python,种子,磁力链接

后端开发-Python教程

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

易语言 梦幻 源码 多开,vscode制作动态仪表盘,ubuntu安装久,本地tomcat变得极慢,夜里的爬虫,php代码在线调试,有哪些seo系统招商平台lzw

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

720yun 源码 全景,ubuntu搭网盘,tomcat9 jar包,爬虫token过期,php商城系统厂家,招聘seo信息seo教程lzw

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

超级玛丽源码下载,ubuntu软件安装程序,爬虫要用到什么,软件技术php毕业论文大专交流,亚马逊seo网站lzw

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

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

import bencode, hashlib, base64, urllibtorrent = open(ubuntu-12.04.2-server-amd64.iso.torrent, b).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][ ame], r: metadata[announce],xl: metadata[info][length]}paramstr = urllib.urlencode(params)magneturi = magnet:?%s % paramstrprint magneturi

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

import libtorrent as btinfo = bt.torrent_info( est.torrent)print "magnet:?xt=urn:btih:%s&dn=%s" % (info.info_hash(), info.name())

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

下面来看一个反过程,将磁力链转化为种子文件。

1、需要先安装python-libtorrent包 ,在ubuntu环境下,可以通过以下指令完成安装:

# sudo apt-get install python-libtorrent

2、代码如下:

#!/usr/bin/env pythonimport shutilimport tempfileimport os.path as ptimport sysimport libtorrent as ltfrom time import sleepdef magnet2torrent(magnet, output_name=None): if output_name and \not pt.isdir(output_name) and \not pt.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 (not handle.has_metadata()): try:sleep(1) except KeyboardInterrupt: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") if output_name: if pt.isdir(output_name):output = pt.abspath(pt.join( output_name, torinfo.name() + ".torrent")) elif pt.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) return outputdef showHelp(): 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("")def main(): if len(sys.argv) = 3: output_name = sys.argv[2] magnet2torrent(magnet, output_name)if __name__ == "__main__": main()

3、用法如下

# python Magnet_To_Torrent2.py [torrent file]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。