摘要:使用開發小說接口服務一版本技術棧使用。接口用追書神器。目前接口設計有首頁,小說詳情頁,搜索,小說文章列表頁,排行。搜索接口版本的搜索接口只取前條數據,可以模糊查詢。取前條,并添加圖片鏈接請求出錯了請傳入參數訪問遮天就可以看到返回的數據了。
使用Express開發小說API接口服務1.0(一)
1.0版本技術棧使用express-generator、express、request、morgan、file-stream-rotator。接口用追書神器API。
目前接口設計有首頁,小說詳情頁,搜索,小說文章列表頁,排行API。
先創建一個倉庫放文件
然后克隆創建好的倉庫
git clone https://github.com/lanpangzhi/novel-api.git安裝 express-generator 快速生成項目
npm install -g express-generator
然后再之前克隆倉庫的上一級目錄執行
express --no-view novel-api cd novel-api npm install npm install request file-stream-rotator -S // Linux MacOS DEBUG=novel-api:* & npm start // windows set DEBUG=novel-api:* & npm start
生成好的目錄結構和文件
打開項目根目錄app.js,放在路由上面。
app.all("*", function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By", " 3.2.1") res.header("Content-Type", "application/json;charset=utf-8"); next() });日志寫入本地文件
按時間分割log日志并寫入本地磁盤,需要在app.js文件中引入fs和file-stream-rotator模塊。
let fs = require("fs"); let FileStreamRotator = require("file-stream-rotator"); // 日志按時間分割模塊 // 下面代碼寫在var app = express();下面 let logDir = path.join(__dirname, "log"); // 檢查是否存在logDir這個目錄沒有則創建 fs.existsSync(logDir) || fs.mkdirSync(logDir); // 日志分割流 let accessLogStream = FileStreamRotator.getStream({ date_format: "YYYYMMDD", filename: path.join(logDir, "access-%DATE%.log"), frequency: "daily", verbose: false }); // 日志中間件 app.use(logger("combined", { stream: accessLogStream }));創建公共文件
項目根目錄創建common文件夾,再里面再新建一個common.json文件
{ "API": "http://api.zhuishushenqi.com", "PIC": "http://statics.zhuishushenqi.com", "CHAPTER": "http://chapter2.zhuishushenqi.com" }
API域名: http://api.zhuishushenqi.com
圖片域名: http://statics.zhuishushenqi.com
章節域名: http://chapter2.zhuishushenqi...
1.0版本首頁接口直接返回最熱榜前20條數據。
修改app.js 文件路由中間件配置
app.use("/index", indexRouter);
修改routes/index.js 文件
let express = require("express"); let request = require("request"); let common = require("../common/common.json"); // 引用公共文件 let router = express.Router(); /** 首頁數據追書最熱榜 Top100 獲取單一排行榜 http://api.zhuishushenqi.com/ranking/{rankingId} */ router.get("/", function(req, res, next) { // 請求追書最熱榜 Top100 request.get(`${common.API}/ranking/54d42d92321052167dfb75e3`, function (error, response, body) { if (error){ res.send(JSON.stringify({"flag": 0, "msg": "請求出錯了..."})); } // 解析返回數據取前20條,并添加圖片url鏈接 body = JSON.parse(body); if (body.ok){ let books = body.ranking.books.slice(0, 19); books.forEach(element => { element.cover = common.PIC + element.cover; }); res.send(JSON.stringify({ "flag": 1, "books": books, "msg": "OK" })); }else{ res.send(JSON.stringify({ "flag": 0, "msg": "rankingId有問題" })); } }); }); module.exports = router;
訪問http://localhost:3000/index 就可以看到返回的數據了。
搜索接口1.0版本的搜索接口只取前40條數據,可以模糊查詢。
修改app.js 文件路由中間件配置,把users刪掉。
let searchRouter = require("./routes/search"); app.use("/search", searchRouter);
然后把routes文件夾下面的users.js刪除,新建search.js
let express = require("express"); let request = require("request"); let common = require("../common/common.json"); // 引用公共文件 let router = express.Router(); /** 模糊搜索接口 返回模糊搜索前40條數據 http://api.zhuishushenqi.com/book/fuzzy-search?query={name} */ router.get("/", function(req, res, next) { // 判斷query參數有沒有傳遞過來 if (req.query.query){ // req.query.query 編碼轉義 let query = encodeURIComponent(req.query.query); request.get(`${common.API}/book/fuzzy-search?query=${query}`, function (error, response, body) { if (error){ res.send(JSON.stringify({ "flag": 0, "msg": "請求出錯了..." })); } // 解析返回數據 body = JSON.parse(body); if (body.ok){ if (body.books.length == 0){ res.send(JSON.stringify({ "flag": 0, "msg": "沒有找到書籍,換個名字試試吧。" })); } // 取前40條,并添加圖片url鏈接 let books = body.books.slice(0, 39); books.forEach(element => { element.cover = common.PIC + element.cover; }); res.send(JSON.stringify({ "flag": 1, "books": books, "msg": "OK" })); }else{ res.send(JSON.stringify({ "flag": 0, "msg": "請求出錯了..." })); } }); }else{ res.send(JSON.stringify({"flag": 0, "msg": "請傳入query參數"})); } }); module.exports = router;
訪問http://localhost:3000/search/?query=遮天 就可以看到返回的數據了。
喜歡可以去github送個star謝謝 我的博客和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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103200.html
摘要:使用開發小說接口服務二線上訪問地址之前完成了首頁和搜索的接口,現在就開始寫剩下的接口。獲取小說源因為追書神器正版源是收費加密的,所以只能使用盜版源,所以要封裝一個獲取小說源的接口。小說源接口返回的。版本的開發就告于段落了。 使用Express開發小說API接口服務1.0(二) 線上訪問地址https://api.langpz.com/ 之前完成了首頁和搜索的接口,現在就開始寫剩下的接口...
摘要:使用開發小說接口服務三線上訪問地址之前發現追書神器詳情頁竟然沒有下一章和上一章的返回值,只能自己動手封裝一下。 使用Express開發小說API接口服務1.0(三) 線上訪問地址https://api.langpz.com/ 之前發現追書神器API詳情頁竟然沒有下一章和上一章的返回值,只能自己動手封裝一下。 app.js 增加錯誤處理 // catch 404 and forward ...
摘要:一點閱讀器源自追書神器,免費使用目前已初步開發完成項目地址歡迎,,推薦一個之前用文章類閱讀寫的一點閱讀微信小程序一點文章已上線,可以再微信搜索一點文章體驗在線體驗地址點擊這里體驗服務器太,渲染慢部分效果截圖一點閱讀器優勢一點閱讀器追書神 vue-reader 一點閱讀器!API源自追書神器,免費使用!目前已初步開發完成! Github項目地址:https://github.com/An...
摘要:一點閱讀器源自追書神器,免費使用目前已初步開發完成項目地址歡迎,,推薦一個之前用文章類閱讀寫的一點閱讀微信小程序一點文章已上線,可以再微信搜索一點文章體驗在線體驗地址點擊這里體驗服務器太,渲染慢部分效果截圖一點閱讀器優勢一點閱讀器追書神 vue-reader 一點閱讀器!API源自追書神器,免費使用!目前已初步開發完成! Github項目地址:https://github.com/An...
摘要:一點閱讀器源自追書神器,免費使用目前已初步開發完成項目地址歡迎,,推薦一個之前用文章類閱讀寫的一點閱讀微信小程序一點文章已上線,可以再微信搜索一點文章體驗在線體驗地址點擊這里體驗服務器太,渲染慢部分效果截圖一點閱讀器優勢一點閱讀器追書神 vue-reader 一點閱讀器!API源自追書神器,免費使用!目前已初步開發完成! Github項目地址:https://github.com/An...
閱讀 1884·2021-11-17 09:33
閱讀 6470·2021-10-12 10:20
閱讀 2299·2021-09-22 15:50
閱讀 1783·2021-09-22 15:10
閱讀 615·2021-09-10 10:51
閱讀 618·2021-09-10 10:50
閱讀 3020·2021-08-11 11:19
閱讀 1776·2019-08-30 15:55