我试图下载一个torrent(特定的.torrent文件),只给一个info_hash。我知道这之前在这里讨论过,我甚至相应地搜索和修改了我的代码。结果如下:
import libtorrent as lt
import time
import sys
import bencode
ses = lt.session()
ses.listen_on(6881, 6891)
params = {
'save_path': '.',
'storage_mode': lt.storage_mode_t(2),
'paused': False,
'auto_managed': True,
'duplicate_is_error': True
}
info_hash = "2B3AF3B4977EB5485D39F96FE414729530F48386"
link = "magnet:?xt=urn:btih:" + info_hash
h = lt.add_magnet_uri(ses, link, params)
ses.add_dht_router("router.utorrent.com", 6881)
ses.add_dht_router("router.bittorrent.com", 6881)
ses.add_dht_router("dht.transmissionbt.com", 6881)
ses.start_dht()
while (not h.has_metadata()):
time.sleep(1)
torinfo = h.get_torrent_info()
fs = lt.file_storage()
for f in torinfo.files():
fs.add_file(f)
torfile = lt.create_torrent(fs)
torfile.set_comment(torinfo.comment())
torfile.set_creator(torinfo.creator())
f = open("torrentfile.torrent", "wb")
f.write(lt.bencode(torfile.generate()))
f.close()
这将生成一个无法通过传输加载的torrent文件。它缺少跟踪器和真实片段(创建\x00而不是实际片段)
以下行将保存碎片,但仍然缺少跟踪器,并且无法通过传输打开:
f = open("torrentfile.torrent", "wb")
f.write(lt.bencode(torinfo.metadata()))
f.close()
我如何通过使用磁铁链接(如代码中所述)来创建一个看起来像实际torrent的torrent
(我使用的是带有libtorrent 0.16.18-1的Ubuntu 15.04 x64)
我没有非法下载torrent后面的文件——然而,我有torrent可以与我的脚本下载的torrent进行比较。
您没有设置工件哈希和工件大小(file_storage
对象)。请参阅文档。
但是,创建.torrent文件的一种更简单、更健壮的方法是使用直接接受torrent_info
对象的create_torrent
构造函数。即:
torfile = lt.create_torrent(h.get_torrent_info())
f = open("torrentfile.torrent", "wb")
f.write(lt.bencode(torfile.generate()))
f.close()