
黑科技插件的启用代码是这个:
javascript:$('<script>').attr('src','//b.dianbo.me/h.js').appendTo($('head'))
这个是jquery附加了一段js到网页,
那么就开始分析这个js。
(function(){ try{ if(window.__prevent_muti_load) returnwindow.__prevent_muti_load = true$.ajax({ url:'http://b.dianbo.me/fetch.php', data:{url: location.href}, success:function(txt){ var o = $('#bofqi')var $ori = o.html()var $new = txtvar isBishi = falsevar sw = $('<a href="javascript:void(0)">').css({ background: '#6CF url(/images/common/z.png) no-repeat -958px -410px', color: '#FFF', display: 'block', 'border-radius': '5px', border: '1px solid #EEE', padding: '3px 7px 3px 7px', margin: '4px', 'text-align': 'center' })sw.click(function(){ if( isBishi ){ // current show o.html($ori)sw.html('切换到 bilibili d幕播放器,\(・ω・\)丧尸!(/・ω・)/bishi♬')}else{ o.html($new)sw.html('切换到 爱妻一 播放器,不要忘记支持正版哦~♂')} isBishi = !isBishi}).click()o.after( $('<div class="scontent">').append(sw) )}, error:function(e){ alert('虽然不知道为什么。但是失败了- -!')} })}catch(e){ } })()
这个js显然是jquery写的,内容很基本,但是没有什么东西,只是简单地创建了一个播放器,让播放器之间能够切换。可是核心的部分也就是取得播放器的地址的方式还是不清楚。
那么只好从他的ajax开始了。它的ajax请求了一个php页面,这个页面返回av号对应的播放器地址,比如说http://b.dianbo.me/fetch.php?url=http://www.bilibili.tv/video/av547970/
这个实现方式有很多种但是由于它也能解析非新番地址,所以判断这个是使用bilibili的openapi实现的
openapi的说明在http://www.bilibili.tv/api.txt
而bilibili的播放器只要提供正确的av号和cid就能播放了。
参考链接:
b站黑科技插件原理分析 | 日志 | 果壳网 科技有意思
http://www.guokr.com/blog/443011/
附:
B站即bilibili,是中国大陆一个动画、游戏 相关的d幕视频分享网站,也被称为哔哩哔哩、B站,其前身为视频分享网站Mikufans,现用名来自《魔法禁书目录》中上条当麻对于御坂美琴的昵称“bilibili”(放电国中妹)。网站最大的特点是悬浮于视频上方的实时评论功能。是中国大陆第二家提供这样功能的网站。
网站最初以借鉴其他视频分享网站的资源为主,在国内逐渐注重版权的大形势下进行了合化。
参考链接:
B站黑科技是怎么做到的? - 视频 - 知乎
http://www.zhihu.com/question/22528099
首先是bilibili的播放器。bilibili的播放器主要有两个,一个内站播放器
https://static-s.bilibili.tv/play.swf?cid={cid}&aid={aid}另一个是外站播放器http://static.hdslb.com/miniloader.swf?aid={aid}&pid={pid}其中aid就是article id的意思,或者说就是视频的av号;而pid是page id的意思,也就是说视频的第几个分页;而cid是chat id的意思,每个chat id对应一组d幕池和。然后我们先说第一个内站的播放器。播放器要播放视频显然要先找到视频的内容的地址,这是我们最为关心的。无论你是靠反编译还是截取网络数据包,都可以看到这个播放器访问了http://interface.bilibili.cn/playurl?cid={cid}以获取视频内容的地址,然后加载这些视频并播放。我们再看后面那个外站播放器。参数里面没有cid,那他是怎么加载视频内容的地址的呢?如果你再用同样的方法进行分析,你会发现他实际上还是访问了上面说到的那个地址。那他是怎么获取cid的呢?他获取cid是通过http://api.bilibili.cn/view?type=json&id={aid}......的一个链接获取到的。所以到现在我们基本可以明白bilibili视频的播放,主要依赖于cid和上面提到的那个playurl的链接。----然后我们要讨论的问题是关于手机客户端的了。众所周知地,那些其他视频网站的播放器折腾半天也只是在网页上,而手机客户端上看来这些视频和其他的别无两样。而分析数据包可以轻松地知道手机客户端访问的还是上面提到的那个playurl的链接。最后我们回到问题本身。----所以问题就简化为了,只要找到最上面提到的内站播放器需要的cid,那么就可以用那个播放器播放视频了。于是问题变成了如何查找cid。之前我们说过了,cid被用来表示某个视频对应那组d幕池。所以只要有d幕的视频就肯定有一个cid。事实上,那些其他视频网站的播放器的视频也需要一个cid才能加载d幕。所以我们可以轻松地从给flash的参数里面找到cid。当然,除了这个方法外,还有其他很多方法,比如:通过api获取:请参考http://docs.bilibili.cn/wiki/API.view通过下载d幕页面的链接获取:http://www.bilibili.tv/ass/{aid}.html(下载d幕页面已死)通过iOS用网页端接口获取:http://www.bilibili.tv/html5?aid={aid}&page={pid} (挂掉过一段时间,现在又恢复了)当然,还有一些脚本是访问了脚本作者搭建的服务器以获取cid。只有你可以放心该脚本的行为时使用这样的脚本。然后只要把flash换成上面说的那个内站播放器的就好了。---但是有些视频是不能替换的,这些视频一般都是因为在playurl那一步无法获取视频的内容所导致的。所以这导致的结果就是,一般来说,某站点的视频都是转天转投新浪后才可以看的,不过最近似乎转投视频源从sina变成local了,别问我为什么。---最后是一些替换之后的善后工作。在加载http://static.hdslb.com/js/page.arc.js脚本时,会根据当前是不是原生播放器而做一些事情,所以替换后需要再手工执行相应的函数。
就是在运行中的Windows电脑的软件。哔哩哔哩是国内知名的视频d幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。哔哩哔哩客户端是一款运行在Windows电脑系统上的黑科技软件。在哔哩哔哩客户端你可以将各源新番变成B站播放器播放,对于Letv、iQiyi源新番可以直接突破404及跳转页面播放新番;对于其他新番可以选择播放源和清晰度。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)