2015-06-23 3 views
18

Ich benutze libtorrent Modul in Python zum Herunterladen von Torrent. Ich kann Torrent von einem privaten Tracker herunterladen, aber nicht von einem öffentlichen. Ich habe versucht, verschiedene Torrents zu verwenden, die ich mit "Übertragung" herunterladen kann. Ich habe es gegen 4 verschiedene Verbindungen überprüft, egal.Ich kann torrent nicht vom öffentlichen Verfolger libtorrent herunterladen

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' 

Wenn ich versuche, erhalte ich:

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

Und es dort zu stoppen.

Ich weiß nicht, ob es hilft, aber der private Tracker verwendet http und nicht udp, und es erlaubt DHT nicht.

+3

Was passiert, wenn Sie es versuchen? Erhalten Sie einen Fehler, den Sie in Ihre Frage aufnehmen könnten? – khagler

+0

Es verbindet sich nicht mit anderen Peers. – Chaker

+1

Funktioniert der Tracker wirklich ?! Versuchen Sie die Tracker, die Sie in der Liste finden können: http://coppersurfer.tk/ Viele der älteren öffentlichen Tracker funktionieren nicht mehr. – Encombe

Antwort

1

Sie erklären nicht wirklich, wie Sie die Torrent-Datei in Ihrer downloadTorrent-Funktion bereitstellen. Ihre Funktion funktioniert, wenn Sie die Torrent-Datei bereits auf Ihren Computer heruntergeladen haben.

Wenn Sie eine Torrent-URL als Argument für diese Funktion zur Verfügung stellen möchten, müssen Sie die HTTP-Antwort zu lesen, wie wie diese torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())

Hier ist der vollständige Code-Bytes, die mit Python funktioniert 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)