Last active
June 19, 2023 12:26
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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) |
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')
Is it possible to pass a proxy configuration for the download?
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
Would it be possible to replace the magnet link with a .torrent? How could I do that?