if handle.has_metadata():
torinfo = handle.get_torrent_info()
fs = libtorrent.file_storage()
for file in torinfo.files():
fs.add_file(file)
torfile = libtorrent.create_torrent(fs)
torfile.set_comment(torinfo.comment())
torfile.set_creator(torinfo.creator())
for i in xrange(0, torinfo.num_pieces()):
hash = torinfo.hash_for_piece(i)
torfile.set_hash(i, hash)
for url_seed in torinfo.url_seeds():
torfile.add_url_seed(url_seed)
for http_seed in torinfo.http_seeds():
torfile.add_http_seed(http_seed)
for node in torinfo.nodes():
torfile.add_node(node)
for tracker in torinfo.trackers():
torfile.add_tracker(tracker)
torfile.set_priv(torinfo.priv())
f = open(magnet_torrent, "wb")
f.write(libtorrent.bencode(torfile.generate()))
f.close()
import libtorrent, os, time
def magnet_to_torrent(magnet_uri, dst):
"""
Args:
magnet_uri (str): magnet link to convert to torrent file
dst (str): path to the destination folder where the torrent will be saved
"""
# Parse magnet URI parameters
params = libtorrent.parse_magnet_uri(magnet_uri)
params.save_path = "."
# Download torrent info
session = libtorrent.session()
handle = session.add_torrent(params)
print "Downloading metadata..."
while not handle.has_metadata():
time.sleep(0.1)
# Create torrent and save to file
torrent_info = handle.get_torrent_info()
torrent_file = libtorrent.create_torrent(torrent_info)
torrent_path = os.path.join(dst, torrent_info.name() + ".torrent")
with open(torrent_path, "wb") as f:
f.write(libtorrent.bencode(torrent_file.generate()))
print "Torrent saved to %s" % torrent_path
4条答案
按热度按时间1sbrub3j1#
解决方案在这里找到:
http://code.google.com/p/libtorrent/issues/detail?id=165#c5
创建Torrent:
http://www.rasterbar.com/products/libtorrent/make_torrent.html
修改第一行:
对此:
“handle”是从这里开始的:
另外,在创建torrent之前,您必须确保已下载元数据,通过调用
handle.has_metadata()
来执行此操作。更新
看起来libtorrent python API缺少了一些重要的c++ api,这是从磁铁创建torrent所需的,上面的例子在python中无法工作,因为
create_torrent
python类不接受torrent_info作为参数(c++有它可用)。所以我尝试了另一种方法,但也遇到了一堵使其无法实现的砖墙,下面是代码:
在这一行上抛出了一个错误:
它期望hash是
const char*
,但torrent_info.hash_for_piece(int)
返回类big_number
,而big_number
没有API将其转换回const char*。当我有时间的时候,我会向libtorrent开发人员报告这个缺失的API bug,因为目前在使用python绑定时,不可能从magnet uri创建.torrent文件。
python绑定中也缺少
torrent_info.orig_files()
,我不确定torrent_info.files()
是否足够。更新2
我在这方面创建了一个问题,在这里查看:http://code.google.com/p/libtorrent/issues/detail?id=294
星星它,以便他们快速修复它。
更新3
现在已经修复了,有一个0.16.0版本。Windows的二进制文件也是可用的。
5anewei62#
只是想提供一个使用现代libtorrent Python包的快速更新:libtorrent现在有了
parse_magnet_uri
方法,你可以用它来生成torrent句柄:4jb9z9bj3#
如果保存简历数据对您不起作用,您可以使用现有连接中的信息生成新的torrent文件。
我怀疑它是否会使简历比专门为此目的构建的函数更快。
bpsygsoo4#
试着看看这段代码http://code.google.com/p/libtorrent/issues/attachmentText?id=165&aid=-5595452662388837431&name=java_client.cpp&token=km_XkD5NBdXitTaBwtCir8bN-1U%3A1327784186190它使用了add_magnet_uri我认为这是你需要的