使用Express开发小说API接口服务1.0(二)

线上访问地址api.langpz.com/

之前完成了首页和搜索的接口,现在就开始写剩下的接口。

获取小说源

因为追书神器正版源是收费加密的,所以只能使用盗版源,所以要封装一个获取小说源的接口。 修改app.js 文件路由中间件配置,增加一个路由

let sourceRouter = require('./routes/source');
app.use('/source', sourceRouter);
复制代码

在routes下面新建 source.js

let express = require('express');
let request = require('request');
let common = require('../common/common.json'); // 引用公共文件
let router = express.Router();/** 获取小说源返回盗版源和正版源param id {String} 是首页和搜索返回接口 books[i].idparam n {Number || String}  使用第几个源,可以不用传参默认 1http://api.zhuishushenqi.com/atoc?view=summary&book=${bookID}
*/
router.get('/', function (req, res, next) {if (!req.query.id) {res.send(JSON.stringify({ "flag": 0, "msg": "请传入ID..." }));}// req.query.id 编码转义let id = encodeURI(req.query.id);request.get(`${common.API}/atoc?view=summary&book=${id}`, function (err, response, body){if(err){res.send(JSON.stringify({ "flag": 0, "msg": "请求出错了..." }));}// 解析返回的数据body = JSON.parse(body);// 判断是否返回内容if (body.length == 0){res.send(JSON.stringify({ "flag": 0, "msg": "没有获取到小说源,换个小说看吧" }));}// 第一个源是正版源,是收费加密的,所以默认选中第二个源let n = parseInt(req.query.n);if (isNaN(n) || n == 0){n = 1;}// 判断n是否大于源数据的长度if (n >= body.length){res.send(JSON.stringify({ "flag": 0, "msg": "n的参数值不正确,没有那个源" }));}else{res.send(JSON.stringify({ "flag": 1, "books": body[n], "msg": "OK" }));}});
});module.exports = router;
复制代码

访问http://localhost:3000/source/?id=50864bf69dacd30e3a000014&n=3 就可以看到返回第四个源的数据。

小说文章列表

修改app.js 文件路由中间件配置,增加一个路由

let chapterRouter = require('./routes/chapter');
app.use('/chapter', chapterRouter);
复制代码

在routes下面新建 chapter.js

let express = require('express');
let request = require('request');
let common = require('../common/common.json'); // 引用公共文件
let router = express.Router();/** 获取小说文章列表返回小说文章列表param id {String} 是小说源接口 books.idhttp://api.zhuishushenqi.com/atoc/${id}?view=chapters
*/
router.get('/', function (req, res, next) {if (!req.query.id){res.send(JSON.stringify({ "flag": 0, "msg": "请传入ID..." }));}// req.query.id 编码转义let id = encodeURIComponent(req.query.id);request.get(`${common.API}/atoc/${id}?view=chapters`, function (err, response, body) {if (err) {res.send(JSON.stringify({ "flag": 0, "msg": "请求出错了..." }));}if (body == "wrong param"){res.send(JSON.stringify({ "flag": 0, "msg": "传入错误的ID..." }));}else{// 解析返回的数据body = JSON.parse(body);if (body.chapters.length > 0) {res.send(JSON.stringify({ "flag": 1, "chapters": body.chapters, "msg": "OK" }));}}});
});module.exports = router;
复制代码

访问http://localhost:3000/chapter/?id=57416370ccc94e4b41df80cc 就可以看到数据。id小说源接口返回的id。

小说文章内容

修改app.js 文件路由中间件配置,增加一个路由

let articleRouter = require('./routes/article');
app.use('/article', articleRouter);
复制代码

在routes下面新建 article.js

let express = require('express');
let request = require('request');
let common = require('../common/common.json'); // 引用公共文件
let router = express.Router();/** 获取小说文章内容返回小说文章内容param link {String} 是小说文章列表接口 chapters[0].linkhttp://chapter2.zhuishushenqi.com/chapter/${link}
*/
router.get('/', function (req, res, next) {if (!req.query.link) {res.send(JSON.stringify({ "flag": 0, "msg": "请传入link..." }));}// req.query.link 编码转义let link = encodeURIComponent(req.query.link);request.get(`${common.CHAPTER}/chapter/${link}`, function (err, response, body) {if (err) {res.send(JSON.stringify({ "flag": 0, "msg": "请求出错了..." }));}// 解析返回的数据body = JSON.parse(body);if (body.ok){res.send(JSON.stringify({ "flag": 1, "chapter": body.chapter, "msg": "OK" }));}else{res.send(JSON.stringify({ "flag": 0, "msg": "传入link有错误" }));}});
});module.exports = router;
复制代码

访问http://localhost:3000/article?link=http://www.69shu.com/txt/1463/4861037 就可以看到数据。

排行榜

修改app.js 文件路由中间件配置,增加一个路由

let rankingRouter = require('./routes/ranking');
app.use('/ranking', rankingRouter);
复制代码

在routes下面新建 ranking.js

let express = require('express');
let request = require('request');
let common = require('../common/common.json'); // 引用公共文件
let router = express.Router();/** 获取排行榜返回排行榜param id {String} 没有传参数就是获取全部榜单,否则根据参数获取榜单http://api.zhuishushenqi.com/ranking/genderhttp://api.zhuishushenqi.com/ranking/${id}
*/router.get('/', function (req, res, next) {// 获取全部榜单request.get(`${common.API}/ranking/gender`, function (err, response, body) {if (err) {res.send(JSON.stringify({ "flag": 0, "msg": "请求出错了..." }));}// 解析返回的数据body = JSON.parse(body);if (body.ok) {let ranking = {male: body.male,picture: body.picture,epub: body.epub,female: body.female};res.send(JSON.stringify({ "flag": 1, "ranking": ranking, "msg": "OK" }));} else {res.send(JSON.stringify({ "flag": 0, "msg": "出错了" }));}});
});router.get('/:id', function (req, res, next) {if (req.params.id) {// req.param.id 编码转义let id = encodeURIComponent(req.params.id);// 根据id获取榜单request.get(`${common.API}/ranking/${id}`, function (err, response, body) {if (err) {res.send(JSON.stringify({ "flag": 0, "msg": "请求出错了..." }));}// 解析返回的数据body = JSON.parse(body);if (body.ok) {res.send(JSON.stringify({ "flag": 1, "ranking": body.ranking, "msg": "OK" }));} else {res.send(JSON.stringify({ "flag": 0, "msg": "传入id错误" }));}});}else{res.send(JSON.stringify({ "flag": 0, "msg": "id没有传" }));}
});module.exports = router;
复制代码

分别访问http://localhost:3000/ranking/ 和 http://localhost:3000/ranking/54d43437d47d13ff21cad58b 就可以获取到榜单的数据。 1.0版本的开发就告于段落了。

github仓库访问地址

github.com/lanpangzhi/…

参考

github.com/expressjs/m…

juejin.im/entry/593a3…

github.com/jianhui1012…

使用Express开发小说API接口服务1.0(二)相关推荐

  1. RuoYi-plus一款由SpringBoot2.x,springcloudG开发的SMP多商户权限管理系统+API接口服务组成,可选性后台管理系统或后端接口服务

    数据库脚本请加QQ群,在群文件下载. [技术支持群]687672649[技术交流群]751872263 通知!!! RuoYi-plusv3.0版本介绍: 成功集成多商户管理模式,完美的与基础框架相融 ...

  2. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  3. 基于Nuxt3的API接口服务网站

    原文链接: 基于Nuxt3的API接口服务网站 挺早之前就想写个 api 接口服务,封装下自己收集的一些 api 接口,以便调用,正好最近在接触 SSR 框架,所以就使用 Nuxt3 来编写该项目. ...

  4. 百度AI人工智能开发平台api接口强---使用有感

    2019年上半年由于期末要求,无意中想到想做一个识别植物得小程序,但由于时间以及自己没有接触识别算法这方面知识,所以调用接口,后再搜索过程中,了解到了百度AI人工智能开发平台api接口(https:/ ...

  5. 在线随机美图API接口服务

    API随机美图.稳定.快速.免费的美图 API 接口服务.拒绝流量劫持,全面使用 HTTPS! 接口:https://cdn.seovx.com/ 美图统计: 1686 张 调用示例: https:/ ...

  6. tmall.product.schema.get( 淘宝天猫商品发布API接口) ,淘宝商品发布API接口,淘宝店铺上传API接口,oAuth2.0店铺上传API接口

    tmall.product.schema.get( 淘宝天猫商品发布API接口) ,淘宝商品发布API接口,淘宝店铺上传API接口,oAuth2.0店铺上传API接口,可适用于店铺上传商品,店铺发货, ...

  7. 人人都是接口开发大师,这个开源项目花5分钟就可以开发一个API接口

    PhalApi开源接口框架 读音:派框架,官网:https://www.phalapi.net/ PhalApi是一个PHP轻量级开源接口框架,致力于快速开发接口服务.支持HTTP/SOAP/RPC等 ...

  8. django restful mysql_如何用Django和restful搭建api接口服务

    因为在一个项目需要接口服务.通过接口url可以实现写入和读取等功能. django 搭建web服务 1)新建一个 django project django-admin.py startproject ...

  9. Web 开发技术API 接口参考

    Web 开发技术 https://developer.mozilla.org/zh-CN/docs/Web Web API 接口参考 https://developer.mozilla.org/zh- ...

最新文章

  1. javascript简单应用
  2. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)
  3. 基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台
  4. Firewall配置
  5. python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2
  6. html设置边框dw,Dreamweaver表格边框设置的css语法大全
  7. Centos挂载新硬盘开机自动挂载
  8. win7右键没有新建文件夹了
  9. 常用的免费英文电子书
  10. 报错——xxx is not defined
  11. Vue3 Suspense 组件
  12. .bat批处理命令的介绍
  13. 一个小垃圾的成长笔记
  14. C语言编写寻找1--100间的奇数
  15. 谷歌SEO中PBN外链是否值得做
  16. OpenAI教程之OpenAI 的 Dall-E2 令人印象深刻
  17. 视频文件头解析--wmv-浅析
  18. Windows 默认字体和 字体链接
  19. win7开机黑屏,但能看到鼠标
  20. findChessboardCorners求出的Corners按确定顺序排列

热门文章

  1. for循环中gets_Python中for循环的一些非常规操作
  2. 自动挂机区块AI机器人源码开源支持二次开发
  3. Smart-Mall新零售商城系统
  4. 小程序 | 微信小程序多图上传(点击上传、可修改删除与放大回显)
  5. java马克思手稿_java 循环嵌套解决一元,二元,三元方程(增长率,鸡兔同笼,马克思手稿)...
  6. 学计算机土味情话,计算机土味情话
  7. webstorm编辑器,Ctrl+Alt+L格式化JS代码或格式化Vue代码后,单引号变成双引号,以及添加分号设置问题
  8. 多用途响应式ppt资源下载平台-html模板
  9. 旅行线路定制主题响应式手机模板
  10. 最新SpringBoot2.0X整合SpringData JPA实战完整篇