Necesito una forma de convertir .torrents en enlaces de imán. Me gustaría una manera de hacerlo en Python. ¿Hay bibliotecas que ya hacen esto?Dado un archivo .torrent, ¿cómo puedo generar un enlace de imán en python?
Respuesta
Puede hacerlo con el módulo bencode, extraído de BitTorrent.
Para mostrar un ejemplo, he descargado un torrente ISO de Ubuntu desde aquí:
http://releases.ubuntu.com/12.04/ubuntu-12.04.1-desktop-i386.iso.torrent
A continuación, puede analizarlo en Python como esto:
>>> import bencode
>>> torrent = open('ubuntu-12.04.1-desktop-i386.iso.torrent', 'r').read()
>>> metadata = bencode.bdecode(torrent)
Se calcula un hash de imán de sólo la sección "información" de los metadatos torrente y luego codificado en base32, como esto:
>>> hashcontents = bencode.bencode(metadata['info'])
>>> import hashlib
>>> digest = hashlib.sha1(hashcontents).digest()
>>> import base64
>>> b32hash = base64.b32encode(digest)
>>> b32hash
'CT76LXJDDCH5LS2TUHKH6EUJ3NYKX4Y6'
Puede comprobar que esto es correcto mirando here y verá el enlace imán es:
magnet:?xt=urn:btih:CT76LXJDDCH5LS2TUHKH6EUJ3NYKX4Y6
Si desea llenar en algunos parámetros adicionales para el imán URI:
>>> params = {'xt': 'urn:btih:%s' % b32hash,
... 'dn': metadata['info']['name'],
... 'tr': metadata['announce'],
... 'xl': metadata['info']['length']}
>>> import urllib
>>> paramstr = urllib.urlencode(params)
>>> magneturi = 'magnet:?%s' % paramstr
>>> magneturi
'magnet:?dn=ubuntu-12.04.1-desktop-i386.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&xl=729067520&xt=urn%3Abtih%3ACT76LXJDDCH5LS2TUHKH6EUJ3NYKX4Y6'
Funciona, ahora tengo una pregunta. Si miro hacia arriba el href de los enlaces magnéticos, por ejemplo, en la tienda pirata se ven así: imán:? Xt = urn: btih: bbb6db69965af769f664b6636e7914f8735141b3 & dn = Ubuntu-12.04-desktop-i386.iso & tr = udp% 3A% 2F% 2Ftracker. openbittorrent.com% 3A80 & tr = udp% 3A% 2F% 2Ftracker.publicbt.com% 3A80 & tr = udp% 3A% 2F% 2Ftracker.istole.it% 3A6969 & tr = udp% 3A% 2F% 2Ftracker.ccc.de% 3A80 What ¿se usan los parámetros "udp"? –
Ese es un URI de rastreador: http://en.wikipedia.org/wiki/Magnet_URI_scheme#Parameters – jterrace
Específicamente, a un rastreador UDP: http://en.wikipedia.org/wiki/UDP_tracker – jterrace
- 1. Libtorrent: dado un enlace de imán, ¿cómo se genera un archivo torrent?
- 2. ¿Cómo puedo generar un .torrent en Java?
- 3. Cómo generar definiciones vacías dado un archivo de encabezado
- 4. ¿Cómo puedo generar múltiples tonos de un color base dado?
- 5. Extraiga el hash SHA1 de un archivo torrent
- 6. Analizando un archivo torrent - información hash. (Erlang)
- 7. ¿Cómo puedo generar un archivo .pfx?
- 8. ¿Cómo crear un archivo con un tamaño dado en Linux?
- 9. Generar un enlace desde un servicio
- 10. ¿Cómo simulo un dado sesgado en python?
- 11. ¿Cómo puedo dividir un archivo en python?
- 12. Cómo generar un archivo .ics usando PHP para un rango de fecha y hora dado
- 13. ¿Puedo generar un archivo HPROF a voluntad?
- 14. ¿Cómo generar un archivo .po?
- 15. ¿Cómo puedo registrar un enlace?
- 16. Cómo generar un enlace de página emergente en ASP.NET MVC
- 17. ¿Cómo generar un número aleatorio de punto decimal dado entre 2 números en Python?
- 18. Descarga de un Torrent con libtorrent-pitón
- 19. python: Importación de un archivo que es un enlace simbólico
- 20. ¿Cómo puedo encontrar un nombre de archivo, dado un puntero ARCHIVO?
- 21. ¿Cómo puedo generar rangos de fechas convenientes basados en un NSDate dado?
- 22. ¿Cómo generar un archivo WSDL?
- 23. Rieles: dado un bloque de texto, vínculos de enlace automático
- 24. ¿Cómo eliminar un enlace simbólico en python?
- 25. ¿Cómo puedo generar XML desde XMLBuilder usando un archivo .xml.builder?
- 26. Generar un WSDL a partir de un archivo XSD
- 27. Rails 3: ¿Cómo puedo generar un archivo comprimido bajo pedido?
- 28. Modificando un enlace simbólico en python
- 29. ¿Cómo puedo generar un GUID en Vim?
- 30. ¿Cómo se genera un indexador de archivos torrent?
Hay una enfoque para python3: instalación de pip magneturi; importación de magneturi; magneturi.from_torrent_file ('xx.torrent') –