摘要:使用開發(fā)小說接口服務(wù)二線上訪問地址之前完成了首頁(yè)和搜索的接口,現(xiàn)在就開始寫剩下的接口。獲取小說源因?yàn)樽窌衿髡嬖词鞘召M(fèi)加密的,所以只能使用盜版源,所以要封裝一個(gè)獲取小說源的接口。小說源接口返回的。版本的開發(fā)就告于段落了。
使用Express開發(fā)小說API接口服務(wù)1.0(二)
線上訪問地址https://api.langpz.com/
之前完成了首頁(yè)和搜索的接口,現(xiàn)在就開始寫剩下的接口。
獲取小說源因?yàn)樽窌衿髡嬖词鞘召M(fèi)加密的,所以只能使用盜版源,所以要封裝一個(gè)獲取小說源的接口。
修改app.js 文件路由中間件配置,增加一個(gè)路由
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} 是首頁(yè)和搜索返回接口 books[i].id param n {Number || String} 使用第幾個(gè)源,可以不用傳參默認(rèn) 1 http://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": "請(qǐng)傳入ID..." })); } // req.query.id 編碼轉(zhuǎn)義 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": "請(qǐng)求出錯(cuò)了..." })); } // 解析返回的數(shù)據(jù) body = JSON.parse(body); // 判斷是否返回內(nèi)容 if (body.length == 0){ res.send(JSON.stringify({ "flag": 0, "msg": "沒有獲取到小說源,換個(gè)小說看吧" })); } // 第一個(gè)源是正版源,是收費(fèi)加密的,所以默認(rèn)選中第二個(gè)源 let n = parseInt(req.query.n); if (isNaN(n) || n == 0){ n = 1; } // 判斷n是否大于源數(shù)據(jù)的長(zhǎng)度 if (n >= body.length){ res.send(JSON.stringify({ "flag": 0, "msg": "n的參數(shù)值不正確,沒有那個(gè)源" })); }else{ res.send(JSON.stringify({ "flag": 1, "books": body[n], "msg": "OK" })); } }); }); module.exports = router;
訪問http://localhost:3000/source/?id=50864bf69dacd30e3a000014&n=3 就可以看到返回第四個(gè)源的數(shù)據(jù)。
小說文章列表修改app.js 文件路由中間件配置,增加一個(gè)路由
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.id http://api.zhuishushenqi.com/atoc/${id}?view=chapters */ router.get("/", function (req, res, next) { if (!req.query.id){ res.send(JSON.stringify({ "flag": 0, "msg": "請(qǐng)傳入ID..." })); } // req.query.id 編碼轉(zhuǎn)義 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": "請(qǐng)求出錯(cuò)了..." })); } if (body == "wrong param"){ res.send(JSON.stringify({ "flag": 0, "msg": "傳入錯(cuò)誤的ID..." })); }else{ // 解析返回的數(shù)據(jù) 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 就可以看到數(shù)據(jù)。id小說源接口返回的id。
小說文章內(nèi)容修改app.js 文件路由中間件配置,增加一個(gè)路由
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(); /** 獲取小說文章內(nèi)容 返回小說文章內(nèi)容 param link {String} 是小說文章列表接口 chapters[0].link http://chapter2.zhuishushenqi.com/chapter/${link} */ router.get("/", function (req, res, next) { if (!req.query.link) { res.send(JSON.stringify({ "flag": 0, "msg": "請(qǐng)傳入link..." })); } // req.query.link 編碼轉(zhuǎn)義 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": "請(qǐng)求出錯(cuò)了..." })); } // 解析返回的數(shù)據(jù) 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有錯(cuò)誤" })); } }); }); module.exports = router;
訪問http://localhost:3000/article?link=http://www.69shu.com/txt/1463... 就可以看到數(shù)據(jù)。
排行榜修改app.js 文件路由中間件配置,增加一個(gè)路由
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} 沒有傳參數(shù)就是獲取全部榜單,否則根據(jù)參數(shù)獲取榜單 http://api.zhuishushenqi.com/ranking/gender http://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": "請(qǐng)求出錯(cuò)了..." })); } // 解析返回的數(shù)據(jù) 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": "出錯(cuò)了" })); } }); }); router.get("/:id", function (req, res, next) { if (req.params.id) { // req.param.id 編碼轉(zhuǎn)義 let id = encodeURIComponent(req.params.id); // 根據(jù)id獲取榜單 request.get(`${common.API}/ranking/${id}`, function (err, response, body) { if (err) { res.send(JSON.stringify({ "flag": 0, "msg": "請(qǐng)求出錯(cuò)了..." })); } // 解析返回的數(shù)據(jù) 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錯(cuò)誤" })); } }); }else{ res.send(JSON.stringify({ "flag": 0, "msg": "id沒有傳" })); } }); module.exports = router;
分別訪問http://localhost:3000/ranking/ 和 http://localhost:3000/ranking/54d43437d47d13ff21cad58b 就可以獲取到榜單的數(shù)據(jù)。
1.0版本的開發(fā)就告于段落了。
https://github.com/lanpangzhi/novel-api
我的博客和GitHub地址https://github.com/lanpangzhi
http://blog.langpz.com
參考https://github.com/expressjs/morgan
https://juejin.im/entry/593a3fdf61ff4b006c737ca4
https://github.com/jianhui1012/bookreader/wiki/API-%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103331.html
摘要:使用開發(fā)小說接口服務(wù)一版本技術(shù)棧使用。接口用追書神器。目前接口設(shè)計(jì)有首頁(yè),小說詳情頁(yè),搜索,小說文章列表頁(yè),排行。搜索接口版本的搜索接口只取前條數(shù)據(jù),可以模糊查詢。取前條,并添加圖片鏈接請(qǐng)求出錯(cuò)了請(qǐng)傳入?yún)?shù)訪問遮天就可以看到返回的數(shù)據(jù)了。 使用Express開發(fā)小說API接口服務(wù)1.0(一) 1.0版本技術(shù)棧使用express-generator、express、request、mor...
摘要:使用開發(fā)小說接口服務(wù)三線上訪問地址之前發(fā)現(xiàn)追書神器詳情頁(yè)竟然沒有下一章和上一章的返回值,只能自己動(dòng)手封裝一下。 使用Express開發(fā)小說API接口服務(wù)1.0(三) 線上訪問地址https://api.langpz.com/ 之前發(fā)現(xiàn)追書神器API詳情頁(yè)竟然沒有下一章和上一章的返回值,只能自己動(dòng)手封裝一下。 app.js 增加錯(cuò)誤處理 // catch 404 and forward ...
摘要:一點(diǎn)閱讀器源自追書神器,免費(fèi)使用目前已初步開發(fā)完成項(xiàng)目地址歡迎,,推薦一個(gè)之前用文章類閱讀寫的一點(diǎn)閱讀微信小程序一點(diǎn)文章已上線,可以再微信搜索一點(diǎn)文章體驗(yàn)在線體驗(yàn)地址點(diǎn)擊這里體驗(yàn)服務(wù)器太,渲染慢部分效果截圖一點(diǎn)閱讀器優(yōu)勢(shì)一點(diǎn)閱讀器追書神 vue-reader 一點(diǎn)閱讀器!API源自追書神器,免費(fèi)使用!目前已初步開發(fā)完成! Github項(xiàng)目地址:https://github.com/An...
摘要:一點(diǎn)閱讀器源自追書神器,免費(fèi)使用目前已初步開發(fā)完成項(xiàng)目地址歡迎,,推薦一個(gè)之前用文章類閱讀寫的一點(diǎn)閱讀微信小程序一點(diǎn)文章已上線,可以再微信搜索一點(diǎn)文章體驗(yàn)在線體驗(yàn)地址點(diǎn)擊這里體驗(yàn)服務(wù)器太,渲染慢部分效果截圖一點(diǎn)閱讀器優(yōu)勢(shì)一點(diǎn)閱讀器追書神 vue-reader 一點(diǎn)閱讀器!API源自追書神器,免費(fèi)使用!目前已初步開發(fā)完成! Github項(xiàng)目地址:https://github.com/An...
摘要:一點(diǎn)閱讀器源自追書神器,免費(fèi)使用目前已初步開發(fā)完成項(xiàng)目地址歡迎,,推薦一個(gè)之前用文章類閱讀寫的一點(diǎn)閱讀微信小程序一點(diǎn)文章已上線,可以再微信搜索一點(diǎn)文章體驗(yàn)在線體驗(yàn)地址點(diǎn)擊這里體驗(yàn)服務(wù)器太,渲染慢部分效果截圖一點(diǎn)閱讀器優(yōu)勢(shì)一點(diǎn)閱讀器追書神 vue-reader 一點(diǎn)閱讀器!API源自追書神器,免費(fèi)使用!目前已初步開發(fā)完成! Github項(xiàng)目地址:https://github.com/An...
閱讀 3181·2023-04-25 19:09
閱讀 3893·2021-10-22 09:54
閱讀 1770·2021-09-29 09:35
閱讀 2925·2021-09-08 09:45
閱讀 2269·2021-09-06 15:00
閱讀 2781·2019-08-29 15:32
閱讀 1046·2019-08-28 18:30
閱讀 382·2019-08-26 13:43