cnodejs社区是国内火热的nodejs交流和学习的地方,作为新生级菜鸟,经常上社区浏览精华版帖子。cnodejs提供社区的api,但是个人想自定义一个获取全部帖子相关信息的api,马上就着手coding。
- 代码详细信息如下:
const request=require('request');
const cheerio=require('cheerio');
const fs=require('fs');
const path=require('path');
const express=require('express');
const app=express();
const url="https://cnodejs.org/?tab=all&page=";
const pagesNum=5;
let allContents=new Array();
for(let i=1;i<=pagesNum;i++){
request(url+i,(error,response,body)=>{
if(error && response.statusCode==200){
console.log(error);
}
accepteData(body);
});
}
function translate($,strings){
let Obj=$(strings).toArray();
return Obj;
}
function accepteData(data){
let $=cheerio.load(data);
let user=translate($,'.user_avatar img');
for(let i=0;i<user.length;i++){
let content={
"user":{
"name":user[i].attribs.title,
"avatar":user[i].attribs.src
},
"title":translate($,'.topic_title_wrapper a')[i].attribs.title,
"article":'https://cnodejs.org'+translate($,'.topic_title_wrapper a')[i].attribs.href,
"types":$('.topic_title_wrapper span')[i]?translate($,'.topic_title_wrapper span')[i].children[0].data : "null",
"count":{
"reply":translate($,'.count_of_replies')[i].children[0].data.trim(),
"click":translate($,'.count_of_visits')[i].children[0].data.trim()
},
"last_active_time":$('.last_time span')[i]?translate($,'.last_time span')[i].children[0].data :"null",
};
allContents.push(content);
}
}
app.get('/api/all',(req,res)=>{
res.json(allContents);
});
app.listen(3000,()=>{
console.log('listening at 3000');
});
- 复制上述代码并保存在本地的文件中,(前提是已经安装nodejs并且已经安装了上述源码中的依赖文件);可以使用以下命令安装依赖文件:
npm install express cheerio request --save --dev
- 等待安装成功之后,在源码的当前目录,运行命令:
node test.js #(按照你自己保存的文件名来运行)
- 然后在浏览器地址栏输入http://localhost:3000/api/all;可以获取到API如下图所示:
- 获取cnode社区自定义api已经成功了。