bilibili/哔哩哔哩:超清FLV下载,FLV合并,原生MP4下载,弹幕ASS下载,MKV打包,播放体验增强,原生appsecret,不借助其他网站
< Feedback on bilibili merged flv+mp4+ass+enhance
之前在用you-get,结合自己的shell script进行批量下载。结果今天突然用不了(403),然后发现了这个,非常直观好用啊。
遗憾的是这个脚本需要直接在浏览器运行,好像也不能批量处理。我不懂js,看到4000多行的代码头皮发麻,所以想请教一下是如何解析b站视频地址的,我想自己试着用python重现一下。
谢谢各位大神!!!
PR2555:已经有人修复了you-get,他的fork,安装方法。
这个脚本并没有破解B站的密钥;相反,它调用B站原生的方法,然后监听/替换B站的响应。这被称为hook或者hijack。原因是
因此,必须要有一个能运行B站原生方法的js环境,才能监听到B站的响应。
懒得加的功能:
- 多P解析
接口已经留好了,但自己没这需求。因为用的是原生appsecret,需要iframe真的去访问多P,小心内存爆炸。
所以Python的实作仍然需要phantomjs,之后拦截interface.bilibili.com/playurl?
或者bangumi.bilibili.com/player/web_api/v2/playurl?
这两个地址的请求就可以了。
实际上,如果拿到视频地址之后马上删库释放页面,8G内存可以处理100P以内的批量下载,但自己没需求所以懒得做(●′ω`●) 而且会被B站当做ddos的吧
除去ASS和MKV两个巨大无比的内嵌库,代码明明只有2800行的说~ BiliMonkey更是只有600行,而且全都是这个东西的变体
async getNonCurrentFormat(format) {
const jq = this.playerWin.jQuery;
const _ajax = jq.ajax;
const _setItem = this.playerWin.localStorage.setItem;
let pendingFormat = this.lockFormat(format);
let self = this;
jq.ajax = function (a, c) {
if (typeof c === 'object') { if (typeof a === 'string') c.url = a; a = c; c = undefined };
if (a.url.includes('interface.bilibili.com/playurl?') || a.url.includes('bangumi.bilibili.com/player/web_api/v2/playurl?')) {
self.cidAsyncContainer.resolve(a.url.match(/cid=\d+/)[0].slice(4));
let _success = a.success;
_success({});
a.success = res => self.resolveFormat(res, format);
jq.ajax = _ajax;
}
return _ajax.call(jq, a, c);
};
this.playerWin.localStorage.setItem = () => this.playerWin.localStorage.setItem = _setItem;
this.playerWin.document.querySelector(`div.bilibili-player-video-btn-quality > div ul li[data-value="${BiliMonkey.formatToValue(format)}"]`).click();
return pendingFormat;
}
之前在用you-get,结合自己的shell script进行批量下载。结果今天突然用不了(403),然后发现了这个,非常直观好用啊。 遗憾的是这个脚本需要直接在浏览器运行,好像也不能批量处理。我不懂js,看到4000多行的代码头皮发麻,所以想请教一下是如何解析b站视频地址的,我想自己试着用python重现一下。 谢谢各位大神!!!
sigh 我想,我见到大家这样热情啊,一行代码不写也不好
已经增加了批量功能。欢迎阁下试试开发版本:https://github.com/liqi0816/bilitwin/raw/batch-download/biliTwin.user.js
这项功能并不一定会加到正式版中。
请教:如何解析视频地址的
之前在用you-get,结合自己的shell script进行批量下载。结果今天突然用不了(403),然后发现了这个,非常直观好用啊。
遗憾的是这个脚本需要直接在浏览器运行,好像也不能批量处理。我不懂js,看到4000多行的代码头皮发麻,所以想请教一下是如何解析b站视频地址的,我想自己试着用python重现一下。
谢谢各位大神!!!