18

libtorrentトレントをダウンロードするためにPythonでモジュールを使用しています。プライベート トラッカーからは torrent をダウンロードできますが、パブリック トラッカーからはダウンロードできません。「送信」でダウンロードできるトレントをいろいろ使ってみました。私はそれを4つの異なる接続に対してチェックしましたが、すべて同じです.

def downloadTorrent(torrent):
    """
    Download torrent using libtorrent library.
    Torrent will be stored at the current directory.
    """
    ses = lt.session()
    ses.listen_on(6881, 6891)

    info = lt.torrent_info(torrent)
    h = ses.add_torrent({'ti': info, 'save_path': './'})
    ses.start_dht()
    print 'starting', h.name()

    while (not h.is_seed()):
        s = h.status()

        state_str = ['queued', 'checking', 'downloading metadata', \
          'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
        print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
          (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
          s.num_peers, state_str[s.state]),
        sys.stdout.flush()

        time.sleep(1)

    print h.name(), 'complete'

試してみると、次のようになります。

0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading 

そして、それはそこで止まります。

それが役立つかどうかはわかりませんが、プライベート トラッカーは を使用して httpおりudp、DHT を許可していません。

4

1 に答える 1

1

関数で torrent ファイルを提供する方法については、実際には説明していませんdownloadTorrent。お使いのコンピューターに torrent ファイルを既にダウンロードしている場合、機能は機能します。

この関数の引数としてトレント URL を提供する場合は、http 応答を次のようなバイトとして読み取る必要があります。torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

Python 2.7 で動作する完全なコードは次のとおりです。

import libtorrent as lt
import urllib2

public_torrent = 'http://releases.ubuntu.com/14.04.3/ubuntu-14.04.3-desktop-amd64.iso.torrent'

def downloadTorrent(torrent_url):
    """
    Download torrent using libtorrent library.
    Torrent will be stored at the current directory.
    """
    ses = lt.session()
    ses.listen_on(6881, 6891)

    # read torrent file as bytes
    torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

    info = lt.torrent_info(torrent)
    h = ses.add_torrent({'ti': info, 'save_path': './'})
    ses.start_dht()
    print 'starting', h.name()

    while (not h.is_seed()):
        s = h.status()

        state_str = ['queued', 'checking', 'downloading metadata', \
          'downloading', 'finished', 'seeding', 'allocating', 'checking fastresume']
        print '\r%.2f%% complete (down: %.1f kb/s up: %.1f kB/s peers: %d) %s' % \
          (s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000, \
          s.num_peers, state_str[s.state]),
        sys.stdout.flush()

        time.sleep(1)

    print h.name(), 'complete'

downloadTorrent(public_torrent)
于 2015-09-19T14:28:29.500 に答える