最近研究了一下磁力链magnet和BT种子torrent文件之间的相互转换。其实通过torrent文件获得磁力链实现起来比较简单,但反过来并非是一个可逆的过程,磁力链转BT种子理论上来说是不可能实现的。
一个可以提供下载的磁力链,比如:magnet:?xt=urn:btih:51df6808c739174c8f264701ba94460c5238d6ce,只包含了一个有效信息,那就是种子的hash值,其它可选部分省略了。这里没有种子内部包含的文件列表,磁力链没有BT种子构成的所有基本需要。
那应该怎么转换成BT种子呢?
实际上通过一些下载工具下载这些种子的时候,下载工具会到内部服务器的种子库里去查找,通过hash值,可以搜索出位于该服务器上的BT种子位置,然后下载这个种子。也就是说,用某一个下载工具通过磁力链magnet下载torrent文件,并不是每次都一定能下载成功。
既然原理清楚了,我们大可以自己编写一个磁力链到BT种子的转换工具,但需要一些公开的BT种子库的接口?
目前的可用接口:
磁力链:
magnet:?xt=urn:btih:f8181597b51c157fb470e5ee236e364c6fbc2af2
btbox:
http://bt.box.n0808.com/F8/F2/F8181597B51C157FB470E5EE236E364C6FBC2AF2.torrent
构造方法:取磁力链的hash部分,全部转换大写, 格式化如下http://bt.box.n0808.com/hash最前面两位/hash最后面两位/hash.torrent,注意大写!
BitComet:
http://torrent-cache.bitcomet.org:36869/get_torrent?info_hash=F8181597B51C157FB470E5EE236E364C6FBC2AF2&size=226920869&key=BC2DAAD2A0F79E0A4EEB831CBA5BD7DADB38D146
构造方法:info_hash字段是已经知道的,但是key字段的计算方法暂时还不知道,有一个人分析了算法,并封装了一个COM,感兴趣的可以看看去。http://www.cnblogs.com/UMU618/articles/2568579.html
Vuze的种子库:
http://magnet.vuze.com/magnetLookup?hash=7AMBLF5VDQKX7NDQ4XXCG3RWJRX3YKXS
构造方法:7AMBLF5VDQKX7NDQ4XXCG3RWJRX3YKXS是f8181597b51c157fb470e5ee236e364c6fbc2af2的Base32编码。
PS:如果有人发现新的可以的BT种子库,请通知我一声!
根据以上提供的BT库,我编写了一个magnet转torrent文件的工具,集成了以上提到的接口。经过我个人测试,能解析成功的magnet链接还算支持比较全面,有需要的可以下载。