Сохранение потока Feedparser как JSON - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сохранить каждый элемент в ленте RSS в файл JSON для последующего чтения, и я использую feedparser .Когда я пытаюсь вставить каждый элемент в объект, который я сохраняю как JSON, я постепенно перезаписываю последний.Я пытался переместить функцию writeFeed() из области действия feedparser.on(), но это делает данные канала необъявленными.Есть ли что-то другое в обработке потока фидпарсера, который мне не хватает, или я упускаю что-то очевидное в цикле?

let req = request('https://travel.state.gov/_res/rss/TAsTWs.xml')
const feedparser = new FeedParser();

req.on('error', function (error) {
  // handle request errors
});

req.on('response', function (res) {
  var stream = this; // `this` is `req`, which is a stream

  if (res.statusCode !== 200) {
    this.emit('error', new Error('Bad status code'));
  }
  else {
    stream.pipe(feedparser);
  }
});

feedparser.on('error', function (error) {
  // handle errors
});

feedparser.on('readable', function () {

  var stream = this; // `this` is `feedparser`, which is a stream
  var meta = this.meta; // **NOTE** the "meta" is always available in the context of the feedparser instance
  var item;

  let feed = [];

  while (item = stream.read()) {
    feed.push({title: item.title});         
  }

  let jsonFeed = JSON.stringify(feed);

  function writeFeed(data) {
    fs.writeFile('savedFeed.json', JSON.stringify(data), 'utf8', function(error) {
      if(error) { 
        console.log('error: ' + err);
      } else {
        console.log('report: success');
      }
    });
  }

  writeFeed(jsonFeed);

});
...