bilibili danmaku parser

master
DIYgod 6 years ago
parent d69106292c
commit fc124f0245
No known key found for this signature in database
GPG Key ID: EC0B76A252D3EF67
  1. 2
      package.json
  2. 1
      router.js
  3. 46
      routes/bilibili.js
  4. 104
      yarn.lock

@ -11,10 +11,12 @@
"eslint-plugin-prettier": "2.6.1"
},
"dependencies": {
"cheerio": "1.0.0-rc.2",
"koa": "2.5.1",
"koa-bodyparser": "4.2.1",
"koa-router": "7.4.0",
"mongoose": "5.1.7",
"node-fetch": "2.1.2",
"redis": "2.8.0",
"winston": "3.0.0",
"xml2js": "0.4.19"

@ -3,5 +3,6 @@ const router = new Router();
router.get('/v3', require('./routes/get'));
router.post('/v3', require('./routes/post'));
router.get('/v3/bilibili', require('./routes/bilibili'));
module.exports = router;

@ -0,0 +1,46 @@
const fetch = require('node-fetch');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const aid = ctx.request.query.aid;
let cid = ctx.request.query.cid;
if (!cid && aid) {
cid = await ctx.redis.get(`v3bilibiliaid2cid${aid}`);
if (!cid) {
const res = await fetch(`http://www.bilibili.com/widget/getPageList?aid=${aid}`);
const result = await res.json();
cid = result[0].cid;
ctx.redis.set(`v3bilibiliaid2cid${aid}`, cid);
}
}
let data = await ctx.redis.get(`v3bilibilicid2dan${cid}`);
if (data) {
ctx.response.set('X-Koa-Redis', 'true');
data = JSON.parse(data);
} else {
const res = await fetch(`https://api.bilibili.com/x/v1/dm/list.so?oid=${cid}`);
const result = await res.text();
const $ = cheerio.load(result.replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/g, ''), {
xmlMode: true
});
data = $('d').map((i, el) => {
const item = $(el);
const p = item.attr('p').split(',');
let type = 0;
if (p[1] === '4') {
type = 2;
}
else if (p[1] === '5') {
type = 1;
}
return [[parseFloat(p[0]), type, parseInt(p[3]), p[6], item.text()]];
}).get();
ctx.redis.set(`v3bilibilicid2dan${cid}`, JSON.stringify(data));
ctx.response.set('X-Koa-Origin', 'true');
}
ctx.body = JSON.stringify({
code: 0,
data: data,
});
};

@ -2,6 +2,10 @@
# yarn lockfile v1
"@types/node@*":
version "10.5.2"
resolved "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707"
accepts@^1.2.2:
version "1.3.5"
resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
@ -100,6 +104,10 @@ bluebird@3.5.0:
version "3.5.0"
resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@ -151,6 +159,17 @@ chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
cheerio@1.0.0-rc.2:
version "1.0.0-rc.2"
resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
dependencies:
css-select "~1.2.0"
dom-serializer "~0.1.0"
entities "~1.1.1"
htmlparser2 "^3.9.1"
lodash "^4.15.0"
parse5 "^3.0.1"
circular-json@^0.3.1:
version "0.3.3"
resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
@ -261,6 +280,19 @@ cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
css-select@~1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
dependencies:
boolbase "~1.0.0"
css-what "2.1"
domutils "1.5.1"
nth-check "~1.0.1"
css-what@2.1:
version "2.1.0"
resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
debug@*, debug@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
@ -330,6 +362,41 @@ doctrine@^2.1.0:
dependencies:
esutils "^2.0.2"
dom-serializer@0, dom-serializer@~0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
dependencies:
domelementtype "~1.1.1"
entities "~1.1.1"
domelementtype@1, domelementtype@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
domelementtype@~1.1.1:
version "1.1.3"
resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
domhandler@^2.3.0:
version "2.4.2"
resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
dependencies:
domelementtype "1"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
dependencies:
dom-serializer "0"
domelementtype "1"
domutils@^1.5.1:
version "1.7.0"
resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
dependencies:
dom-serializer "0"
domelementtype "1"
double-ended-queue@^2.1.0-0:
version "2.1.0-0"
resolved "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
@ -344,6 +411,10 @@ enabled@1.0.x:
dependencies:
env-variable "0.0.x"
entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
env-variable@0.0.x:
version "0.0.4"
resolved "https://registry.npmjs.org/env-variable/-/env-variable-0.0.4.tgz#0d6280cf507d84242befe35a512b5ae4be77c54e"
@ -604,6 +675,17 @@ has@^1.0.1:
dependencies:
function-bind "^1.1.1"
htmlparser2@^3.9.1:
version "3.9.2"
resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
dependencies:
domelementtype "^1.3.0"
domhandler "^2.3.0"
domutils "^1.5.1"
entities "^1.1.1"
inherits "^2.0.1"
readable-stream "^2.0.2"
http-assert@^1.1.0:
version "1.3.0"
resolved "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a"
@ -645,7 +727,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.3, inherits@~2.0.3:
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
@ -849,7 +931,7 @@ lodash.get@4.4.2:
version "4.4.2"
resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
version "4.17.10"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
@ -971,6 +1053,16 @@ nice-try@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4"
node-fetch@2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
nth-check@~1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
dependencies:
boolbase "~1.0.0"
object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@ -1020,6 +1112,12 @@ os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
parse5@^3.0.1:
version "3.0.3"
resolved "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
dependencies:
"@types/node" "*"
parseurl@^1.3.0:
version "1.3.2"
resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
@ -1089,7 +1187,7 @@ raw-body@^2.3.3:
iconv-lite "0.4.23"
unpipe "1.0.0"
readable-stream@^2.3.6:
readable-stream@^2.0.2, readable-stream@^2.3.6:
version "2.3.6"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
dependencies:

Loading…
Cancel
Save