最近研究了一下磁力鏈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鏈接還算支持比較全面,有需要的可以下載。
