2012-04-20 2 views
3

Я искал, как передать аргумент в функции torrent_info() во время использования магнитных ссылок в libtorrent. Особенно моей целью является анализ сверстников и кусочков. При использовании файла .torrent процесс очевиден кидают другие данные парадигм на этом сайте:torrent_info() и ссылки на магнитные ссылки в ссылках на libtorrent python

e = lt.bdecode(open("torrent.torrent", 'rb').read()) 
info = lt.torrent_info(e) 

Но что происходит с магнитом ссылки?

params = { 
    'save_path': 'C:\Python26', 
    'storage_mode': lt.storage_mode_t(2), 
    'paused': False, 
    'auto_managed': True, 
    'duplicate_is_error': True} 
link = "magnet:?........." 

handle = lt.add_magnet_uri(ses, link, params) 

Каких переменная эквивалентна «е» процесс .torrent в магните связывает дело, с тем чтобы иметь возможность использовать torrent_info функции должным образом?

ответ

6

Добавление ссылки на магнит дает вам торрент-дескриптор, из которого вы сможете получить информацию о торрентах (после того, как метаданные будут извлечены - в противном случае она будет выбрана иначе).

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

Я больше привык к библиотеке C++, но хорошо - иметь это демо на самое грязное, что вы можете сделать что-то в строке:

handle = lt.add_magnet_uri(ses, link, params) 
while (not handle.has_metadata()): 
    time.sleep(.1) 
info = handle.get_torrent_info() 

... Затем, вы можете прочитать все об этом здесь;) http://www.rasterbar.com/products/libtorrent/manual.html#torrent-info

+0

Большое спасибо. Это будет полезно при добавлении поддержки магнитных линий в моей программе. – Gabriel

+0

Вы были бы любезны, чтобы опубликовать эквивалент C++ кода Python, который у вас есть? – hd1

+0

Несомненно. Примеры здесь: https://github.com/Roxee/qt-roxeetorrent/blob/master/src/session.cpp#L113, чтобы добавить ссылку на магнит. И здесь https://github.com/Roxee/qt-roxeetorrent/blob/master/src/torrenthandle.cpp#L230, чтобы получить информацию из дескриптора, если метаданные здесь. Весь этот код грязный, но вы получите эту идею. Очевидно, мы не «ожидаем» на C++, хотя вы можете использовать metadata_received_alert (http://www.rasterbar.com/products/libtorrent/manual.html), чтобы получить уведомление о том, что метаданные здесь и что-то делают. Пинг меня на github, если вы не можете понять это. –