ming

Ming

a about xiaoming story

Github

E:421543076@qq.com

Q:421543076

Node读取文件URL获取RSS数据

2018的主要目标就是学习Node,话说node应该是14年就开始听说过。15年就开始学习,断断续续,一直不得其解。 不说了,说多了都是泪😭

我们首先看一下功能需求

这里我们要而外用到2个包,request(简化的HTTP客户端)和htmlparser(把原始的RSS数据转换成JavaScript)

另外我们准备了一个rss_feeds.txt的文件,里面是RSS的URl

// rss_feeds.txt
https://www.zhihu.com/rss
http://www.toodaylab.com/feed

1、checkForRSSFile 检查文件存在

//fs.access 检查一个文件是否存在,且不操作
//如果读取不到文件,看下文件路径是否正确,fs默认从根目录开始读取文件
fs.access(configFilename, function(exists) {
    if (!exists)
      return next(new Error('Missing RSS file: ' + configFilename));

    next(null, configFilename);
  });

2、readRSSFile 读取文件

// fs.readFile读取文件,返回Buffter
fs.readFile(configFilename, function(err, feedList) {
    if (err) return next(err);

    //把buffter转换成字符串后替换前后的空格并"\n"拆分成数组
    feedList = feedList
               .toString()
               .replace(/^\s+|\s+$/g, '')
               .split("\n");
    //随机获取小于等于数组长度的数
    var random = Math.floor(Math.random()*feedList.length);
    next(null, feedList[random]);
  });

3、downloadRSSFeed 获取Rss数据

//request 请求url,获取url文件内容
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);
  });

4、parseRSSFeed 转换数据

  // 把RSS转换成javaScript数据
  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();

总结:

fs.access检查文件应用,fs.readFile读取文件 request发送请求获取数据 htmlparser对HTML,XML页面的解析