实现获取cnode社区自定义api

2017-05-16  本文已影响0人  Evtion

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');
});
npm install express cheerio request  --save --dev
node test.js #(按照你自己保存的文件名来运行)
获取到json格式api
上一篇 下一篇

猜你喜欢

热点阅读