0

libtorrent docによると、このコードで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 ファイルには問題がないことに注意してください)。

ということで、この torrent のマグネットリンクを送信で取得してみました。結果が異なることがわかります。

magnet:?xt=urn:btih:c0ba1384f8197197262c1f438303508c6f58980c&dn=BTshare.ogv

したがって、python-libtorrent を使用してマグネット リンクを取得する方法に問題があると思います。誰かが実用的な例を持っていますか?

よろしく。

4

3 に答える 3

2

元のマグネット リンク形式では、情報ハッシュが base32 でエンコードされ、スペースが確保されていました。ある時点で、私たち (libtorrent と utorrent) は、単純にするために 16 進数 (base16 エンコード) を使用する方がよいと判断しました。これはおそらく 2009 年か 2010 iirc の頃でした。ただし、移行をスムーズにするために、 base32 と base16 の両方のスタイルのリンクの読み取りをサポートしましたが (違いは簡単にわかります)、下位互換性のために base32 を生成します。

libtorrent は、2013 年初頭に base16 マグネット リンクの生成に切り替えました (libtorrent 1.0)。

libtorrent の非常に古いバージョンを使用している可能性があります。

于 2015-03-30T13:50:48.627 に答える
1

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)
于 2015-03-30T15:37:06.897 に答える
1

あなたの質問が「誰かが実用的な例を持っていますか?」である場合、多くの実用的な例があります。このサイトに関する以前の関連する質問:

.torrent ファイルが与えられた場合、Python でマグネット リンクを生成するにはどうすればよいですか?

機能するリンクとコードが作成したリンクは、ハッシュの内容のみが異なります.そうです、あなたはそれを正しく推測しました.libを使用してハッシュ値を抽出する何かがありますYC5BHBHYDFYZOJRMD5BYGA2QRRXVRGAM. c0ba1384f8197197262c1f438303508c6f58980c(あなたのリンクで、彼らが文書化したCインターフェースの周りでPythonラッパーを使用する方法を確認できませんでした)。libtorrent の使用を強制されない場合は、他の多くのライブラリを試すことができます。

于 2015-03-29T21:10:21.200 に答える