使用Node.JS下载Torrent

8

我想知道是否有人有使用NodeJS下载torrent的示例?基本上,我有一个种子的RSS Feed,我会遍历并获取种子文件的url,然后想在服务器上启动种子的下载。

我已经成功解析和循环遍历了RSS,但是我尝试了一些npm包,但它们要么崩溃,要么不稳定。如果有人有任何建议、示例或其他任何东西...我将非常感激。谢谢。

router.get('/', function(req, res) {
  var options = {};
  parser.parseURL('rss feed here', options, function(err, articles) {
    var i = 0;
    var torrent;
    for (var title in articles.items) {
      console.log(articles.items[i]['url']);
      //download torrent here
      i++;
    }
  });
});


2
比特流协议是开放的,而且并不复杂。如果现有的软件包不好用,那就自己写一个更好的吧 :) - Touffy
有许多不同的方式可以与外部应用程序进行接口,例如使用Node.js封装C库的包装器进行接口,或者使用本地的Node.js种子实现。 - the8472
2
@Touffy,这提供了非常少的方向... - Brandon
为什么你期望有一个指南?要么你自己实现(通过阅读规范),要么你寻找现有的库 - 这将是在SO上寻求推荐库,这是不符合主题的。 - the8472
1
@the8472 在我的原始帖子或评论中,我从未要求或以任何方式期望指南。我不期望你或这个社区提供任何东西。然而,我希望有人能够提供比“去谷歌一下”更多的方向。我得到了我想要的方向吗?没有。这对我有影响吗?没有。我对你那相当讨厌的回复我的问题有问题吗?绝对有。我有学习的愿望。但信不信由你,不是每个人都会像你一样学习。 - Brandon
显示剩余2条评论
2个回答

10
你可以使用 node-torrent 来完成这个任务。
然后,要下载一个 torrent:
var Client = require('node-torrent');
var client = new Client({logLevel: 'DEBUG'});
var torrent = client.addTorrent('a.torrent');

// when the torrent completes, move it's files to another area
torrent.on('complete', function() {
    console.log('complete!');
    torrent.files.forEach(function(file) {
        var newPath = '/new/path/' + file.path;
        fs.rename(file.path, newPath);
        // while still seeding need to make sure file.path points to the right place
        file.path = newPath;
    });
});

如果想要更多的控制,可以使用 transmission-dæmon 并通过其 xml-rpc 协议进行控制。有一个名为 transmission 的节点模块可以完成这项工作!例如:

var Transmission = require('./')

var transmission = new Transmission({
    port : 9091,
    host : '127.0.0.1'
});

transmission.addUrl('my.torrent', {
    "download-dir" : "/home/torrents"
}, function(err, result) {
    if (err) {
        return console.log(err);
    }
    var id = result.id;
    console.log('Just added a new torrent.');
    console.log('Torrent ID: ' + id);
    getTorrent(id);
});

嘿,当我从模块添加种子文件时,“transmission-daemon” UI在端口9091上显示“权限被拒绝”的错误,并且下载会立即停止。我已经尝试了你在回答中提供的transmission示例。你有任何关于此的想法吗? - Lalit Goswami
这是由于传输配置而不是给定的代码。我遇到过这个问题很多次了。尝试更改您文件夹的权限或所有者。否则,您也可以更改传输运行的用户/组。 - Buzut
嘿...谢谢你的回复...问题解决了。问题是所有父文件夹都需要有+x权限,即/a/b/c/final,然后a、b和c应该有+x权限。再次感谢。 - Lalit Goswami
我无法让(node-transmission)模块正常工作。每次都会显示“SyntaxError: Unexpected token H in JSON at position 0”。有什么解决方法吗? - MR-4O4

3
如果您正在处理视频种子文件,可能会对Torrent Stream Server感兴趣。它是一种同时下载和流媒体播放视频的服务器,这样您就可以在完全下载之前观看视频。它基于torrent-stream库。
另一个有趣的项目是webtorrent。它是一款很好的种子库,在NodeJs和浏览器中均可使用,并支持流媒体。从我的经验来看,它在浏览器中的支持不是很好,但应该可以在NodeJS中完全使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接