0

info_hashのみを指定して torrent (特定の .torrent ファイル) をダウンロードしようとしました。これは以前にここで議論されたことを知っています。それに応じてコードを検索して変更しました。結果は次のとおりです。

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 を使用しています)

トレントの背後にあるファイルを違法にダウンロードしているわけではありませんが、スクリプトによってダウンロードされたトレントと比較するトレントがあります。

4

1 に答える 1

1

file_storageピースハッシュと(オブジェクトの)ピースサイズを設定していません。ドキュメントを参照してください。

ただし、.torrent ファイルを作成するより簡単で堅牢な方法は、オブジェクトcreate_torrentを直接受け取るコンストラクターを使用することです。torrent_infoすなわち:

torfile = lt.create_torrent(h.get_torrent_info())
f = open("torrentfile.torrent", "wb")
f.write(lt.bencode(torfile.generate()))
f.close()
于 2015-11-28T01:39:53.873 に答える