- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个从两个 Web 服务器请求数据的 Node.JS 服务器:bbc.co.uk和 sky.com .然后解析 RSS 提要,用户会看到两个列表:来自 BBC 和来自天空。
这是代码。
var feed = require('feed-read');
var http = require('http');
var async = require('async');
var request = require('request');
var LIMIT = 10;
var UNABLE_TO_CONNECT = "Unable to connect.";
var BBC_URL = 'http://feeds.bbci.co.uk/news/rss.xml';
var SKY_URL = 'http://news.sky.com/feeds/rss/home.xml';
var server = http.createServer(onRequest);
server.listen(9000);
function onRequest(req, res) {
res.writeHead(200, {
'Content-Type' : 'text/html; charset=utf-8'
});
async.parallel([ function(callback) {
feed(BBC_URL, onRssFetched);
// TODO: where to call callback()?
}, function(callback) {
feed(SKY_URL, onRssFetched);
// TODO: where to call callback()?
} ], function done(err, results) {
console.log("Done");
if (err) {
throw err;
}
});
}
function onRssFetched(err, articles) {
console.log("RSS fetched");
var html = [];
if (err) {
html.push("<p>", UNABLE_TO_CONNECT = "</p>");
} else {
html.push("<ol>");
var i = 0;
articles.forEach(function(entry) {
if (i == LIMIT) {
return;
}
html.push("<li><a href='" + entry.link + "'>" + entry.title
+ "</a></li>");
i++;
});
}
console.log(html.join(""));
}
现在我不知道如何将结果添加到网页中。如果我在调用 feed
方法后立即调用 callback()
,callback()
将被执行,而不会等到 feed
已经完成了它的工作。另一方面,我无法将 callback
传递给 feed
。也许方法不对,我需要一些其他模块来进行 RSS 解析。
最佳答案
@Maksim 我知道你最初的问题包括 async 模块,但提出一个替代方案:
为什么不 流式传输 每篇文章 到客户端,而不是等待 所有 RSS 提要在发送响应之前返回...?
通过使用 async.parallel 你告诉 Node :
"wait until we have a response from all these news services
and only then (combine the articles into) a single response to the client ..."
这会在您等待所有响应(来自 RSS 新闻服务)时为每个连接的客户端耗尽内存……浪费。
所以我在没有诉诸异步的情况下写下了我的答案。
而且,不是等待 ages(async 将所有提要合并为一个),
第一个 rss 提要一返回,客户就会看到新闻!
var feed = require('feed-read'), // require the feed-read module
http = require("http"),
urls = [
"http://feeds.bbci.co.uk/news/rss.xml",
"http://news.sky.com/feeds/rss/home.xml",
"http://www.techmeme.com/feed.xml"
]; // Example RSS Feeds
http.createServer(function (req, res) {
// send basic http headers to client
res.writeHead(200, {
"Content-Type": "text/html",
"Transfer-Encoding": "chunked"
});
// setup simple html page:
res.write("<html>\n<head>\n<title>RSS Feeds</title>\n</head>\n<body>");
// loop through our list of RSS feed urls
for (var j = 0; j < urls.length; j++) {
// fetch rss feed for the url:
feed(urls[j], function(err, articles) {
// loop through the list of articles returned
for (var i = 0; i < articles.length; i++) {
// stream article title (and what ever else you want) to client
res.write("<h3>"+articles[i].title +"</h3>");
// check we have reached the end of our list of articles & urls
if( i === articles.length-1 && j === urls.length-1) {
res.end("</body>\n</html>"); // end http response
} // else still have rss urls to check
} // end inner for loop
}); // end call to feed (feed-read) method
} // end urls for loop
}).listen(9000);
主要优势:
For even more detail/notes on this solution
see: https://github.com/nelsonic/node-parse-rss
关于javascript - 从 Node.JS 中的两个网站请求 RSS 提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177259/
我正在为现有网站创建 RSS,我只是想知道是否有推荐数量的提要项目显示在 RSS 提要中? 可以输出我想要的任意数量的提要吗?如果需要,一次像 50 个提要一样吗? RSS 的目的是让网站上的订阅者随
从 Windows 命令行,我希望能够发布到 RSS 提要。我想象这样的事情: rsspub @builds "Build completed without errors." 然后,有人可以访问我的
每当我在 RSS 提要中看到图像时,它们都嵌入在 CDATA 中,而不是被标签包围。 在我的提要中,我希望图像不这样做就显示出来。 无论是在浏览器中,还是在提要阅读器 (Bloglines) 中或通过
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
RSS 项目内的描述标签是否有长度限制或最大大小? 此外,此标记是否可以容纳 HTML 标记? 我将生成 和来自同一源 HTML,还想知道 是否标签容纳 HTML。 最佳答案 据我所知,没有长度限制
我正在为我正在开发的网站创建 RSS 提要。我阅读了关于 RSS 的内容,它非常简单:它是一个特殊格式的 XML 文件。 但是,我找不到有关以下两个问题的信息 RSS 提要中的条目/项目数量是否有限制
对于我订阅的所有 RSS 源,我使用 Google Reader ,我喜欢。不过,我确实有几个特定的 RSS 提要,希望在更新后立即收到通知(例如,我希望尽快监控和响应的论坛的 RSS 提要)。
我了解如何制作 RSS 文件。它的 XML 非常简单。但是我需要什么特殊的更新才能分发,还是我只需要定期更新文件而其余的会自行处理?我在 rss 上找到的所有内容都在谈论它的作用,但并没有谈论它是如何
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
是否有任何网站/服务可以让我向任何网站添加 RSS 订阅? 这是我工作的公司。我们有一个显示公司相关新闻的网站。这些新闻由外部机构提供,并自动更新到我们的数据库中。我们的网站选择随机/新消息并显示它们
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我想知道在您的应用程序中使用其他人的 RSS 提要(例如 BBC RSS 提要)是否存在任何法律问题? 最佳答案 你真的应该问律师。但是,我在 out-law.com 上找到了这个: Using a
我们有一个提供一些 RSS 提要的站点,我们想知道有多少人订阅了每个提要,而不使用像 FeedBurner 这样的系统来为他们提供服务。 解决这个问题的原始方法基本上是记录请求,然后获取请求每个提要的
我有一个系统可以获取几百个 RSS 提要。目前,它们的刷新周期为 10 分钟,但我最好让它更快。以近实时/推送间隔获取 RSS 源的策略是什么? 我遇到的一些解决方案: 1分钟取一次;如果没有变化,则
我需要在数据库中存储来自多个 RSS 提要的新项目。我想使用每个项目的 GUID 标记来确定它是否已经存在于数据库中。 见 W3C specification : guid stands for gl
我正在构建一个在线 Rss 阅读器。我希望能够与文章标题和描述一起显示图像。 我正在使用谷歌提要 API 从 CNN ( http://rss.cnn.com/rss/edition.rss ) 读取
我订阅了许多 RSS 提要,主要来自我自己的时区(英国:目前是 GMT+1,又名 BST)。不过我也对新西兰的新闻感兴趣(目前为 GMT+12)。 我的问题是由于我沉迷于需要将未读计数保持在或接近于零
首先,为什么我问:现在 StackOverflow 上的声望点具有真正的值(value)(您可以通过提供赏金将它们花在该死的好答案上)我想监视我可能能够回答的问题并扑向它们! (此外,其他人实时回答我
我想基于我使用的Tumblr标签创建一个RSS feed。我想将的部分提交给博客联合服务。我必须向博客联合组织提供一个RSS feed。但是我不希望所有帖子都出现在那。有什么办法可以做这样的事情吗?
当我们用 rss 阅读器获取 rss 时,阅读器是标记已读/未读状态还是将此类信息发送回服务器? 阅读完一条消息后,我转向另一个 RSS 阅读器,我会收到所有标记为未读的 RSS 记录吗? 最佳答案
我是一名优秀的程序员,十分优秀!