почему магнит, сгенерированный libtorrent, недействителен?


person hop hip    schedule 29.03.2015    source источник
comment
Получить или создать магнитную ссылку? Потому что, если вы получаете магнитную ссылку с Transmission, я предполагаю, что трекер заменяет вышестоящие серверы своими собственными, что влияет на конечный результат URI.   -  person Torxed    schedule 30.03.2015
comment
создать магнитную ссылку. Извините за мой плохой английский.   -  person hop hip    schedule 30.03.2015


Ответы (3)


В исходном формате магнитной ссылки информационный хэш был закодирован в base32 для экономии места. В какой-то момент мы (libtorrent и utorrent) решили, что для простоты лучше использовать шестнадцатеричный код (в кодировке base16). Вероятно, это было где-то в 2009 или 2010 году iirc. Однако, чтобы сделать переход плавным, мы поддерживали чтение ссылок в стиле base32 и base16 (разницу легко заметить), но по-прежнему генерировали base32 для обратной совместимости.

libtorrent перешел на генерацию магнитных ссылок base16 в начале 2013 года (libtorrent 1.0).

Скорее всего, вы используете очень старую версию libtorrent.

person Arvid    schedule 30.03.2015
comment
Я также использую python3-libtorrent 0.16 и libtorrent-rasterbar 0.16 (пакеты debian jessie) - person hop hip; 30.03.2015

Если ваш вопрос «у кого-нибудь есть рабочий пример?», то рабочих примеров много. Предыдущий связанный вопрос на этом же сайте:

Учитывая файл .torrent, как мне создать магнитную ссылку в python?

Ссылка, которая работает, и ссылка, созданная вашим кодом, отличаются только хеш-содержимым YC5BHBHYDFYZOJRMD5BYGA2QRRXVRGAM и c0ba1384f8197197262c1f438303508c6f58980c, так что да, вы правильно догадались, что-то с использованием вашей библиотеки для извлечения хеш-значения. (Я не увидел в вашей ссылке, как использовать оболочку Python для интерфейса C, который они задокументировали). Если вы не вынуждены использовать libtorrent, вы можете попробовать множество других библиотек.

person Jim Raynor    schedule 29.03.2015
comment
Я видел эту ссылку. Но мне нужно понять, почему это не работает с libtorrent (привязки python). - person hop hip; 30.03.2015
comment
Более того, эти ссылки недействительны (согласно онлайн конвертеру magnet2torrent.me) - person hop hip; 30.03.2015

Даже если я удивлен, увидев, что libtorrent устарел на Debian Jessie, я понял проблему благодаря вашим ответам. Танки!

Вот код сейчас, нужно улучшить:

info = lt.torrent_info(t)
b32m = (lt.make_magnet_uri(info))
mhash, dn = b32m.split('btih:')[1].split('&')
mhex = binascii.hexlify(base64.b32decode(mhash)).decode('ascii')
mgt = "magnet:?xt=urn:btih:{0}&{1}".format(mhex,dn)
return(mgt)
person hop hip    schedule 30.03.2015