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:
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With