Python/Libtorrent: получение метаданных по магнитной ссылке без загрузки файлов

Я пытаюсь просто получить имя торрента или список файлов в торренте, фактически не загружая их.

Это мой текущий код, он функциональный, но медленный, так как загружает содержимое торрента.

import libtorrent as lt
import time

ses = lt.session()
params = {
    'save_path': 'media/',
    'storage_mode': lt.storage_mode_t(2),
    'paused': False,
    'auto_managed': True,
    'duplicate_is_error': True
}
handle = lt.add_magnet_uri(ses, "magnet:?xt=urn:btih:9fea16aff4ece16e04f98321668a265f0fd22b7e&dn=archlinux-2017.08.01-x86_64.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce", params)
while(not handle.has_metadata()):
    time.sleep(1)

print(handle.get_torrent_info().name())

Я также пытался использовать lt.parse_magnet_uri(), но это не возвращает то, что я ищу, или многое из того, что действительно выходит за рамки информационного хэша.


person whirish    schedule 13.08.2017    source источник


Ответы (1)


В итоге я решил свою проблему, используя свойство 'file_priorities' в params. Однако это по-прежнему загружает файлы до тех пор, пока не будут получены метаданные, поэтому я просто сохранил их во временный каталог.

import libtorrent as lt
import time
import tempfile

ses = lt.session()
params = {
    'save_path': tempfile.mkdtemp(),
    'storage_mode': lt.storage_mode_t(2),
    'auto_managed': True,
    'file_priorities': [0]*5
}

handle = lt.add_magnet_uri(ses, "magnet:?xt=urn:btih:9fea16aff4ece16e04f98321668a265f0fd22b7e&dn=archlinux-2017.08.01-x86_64.iso&tr=udp://tracker.archlinux.org:6969&tr=http://tracker.archlinux.org:6969/announce", params)
while(not handle.has_metadata()):
    time.sleep(1)

print(handle.get_torrent_info().name())
person whirish    schedule 13.08.2017