Решение найдено здесь:
http://code.google.com/p/libtorrent/issues/detail?id=165#c5
См. Создание торрента:
http://www.rasterbar.com/products/libtorrent/make_torrent.html
Изменить первые строки:
file_storage fs;
// recursively adds files in directories
add_files(fs, "./my_torrent");
create_torrent t(fs);
Для этого:
torrent_info ti = handle.get_torrent_info()
create_torrent t(ti)
«дескриптор» отсюда:
torrent_handle add_magnet_uri(session& ses, std::string const& uri add_torrent_params p);
Также перед созданием торрента вы должны убедиться, что метаданные были загружены, сделайте это с помощьюВызов handle.has_metadata()
.
ОБНОВЛЕНИЕ
Похоже, что в libtorrent python api отсутствуют некоторые важные c ++ api, которые необходимы для создания торрента из магнитов, пример выше выиграл 't работает в python, потому что create_torrent
класс python не принимает torrent_info в качестве параметра (он доступен в c ++).
Так что я попробовал это по-другому, но также столкнулся с кирпичной стеной, которая делает это невозможным, воткод:
if handle.has_metadata():
torinfo = handle.get_torrent_info()
fs = libtorrent.file_storage()
for file in torinfo.files():
fs.add_file(file)
torfile = libtorrent.create_torrent(fs)
torfile.set_comment(torinfo.comment())
torfile.set_creator(torinfo.creator())
for i in xrange(0, torinfo.num_pieces()):
hash = torinfo.hash_for_piece(i)
torfile.set_hash(i, hash)
for url_seed in torinfo.url_seeds():
torfile.add_url_seed(url_seed)
for http_seed in torinfo.http_seeds():
torfile.add_http_seed(http_seed)
for node in torinfo.nodes():
torfile.add_node(node)
for tracker in torinfo.trackers():
torfile.add_tracker(tracker)
torfile.set_priv(torinfo.priv())
f = open(magnet_torrent, "wb")
f.write(libtorrent.bencode(torfile.generate()))
f.close()
В этой строке выдается ошибка:
torfile.set_hash(i, hash)
Ожидается, что хэш будет const char*
, но torrent_info.hash_for_piece(int)
возвращает класс big_number
, который не имеет APIпреобразовать его обратно в const char *.
Когда я найду время, я сообщу об этом отсутствующем APIg разработчикам libtorrent, так как в настоящее время невозможно создать файл .torrent из uri магнита при использовании привязок python.
torrent_info.orig_files()
также отсутствует в привязках python, я не уверен, что torrent_info.files()
достаточно.
ОБНОВЛЕНИЕ 2
Я создал проблему по этому вопросу, посмотрите ее здесь: http://code.google.com/p/libtorrent/issues/detail?id=294
Пометьте ее, чтобы исправитьэто быстро.
ОБНОВЛЕНИЕ 3
Исправлено, релиз 0.16.0.Двоичные файлы для окон также доступны.