He leído a través del manual y no puedo encontrar la respuesta. Dado un enlace de imán, me gustaría generar un archivo torrent para que pueda cargarse en el siguiente inicio para evitar volver a descargar los metadatos. He intentado con la función de reanudación rápida, pero aún tengo que buscar metadatos cuando lo hago y eso puede llevar bastante tiempo. Los ejemplos que he visto son para crear archivos torrent para un nuevo torrente, mientras que me gustaría crear uno que coincida con un imán uri.Libtorrent: dado un enlace de imán, ¿cómo se genera un archivo torrent?
Respuesta
solución encontrada aquí:
http://code.google.com/p/libtorrent/issues/detail?id=165#c5
Ver crear torrente:
http://www.rasterbar.com/products/libtorrent/make_torrent.html
Modificar las primeras líneas:
file_storage fs;
// recursively adds files in directories
add_files(fs, "./my_torrent");
create_torrent t(fs);
A esto:
torrent_info ti = handle.get_torrent_info()
create_torrent t(ti)
"manejar" a partir de aquí:
torrent_handle add_magnet_uri(session& ses, std::string const& uri add_torrent_params p);
También antes de la creación de torrent que tiene que asegurarse de que los metadatos se ha descargado, esto llamando handle.has_metadata()
.
ACTUALIZACIÓN
parece que api libtorrent pitón le falta algunos de importancia API C++ que se requiere para crear torrente de imanes, el ejemplo anterior no funcionará en la causa pitón clase create_torrent
pitón no acepta torrent_info como parámetro (C++ lo tiene disponible).
así que lo intenté otra manera, pero también se encontró con una pared de ladrillo que hace que sea imposible, aquí está el código:
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()
Hay un error arrojado en esta línea:
torfile.set_hash(i, hash)
Espera que hash sea const char*
, pero torrent_info.hash_for_piece(int)
devuelve la clase big_number
que no tiene API para convertirla de nuevo a const char *.
Cuando encuentre algo de tiempo, reportaré este error de API faltante a los desarrolladores de libtorrent, ya que actualmente es imposible crear un archivo .torrent desde un imán uri cuando se utilizan enlaces de python.
torrent_info.orig_files()
también falta en los enlaces de python, no estoy seguro de si torrent_info.files()
es suficiente.
ACTUALIZACIÓN 2
He creado un problema en esto, ver aquí: http://code.google.com/p/libtorrent/issues/detail?id=294
estrella que lo que solucionarlo rápidamente.
ACTUALIZACIÓN 3
Se fija ahora, hay una liberación 0.16.0. Binarios para ventanas también están disponibles.
¡Muchas gracias por todo el trabajo! – ciferkey
Si guardar el resume data no funcionó para usted, puede generar un nuevo archivo torrent utilizando la información de la conexión existente.
fs = libtorrent.file_storage()
libtorrent.add_files(fs, "somefiles")
t = libtorrent.create_torrent(fs)
t.add_tracker("http://10.0.0.1:312/announce")
t.set_creator("My Torrent")
t.set_comment("Some comments")
t.set_priv(True)
libtorrent.set_piece_hashes(t, "C:\\", lambda x: 0), libtorrent.bencode(t.generate())
f=open("mytorrent.torrent", "wb")
f.write(libtorrent.bencode(t.generate()))
f.close()
Dudo que haga que el currículum sea más rápido que la función creada específicamente para este propósito.
tratar de ver el código http://code.google.com/p/libtorrent/issues/attachmentText?id=165&aid=-5595452662388837431&name=java_client.cpp&token=km_XkD5NBdXitTaBwtCir8bN-1U%3A1327784186190 se utiliza add_magnet_uri que creo que es lo que necesita
Sólo quería dar una rápida actualización utilizando el paquete libtorrent Python moderna: libtorrent tiene ahora el método parse_magnet_uri
que se puede utilizar para generar un mango torrente:
import libtorrent, os, time
def magnet_to_torrent(magnet_uri, dst):
params = libtorrent.parse_magnet_uri(magnet_uri)
session = libtorrent.session()
handle = session.add_torrent(params)
print "Downloading metadata..."
while not handle.has_metadata():
time.sleep(0.1)
torrent_info = handle.get_torrent_info()
torrent_file = libtorrent.create_torrent(torrent_info)
torrent_path = os.path.join(dst, torrent_info.name() + ".torrent")
with open(torrent_path, "wb") as f:
f.write(libtorrent.bencode(torrent_file.generate()))
print "Torrent saved to %s" % torrent_path
- 1. Descarga de un Torrent con libtorrent-pitón
- 2. ¿Cómo se genera un indexador de archivos torrent?
- 3. Analizando un archivo torrent - información hash. (Erlang)
- 4. Extraiga el hash SHA1 de un archivo torrent
- 5. ¿Cómo se genera un sessionID?
- 6. Rieles: dado un bloque de texto, vínculos de enlace automático
- 7. ¿Cómo incluyo o excluyo condicionalmente un archivo de un arquetipo cuando se genera un proyecto?
- 8. ¿Cómo se genera un número aleatorio en tiempo de ejecución?
- 9. ¿Cuándo genera Jython en un archivo .py un archivo .class?
- 10. ¿Cómo crear un archivo con un tamaño dado en Linux?
- 11. Lectura del conjunto de archivos de un torrent
- 12. ¿Cómo genera Silverlight DataForm automáticamente un enlace de un ComboBox a una enumeración?
- 13. Cómo generar definiciones vacías dado un archivo de encabezado
- 14. ¿Cómo saber si un archivo es un enlace?
- 15. ¿Cómo se genera la capa de presentación de un CALayer?
- 16. ¿Cómo se genera aleatoriamente distribuida normalmente desde un rango entero?
- 17. ¿Cómo saber qué proceso está usando un archivo dado?
- 18. Enlace a un archivo estático de Hamlet
- 19. ¿Cómo puedo encontrar un nombre de archivo, dado un puntero ARCHIVO?
- 20. Cómo crear el objeto CommonsMultipartFile dado solo un archivo
- 21. ¿Cómo se genera un número de pedido único?
- 22. ¿Cómo obtener el tamaño del archivo dado un camino?
- 23. ¿Cómo se determina el uso de stat() si un archivo es un enlace simbólico?
- 24. Dado un archivo WSDL, cree un cliente Java simple
- 25. Agregue un enlace alrededor de un archivo Flash incrustado
- 26. ¿Cómo obtener un inflador de diseño dado un contexto?
- 27. ¿Cómo crear un enlace descargable al archivo de texto?
- 28. ¿Cómo no se genera el archivo generado por T4 predeterminado?
- 29. ¿Cómo se prueba un método que genera hilos?
- 30. ¿Cómo se genera un número aleatorio en C#?
Por supuesto, la documentación es terrible (aunque extrañamente utilizable) Pero, ¿qué hay de malo con la extensión de metadatos http://www.rasterbar.com/products/libtorrent/manual.html#add-extension? –