2012-03-02 6 views
12

Bir node.js uygulamasının içinden esasen wget çalıştırmak mümkün mü? Bir siteyi tarar ve belirli bir dosyayı indiren bir betik olmasını isterdim, ancak dosyaya giden bağlantının 'u oldukça sık değişiyor. Bu yüzden, href linkini bulmanın en kolay yolunu buldum, sonra sadece bir wget yapın.Bir wget'in işlevselliğini node.js ile nasıl çoğaltabilirim?

Teşekkürler!

+1

['child_process.exec (cmd)'] için node.js belgelerine bakın (http://nodejs.org/docs/latest/api/all.html# all_child_process_exec_command_options_callback). – maerics

cevap

8

Sen child_processes kullanarak harici komutu çalıştırabilirsiniz:

http://nodejs.org/docs/latest/api/child_process.html#child_process_child_process_exec_command_options_callback

var util = require('util'), 
    exec = require('child_process').exec, 
    child, 
    url = 'url to file'; 

child = exec('wget ' + url, 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}); 
+2

Bu soruya cevap veriyor, ancak isteği kullanabildiğiniz zaman neden bunu yapardınız? – dovidweisz

2

U sadece wget kullanabilirsiniz.

olsa İleride
var exec = require('child_process').exec; 

child = exec("/path/to/wget http://some.domain/some.file", function (error, stdout, stderr) { 
if (error !== null) { 
    console.log("ERROR: " + error); 
} 
else { 
    console.log("YEAH IT WORKED"); 
} 
}); 
16

, ben bu kadar kolay bu dosyayı almaya yapar request öneriyoruz:

var request = require("request"); 

request(url, function(err, res, body) { 
    // Do funky stuff with body 
}); 
13

bazı üçüncü taraf şeyler biraz daha ayrıntılı olabilir de, Düğüm en HTTP modül bunun için kullanabilirsiniz bir HTTP client sağlamaktadır çekirdek:

var http = require('http'); 
var options = { 
    host: 'www.site2scrape.com', 
    port: 80, 
    path: '/page/scrape_me.html' 
    }; 
var req = http.get(options, function(response) { 
    // handle the response 
    var res_data = ''; 
    response.on('data', function(chunk) { 
    res_data += chunk; 
    }); 
    response.on('end', function() { 
    console.log(res_data); 
    }); 
}); 
req.on('error', function(err) { 
    console.log("Request error: " + err.message); 
}); 
+1

Bu cevabın sadece çekirdek Düğüm kitaplığını kullandığını beğeniyorum. İyi iş – nic

+0

Daha az iş arıyorsanız, bağımlılık eklemeden, yerleşik 'url 'modülünün' parse' yöntemini kullanarak,' options' yerine, kullanabileceğiniz bir nesne elde edersiniz. (Zaten ona aktarılacak bir dize URI'sı olduğunu varsayarsak). – Tersosauros

1

sen node-wget kullanabilirsiniz. 'wget' mümkün olmayan durumlarda çalışır.