I'm using libtorrent
module in python to download torrent. I can download torrent from a private tracker but not from a public one. I tried using various torrents, which I can download using "transmission". I checked it against 4 different connections, all the same.
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'
When I try I get:
0.00% complete (down: 0.0 kb/s up: 0.0 kB/s peers: 0) downloading
And it stop there.
I don't know if it help, but the private tracker is using http
and not udp
, and it doesn't allow DHT.
You don't really explain how you provide the torrent file in your
downloadTorrent
function. Your function works if you have already downloaded the torrent file on your computer.If you want to provide a torrent url as an argument for this function, you need to read the http response as bytes like this
torrent = lt.bdecode(urllib2.urlopen(torrent_url, 'rb').read())
Here's the full code that works with python 2.7: