Browse Source

bilibili video link api

DIYgod 8 years ago
parent
commit
dda08cb959
3 changed files with 56 additions and 0 deletions
  1. 1 0
      nodejs/index.js
  2. 1 0
      nodejs/package.json
  3. 54 0
      nodejs/routes/video-bilibili.js

+ 1 - 0
nodejs/index.js

@@ -10,4 +10,5 @@ app.get('/', require('./routes/get'));
 app.post('/', require('./routes/post'));
 app.get('/list', require('./routes/list'));
 app.get('/bilibili', require('./routes/bilibili'));
+app.get('/video/bilibili', require('./routes/video-bilibili'));
 app.listen(1207);

+ 1 - 0
nodejs/package.json

@@ -7,6 +7,7 @@
   "license": "MIT",
   "devDependencies": {},
   "dependencies": {
+    "blueimp-md5": "^2.4.0",
     "express": "^4.13.4",
     "log4js": "^0.6.36",
     "mongoose": "^4.1.9",

+ 54 - 0
nodejs/routes/video-bilibili.js

@@ -0,0 +1,54 @@
+var url = require('url');
+var logger = require('../tools/logger');
+var redis = require('../tools/redis');
+var fetch = require('node-fetch');
+var md5 = require('blueimp-md5');
+
+module.exports = function (req, res) {
+    var ip = req.headers['x-forwarded-for'] ||
+        req.connection.remoteAddress ||
+        req.socket.remoteAddress ||
+        req.connection.socket.remoteAddress;
+
+    var query = url.parse(req.url,true).query;
+    var aid = query.aid;
+    var appkey = '4ebafd7c4951b366';
+    var secret = '8cb98205e9b2ad3669aad0fce12a4c13';
+
+    redis.client.get(`bilibilicid${aid}`, function(err, reply) {
+        if (reply) {
+            logger.info(`Video Bilibili AV${aid} form redis, IP: ${ip}`);
+
+            var sign = md5(`appkey=${appkey}&cid=${reply}&otype=json&quality=2&type=mp4${secret}`);
+            fetch(`https://interface.bilibili.com/playurl?appkey=${appkey}&cid=${reply}&otype=json&quality=2&type=mp4&sign=${sign}`).then(
+                response => response.text()
+            ).then((data) => {
+                    res.send(data);
+                }
+            ).catch(
+                e => logger.error("Video Bilibilib Error: getting data", e)
+            );
+        }
+        else {
+            logger.info(`Video Bilibili AV${aid} form origin, IP: ${ip}`);
+
+            fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`).then(
+                response => response.json()
+            ).then((data) => {
+                    redis.set(`bilibilicid${aid}`, data[0].cid);
+                    var sign = md5(`appkey=${appkey}&cid=${data[0].cid}&otype=json&quality=2&type=mp4${secret}`);
+                    fetch(`https://interface.bilibili.com/playurl?appkey=${appkey}&cid=${data[0].cid}&otype=json&quality=2&type=mp4&sign=${sign}`).then(
+                        response => response.text()
+                    ).then((data) => {
+                            res.send(data);
+                        }
+                    ).catch(
+                        e => logger.error("Video Bilibilib Error: getting data", e)
+                    );
+                }
+            ).catch(
+                e => logger.error("Video Bilibilib Error: getting cid", e)
+            );
+        }
+    });
+};