標籤:logs 小程式 lam download blog tle items miss 擷取
為了示範如何?串列流程式控制制,我們準備做個小程式,讓它從一個隨機播放的RSS預定源中擷取一片標題和URL,並顯示出來。
RSS預定源列表放在rss_feeds.txt檔案中,內容如下:
http://feed.cnblogs.com/blog/u/376823/rsshttp://lambda-the-ultimate.org/rss.xml
運行程式前我們需要安裝兩個模組:request模組是個經過簡化的HTTP用戶端,你可以用它擷取RSS資料。htmlparser模組能把原始的RSS資料轉換成JavaScript資料結構。
使用如下命令:
npm install requestnpm install htmlparser
代碼如下:
var fs = require(‘fs‘);var request = require(‘request‘);var htmlparser = require(‘htmlparser‘);var configFilename = ‘./rss_feeds.txt‘;function checkForRSSFile () { fs.exists(configFilename, function (exists) { if (!exists) return next(new Error(‘Missing RSS file: ‘ + configFilename)); next(null, configFilename); });}function readRSSFile (configFilename) { fs.readFile(configFilename, function(err, feedList) { if (err) return next(err); feedList = feedList .toString() .replace(/~\s+|\s+$/g, ‘‘) .split("\n"); var random = Math.floor(Math.random() * feedList.length); next(null, feedList[random]); });}function downloadRSSFeed (feedUrl) { request({uri: feedUrl}, function(err, res, body) { if (err) return next(err); if (res.statusCode != 200) return next(new Error(‘Abnormal response status code‘)); next(null, body); });}function parseRSSFeed (rss) { var handler = new htmlparser.RssHandler(); var parser = new htmlparser.Parser(handler); parser.parseComplete(rss); if (!handler.dom.items.length) return next(new Error(‘No RSS items found‘)); var item = handler.dom.items.shift(); console.log(item.title); console.log(item.link);}var tasks = [ checkForRSSFile, readRSSFile, downloadRSSFeed, parseRSSFeed ];function next(err, result) { if (err) throw err; var currentTask = tasks.shift(); if (currentTask) { currentTask(result); }}next();
Node.js 實現序列化流程式控制制