在Scala中使用磁体uri下载文件

时间:2012-12-11 04:19:48

标签: scala bittorrent magnet-uri

我想在我的Scala应用程序中包含一些bittorrent功能。如果我能够方便使用,我想专门使用磁铁链接。问题是我想使用像ttorrent这样的预建库。但是,我发现这些库不使用磁链接,他们使用metainfo或torrent文件本身。

所以我认为我的第一步是采用磁力链接并自己构建一个metainfo对象。我非常了解磁铁链接的构成,可以将其解析为参数。 我只是不太确定如何使用磁铁参数。我不知道如何处理它们。

这里只是我在PB上找到的测试磁铁链接:

magnet:?xt=urn:btih:ad11eb1a0aeed57116225fb341dc61883c22aeba&dn=Rise.of.the.Guardians.2012.TS.NEW.SOURCE.x264.AAC-UNiQUE&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

解析后我得到:

xt=urn:btih:ad11eb1a0aeed57116225fb341dc61883c22aeba
dn=Rise.of.the.Guardians.2012.TS.NEW.SOURCE.x264.AAC-UNiQUE
tr=udp://tracker.openbittorrent.com:80
tr=udp://tracker.publicbt.com:80
tr=udp://tracker.istole.it:6969
tr=udp://tracker.ccc.de:80

足够简单。现在我没有太多使用哈希,但我很确定我无法直接获得任何信息。我唯一的猜测是,我可能需要联系其中一个跟踪器来获取metainfo。我不确定。

[fyi] Torrenting仅用于合法共享,在应用用户之间共享应用数据和应用文件。

1 个答案:

答案 0 :(得分:1)

根据客户需要的infohash检索元数据

  1. 能够找到同伴,在这种情况下via UDP trackers (BEP 15) *
  2. 支持extension protocol (BEP 10)
  3. 支持metadata exchange (BEP 9)通过扩展协议
  4. 根据其自述文件,ttorrent没有实施BEP 9和10,因此无法使用磁力链接。

    [*] HTTP跟踪器和DHT是其他来源,需要自己的协议,但与此示例无关