2012-03-02 11 views
12

node.jsアプリ内で基本的にwgetを実行できますか?サイトをクロールして特定のファイルをダウンロードするスクリプトを作成したいのですが、ファイルを移動するリンクのhrefがかなり頻繁に変更されます。だから、私はそれを行うのが最も簡単な方法は、リンクのhrefを見つけて、それからwgetを実行することだと考えました。node.jsでwgetの機能をどのように複製できますか?

ありがとうございます!

+1

ことはできませんall_child_process_exec_command_options_callback)。 – maerics

答えて

8

あなたがchild_processesを使用して外部コマンドを実行することができます。

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

これは質問に答えますが、なぜあなたはリクエストを使用できるのですか? – dovidweisz

2

Uはただのwgetを使用することができます。

しかし今後の参考のために
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

、私はそれが、この簡単にそのファイルフェッチすることができた、requestをお勧めします:

var request = require("request"); 

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

をそれはいくつかのサードパーティ製のものよりも少し冗長かもしれませんが、ノードのコアHTTPモジュールは、あなたがこのために使用することができHTTP clientのために用意されています

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

私はこの回答がコアのNodeライブラリのみを利用するのが好きです。良い仕事 – nic

+0

依存関係を追加することなく、より少ない労力を求めているなら、組み込みの 'url'モジュールの' parse'メソッドを使うと、 'options'をビルドする代わりに使うことができるオブジェクトが得られます。 (すでに文字列URIが渡されていると仮定します)。 – Tersosauros

1

あなたはnode-wgetを使用することができます。 'wgetの' 例で 作品http://nodejs.org/docs/latest/api/all.html#([ `` child_process.exec(CMD)]のためのNode.jsのマニュアルを参照してください

関連する問題