0

現在、Yahoo 天気 XML ファイルを取得するために使用している次のコード スニペットがあります。

// This script requires request libraries.
// npm install request

var fs = require('fs');
var woeid_array = fs.readFileSync('woeid.txt').toString().split("\n");
var grabWeatherFiles = function (array) {
//var http = require('http');
//var fs = require('fs');

array.forEach( 
function(element)  {
    var http = require('http');
    var file_path = 'xml/' + element + '.xml';
    console.log(file_path);
    var file = fs.createWriteStream(file_path);
    var request = http.get('http://weather.yahooapis.com/forecastrss?w=' + element, function(response) {
        response.pipe(file);

    });

});

};
grabWeatherFiles( woeid_array );

このコード スニペットは、XML ファイルのダウンロードに成功しています。ただし、ファイルを読み取って文字列内の XML データを取得して解析できるようにしようとすると、ファイルは 0 になります。node.js はこれを正しく記述していませんか? これは、私の Mac と c9.io の両方で発生しました。どんなヒントも素敵です。私はこの部分でかなり立ち往生しています。

4

2 に答える 2

0

これらは私が仕事をするために使用した手順であり、うまくいきます。*.jsファイルが存在するのと同じレベルに xml という名前のフォルダーを作成しました。http://woeid.rosselliot.co.nz/lookup/londonwoeids.txtからいくつかの有効な woeid を含むファイルを作成しました

使用するパス定義を使用してコードの修正バージョンを作成し__dirname(その有用な説明: node.js の __dirname と ./ の違いは何ですか? )、コードを次の場所に配置しますsample.js

// This script requires request libraries.
// npm install request

var fs = require('fs');
var woeid_array = fs.readFileSync(__dirname + '/woeids.txt').toString().split("\n");
var grabWeatherFiles = function (array) {
    array.forEach( 
    function(element)  {
        var http = require('http');
        var file_path = __dirname + '/xml/' + element + '.xml';
        console.log(file_path);
        var file = fs.createWriteStream(file_path);
        var request = http.get('http://weather.yahooapis.com/forecastrss?w=' + element, function(response) {
            response.pipe(file);

        });

    });
};
grabWeatherFiles( woeid_array );

ターミナルで実行すると、フォルダーに適切なxmlファイルnode sample.jsが入力されました。xml

于 2013-07-19T14:43:44.040 に答える
0

間違った機能を使用しています。fs.writeFileは、少なくとも 3 つの引数filenameと. パイプすることはできません。ファイル名にデータを書き込み、完了したらコールバックを実行するだけです。datacallback

必要なのは、パスを取るfs.createWriteStreamです(追加のオプションは別として)。これにより、応答にパイプできる書き込み可能なストリームが作成されます。

于 2013-07-18T04:03:20.793 に答える