1

我試圖在沒有實際下載它們的情況下獲取torrent名稱或文件列表。Python/Libtorrent:從磁鐵鏈接中檢索元數據而無需下載文件

這是我目前的代碼,它功能強大但速度很慢,因爲它會下載torrent內容。

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(),但這並不能返回我所期待的,還是很多的事情真的過去的信息哈希值。

回答

0

我結束了利用'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())