Skip to content

Instantly share code, notes, and snippets.

@samukasmk
Last active June 19, 2023 12:26
Show Gist options
  • Save samukasmk/940ca5d5abd9019e8b1af77c819e4ca9 to your computer and use it in GitHub Desktop.
Save samukasmk/940ca5d5abd9019e8b1af77c819e4ca9 to your computer and use it in GitHub Desktop.
Script of example to download files by torrent in Python (By: magnet url)
# source:
# https://stackoverflow.com/questions/6051877/loading-magnet-link-using-rasterbar-libtorrent-in-python
#
# ATTENTION: This is only a example of to use a python bind of torrent library in Python for educational purposes.
# I am not responsible for your download of illegal content or without permission.
# Please respect the laws license permits of your country.
import libtorrent as lt
import time
ses = lt.session()
ses.listen_on(6881, 6891)
params = {
'save_path': '/home/user/Downloads/torrent',
'storage_mode': lt.storage_mode_t(2),
'paused': False,
'auto_managed': True,
'duplicate_is_error': True}
link = "MAGNET_LINK_HERE"
handle = lt.add_magnet_uri(ses, link, params)
ses.start_dht()
print 'downloading metadata...'
while (not handle.has_metadata()):
time.sleep(1)
print 'got metadata, starting torrent download...'
while (handle.status().state != lt.torrent_status.seeding):
s = handle.status()
state_str = ['queued', 'checking', 'downloading metadata', \
'downloading', 'finished', 'seeding', 'allocating']
print '%.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])
time.sleep(5)
@Dryrtan
Copy link

Dryrtan commented Dec 10, 2021

Would it be possible to replace the magnet link with a .torrent? How could I do that?

@sealpp
Copy link

sealpp commented Apr 12, 2022

Would it be possible to replace the magnet link with a .torrent? How could I do that?

ses = lt.session({'listen_interfaces': '0.0.0.0:6881'})
    # look here, link is one of .torrent file's path
    info = lt.torrent_info(link)
    h = ses.add_torrent({'ti':info, 'save_path':'/Downloads'})
    s = h.status()
    print('starting', s.name)

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

        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, s.state), end=' ')

        alerts = ses.pop_alerts()
        for a in alerts:
            if a.category() & lt.alert.category_t.error_notification:
                print(a)
        sys.stdout.flush()
        time.sleep(1)
    print(h.status().name, 'complete')

@SC-DO
Copy link

SC-DO commented Aug 18, 2022

Is it possible to pass a proxy configuration for the download?

@mikebilly
Copy link

can I view the files in the big torrent, and select specific files to download, instead of downloading everything?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment