Node.js践行者

vue博客实战---实现后台进程定时爬取头条文章

2019-08-13  本文已影响0人  逆月翎

欢迎关注我的个人公众号:周先生自留地,简书文章不定时更新。

通过前面几篇的沉淀,博客的基本功能其实已经全部实现了。但是前期没有用户量,博客的文章显得太过单薄,所以本篇是临时新增在后端实现一个定时进程,定时爬取第三方精选文章,比如微信精选之类的文章。

首先打开后端项目,首先在项目根目录创建文件background_task.js用于调取第三方API以及业务逻辑的处理,在dao层创建文件background_task.js用于数据库业务逻辑处理。然后进入app.js,在顶部引入background_task.js文件:

var  backgroudTask =require('./backgroud_task');

然后在底部封装startBackgroundTask()进行定时任务的调用:

app.startBackgroundTask =function(){    backgroudTask.start();}

进入bin/www文件,调用app.startBackgroundTask();

进入项目根目录的background_task文件,书写进程启动方法和停止方法,启动的时候调用runOnce方法,在runOnce方法中实现爬取数据的业务逻辑。进程每15分钟爬取一次:

接下来调用获取新闻头条的接口在路由层我们书写方法get_news()直接调用dao层方法,然后在runOnce()中调用get_news(),将所有业务逻辑在dao层实现:

进入dao层,书写get_news()方法。首先调用第三方API获取新闻数据,发起请求之前封装好了baseRequest()方法:

接下来调取第三方API获取新闻数据:

        我们可以重启服务看下控制台输出:

可以看到返回的每一条数据都有一个唯一的uniquekey,我们可以根据uniquekey参数判断数据库是否存在本篇文章来进行筛选重复数据:

根据is_exist参数判断本篇文章是否存在于数据库,如果不存在则保存到数据库:

我们插入文章数据时status设置为2,因为我们自己发表文章status设置为1。这里区分状态码是由于自己上传的文章与爬取过来的文章参数不一致,需要对前端界面展示及后端接口进行适配。我们可以查看数据库是否正常插入数据:

接下来我们进入获取文章列表接口,参数多返回url以及uniquekey

后台管理文章列表只能返回当前用户status1的文章,参数多返回url以及uniquekey

接下来回到vue项目,在首页点击阅读全文的时候对status1则正常进入文章详情界面,如果文章status2则直接跳转到对应文章的url

        到这里我们就成功实现一个进程实时同步第三方新闻头条文章。并且对前端也做了适当适配,丰富了首页板块内容。我们最后可以看下目前的首页效果:

如果喜欢我的文章,欢迎关注我的个人公众号:周先生自留地

上一篇下一篇

猜你喜欢

热点阅读