我正试图通过node
的请求模块获取我的RSS数据源(xml文件),如下所示:
var fs = require('fs')
, request = require('request')
, feed = 'http://www.benchmark.pl/rss/aktualnosci-pliki.xml';
request.get(feed, function(error, response, body) {
if (!error && response.statusCode == 200) {
var csv = body;
fs.createReadStream(body)
.on('error', function (error) {
console.error(error);
});
}
});
但我得到了错误:
{ [Error: ENAMETOOLONG, open '<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>
....
</rss>
在这种情况下我该怎么办?
您正试图使用HTTP请求的主体(即XML文件的内容)作为文件名,从磁盘上的文件创建ReadableStream。
你的意思是:
request.get(feed, function(error, response) {
if (!error && response.statusCode == 200) {
response.pipe(someXmlParserStream);
}
});
它利用了response
对象已经是Readable流的事实,您可以通过管道连接到另一个流。
如果你不想使用流,而是缓冲整个主体,那么request
可以为你做到这一点:
request.get(feed, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
这是我发现的问题的解决方案之一:
var FeedParser = require('feedparser')
,request = require('request');
request('http://www.benchmark.pl/rss/aktualnosci-pliki.xml')
.pipe(new FeedParser())
.on('error', function(error) {
// always handle errors
//
})
.on('meta', function (meta) {
console.log('===== %s =====', meta.title);
})
.on('readable', function() {
var stream = this, item;
while (item = stream.read()) {
console.log('Got article: %s', item.title || item.description);
}
});