mkdir random_story cd random_story npm install request npm install htmlparser
var fs = require('fs');
var request = require('request');
var htmlparser = require('htmlparser');
var configFilename = './rss_feeds.txt';
//确保包含RSS订阅列表的文件存在
function checkForRSSFile() {
fs.exists(configFilename, function(exists) {
if (!exists) {
return next(new Error('Missing RSS file: ' + configFilename));
}
next(null, configFilename);
});
}
//读取并解析包含RSS订阅列表的文件
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]);
});
}
//向预定源发送HTTP请求以获取数据
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 random_story.js
let fs = require('fs');
let request = require('request');
let htmlparser = require('htmlparser');
let configFilename = './rss_feeds.txt';
function checkForRSSFile() {
return new Promise((resolve, reject) => {
fs.exists(configFilename, (exists) => {
if (!exists) {
reject(new Error('Missing RSS file: ' + configFilename));
}
resolve();
});
});
}
function readRSSFile(configFilename) {
return new Promise((resolve, reject) => {
fs.readFile(configFilename, (err, feedList) => {
if (err) {
reject(err);
}
feedList = feedList.toString().replace(/^\s+|\s+$/g, '').split("\n");
let random = Math.floor(Math.random()*feedList.length);
resolve(feedList[random]);
});
});
}
function downloadRSSFeed(feedUrl) {
return new Promise((resolve, reject) => {
request({uri: feedUrl}, (err, res, body) => {
if (err) {
reject(err);
}
if (res.statusCode !== 200) {
reject(new Error('Abnormal response status code'));
}
resolve(body);
});
});
}
function parseRSSFeed(rss) {
let handler = new htmlparser.RssHandler();
let parser = new htmlparser.Parser(handler);
parser.parseComplete(rss);
if (!handler.dom.items.length) {
throw new Error('No RSS items found.');
}
let item = handler.dom.items.shift();
console.log(item.title);
console.log(item.link);
}
async function getRSSFeed() {
await checkForRSSFile();
let url = await readRSSFile(configFilename);
let rss = await downloadRSSFeed(url);
return rss;
}
getRSSFeed().then(rss => parseRSSFeed(rss), e => console.log(e));
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有