根据libtorrent文档,我试图从torrent文件中获得磁铁链接,代码为:
info = lt.torrent_info(t) # t is a torrent file
return(lt.make_magnet_uri(info))
它返回一个链接:
magnet:?xt=urn:btih:YC5BHBHYDFYZOJRMD5BYGA2QRRXVRGAM&dn=BTshare.ogv
但这个链接不起作用。(请注意,torrent文件没有问题)。
所以,我试图找回这个洪流的磁铁链接与传输。结果是不同的:
magnet:?xt=urn:btih:c0ba1384f8197197262c1f438303508c6f58980c&dn=BTshare.ogv
所以我认为我使用python libtorrent来获得磁铁链接的方式有问题。有人有工作榜样吗?
谨致问候。
最初的磁铁链接格式将信息哈希编码为base32,以表示空间。有一次,为了简单起见,我们(libtorrent和utorent)决定最好使用十六进制(base16编码)。这可能是在2009年或2010年左右。然而,为了使转换顺利,我们支持读取base32和base16样式的链接(很容易区分),但仍然生成base32以实现向后兼容性。
libtorrent在2013年初转换为生成base16磁铁链接(libtorrent1.0)。
很可能您使用的是一个非常旧的libtorrent版本。
如果你的问题是"有人有工作示例吗?",那么有很多工作示例。在此网站上的先前相关问题:
给定一个.torrent文件,我如何在python中生成一个磁铁链接?
有效的链接和您的代码创建的链接只在哈希内容YC5BHBHYDFYZOJRMD5BYGA2QRRXVRGAM
和c0ba1384f8197197262c1f438303508c6f58980c
上有所不同,所以是的,您猜对了,使用lib提取哈希值是有问题的。(我在你的链接中没有看到如何在他们记录的C接口周围使用Python包装器)。如果你没有被迫使用libtorrent,你可以尝试许多其他的libs。
即使我很惊讶地看到libtorrent在debian jessie上已经过时了,但多亏了你的回答,我还是解决了这个问题。坦克!
这是现在需要改进的代码:
info = lt.torrent_info(t)
b32m = (lt.make_magnet_uri(info))
mhash, dn = b32m.split('btih:')[1].split('&')
mhex = binascii.hexlify(base64.b32decode(mhash)).decode('ascii')
mgt = "magnet:?xt=urn:btih:{0}&{1}".format(mhex,dn)
return(mgt)