2015-03-29 2 views
0

J'essaie d'obtenir des liens magnétiques à partir d'un fichier torrent, selon libtorrent doc avec ce code:pourquoi l'aimant généré par libtorrent n'est pas valide?

info = lt.torrent_info(t) # t is a torrent file 
return(lt.make_magnet_uri(info)) 

Il renvoie un lien:

magnet:?xt=urn:btih:YC5BHBHYDFYZOJRMD5BYGA2QRRXVRGAM&dn=BTshare.ogv 

Mais ce lien ne fonctionne pas. (Notez qu'il n'y a pas de problème avec le fichier torrent). J'ai donc essayé de récupérer le lien magnétique de ce torrent avec la transmission. Il se trouve que le résultat est différent:

magnet:?xt=urn:btih:c0ba1384f8197197262c1f438303508c6f58980c&dn=BTshare.ogv 

Je pense qu'il ya un problème avec la façon dont je l'utilise python-libtorrent pour obtenir le lien de l'aimant. Est-ce que quelqu'un a un exemple de travail?

Cordialement.

+0

Récupérer ou créer un lien aimant? Parce que si vous récupérez un lien magnétique avec Transmission, je suppose que le tracker remplace les serveurs en amont par les leurs, affectant ainsi le résultat final de l'URI. – Torxed

+0

créer un lien magnétique. Désolé pour mon mauvais anglais. –

Répondre

2

Le format de lien d'aimant d'origine avait l'information-hash être codé en base32, pour l'espace. À un moment nous (libtorrent et utorrent) avons décidé qu'il serait préférable d'utiliser hex (base16 encoded) pour plus de simplicité. C'était probablement autour de 2009 ou 2010 iirc. Cependant, afin de faciliter la transition, nous avons supporté en lisant les deux liens de style base32 et base16 (il est facile de faire la différence), mais générant toujours la base32 pour la rétrocompatibilité. Libtorrent est passé à la génération de liens aimantés base16 début 2013 (libtorrent 1.0).

Les chances sont que vous utilisez une très ancienne version de libtorrent.

+0

J'utilise python3-libtorrent 0.16 et libtorrent-rasterbar 0.16 aussi (paquets debian jessie) –

1

Si votre question est "quelqu'un a-t-il un exemple de travail?", Alors il y a beaucoup d'exemples de travail. Précédente question connexe sur ce même site:

Given a .torrent file how do I generate a magnet link in python?

Le lien qui fonctionne et le lien que votre code créé ne diffèrent que dans le contenu de hachage YC5BHBHYDFYZOJRMD5BYGA2QRRXVRGAM vs c0ba1384f8197197262c1f438303508c6f58980c donc oui, vous l'aurez deviné droite, il y a quelque chose avec l'utilisation de votre lib pour extraire la valeur de hachage. (J'ai échoué à voir dans votre lien comment utiliser l'encapsuleur Python autour de l'interface C qu'ils documentaient). Si vous n'êtes pas obligé d'utiliser libtorrent, vous pouvez essayer beaucoup d'autres bibliothèques.

+0

J'avais vu ce lien. Mais j'ai besoin de comprendre pourquoi ça ne marche pas avec libtorrent (python-bindings). –

+0

En outre, ces liens ne sont pas valides (selon le convertisseur en ligne magnet2torrent.me) –

1

Même si je suis surpris de voir que libtorrent est obsolète sur debian jessie, j'ai trouvé le problème grâce à vos réponses. Réservoirs!

Voici le code maintenant, doit être amélioré:

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)