├── favicon.ico
├── play
├── play.swf
├── mukio.swf
├── biliplayer_bili.swf
├── biliplayer_tucao.swf
├── biliplayer_iqiyi720.swf
├── biliplayer_iqiyi1080.swf
└── do.php
├── image
└── logo.gif
├── style
├── abplayer
│ ├── play.png
│ ├── danmaku.png
│ ├── pause.png
│ ├── fullscreen.png
│ ├── bilibili-helper.eot
│ ├── bilibili-helper.ttf
│ ├── bilibili-helper.woff
│ ├── styles.css
│ ├── bilibili-helper.svg
│ └── base.css
├── iframe.css
├── main.css
└── typo.css
├── bilibili_ddf9d2a7f687baf877f1f418f7112d0b.html
├── task
├── mysql.php
├── install.php
├── createlist.php
└── getlist.php
├── api
├── info.php
├── play.php
├── search.php
├── play_advanced.php
├── login.php
└── test.php
├── url
└── go.php
├── js
├── libxml.js
├── mobile.js
├── Parsers.js
└── CommentCoreLibrary.js
├── README.md
├── html
├── html5player.html
└── about.php
├── open
├── download.php
└── html5.php
├── include
├── home.php
├── list.php
├── bangumi.php
└── dorama.php
├── index.php
├── guide
├── do.php
└── home.php
└── LICENSE
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/favicon.ico
--------------------------------------------------------------------------------
/play/play.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/play/play.swf
--------------------------------------------------------------------------------
/image/logo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/image/logo.gif
--------------------------------------------------------------------------------
/play/mukio.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/play/mukio.swf
--------------------------------------------------------------------------------
/style/abplayer/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/play.png
--------------------------------------------------------------------------------
/play/biliplayer_bili.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/play/biliplayer_bili.swf
--------------------------------------------------------------------------------
/play/biliplayer_tucao.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/play/biliplayer_tucao.swf
--------------------------------------------------------------------------------
/style/abplayer/danmaku.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/danmaku.png
--------------------------------------------------------------------------------
/style/abplayer/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/pause.png
--------------------------------------------------------------------------------
/play/biliplayer_iqiyi720.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/play/biliplayer_iqiyi720.swf
--------------------------------------------------------------------------------
/play/biliplayer_iqiyi1080.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/play/biliplayer_iqiyi1080.swf
--------------------------------------------------------------------------------
/style/abplayer/fullscreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/fullscreen.png
--------------------------------------------------------------------------------
/bilibili_ddf9d2a7f687baf877f1f418f7112d0b.html:
--------------------------------------------------------------------------------
1 | bilibili-site-verification: bilibili_ddf9d2a7f687baf877f1f418f7112d0b.html
--------------------------------------------------------------------------------
/style/abplayer/bilibili-helper.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/bilibili-helper.eot
--------------------------------------------------------------------------------
/style/abplayer/bilibili-helper.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/bilibili-helper.ttf
--------------------------------------------------------------------------------
/style/abplayer/bilibili-helper.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/luckydogasu/BiliPlus/HEAD/style/abplayer/bilibili-helper.woff
--------------------------------------------------------------------------------
/task/mysql.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
14 |
15 |
16 | AV
17 | 分P页码:
18 |
19 |
20 |
--------------------------------------------------------------------------------
/style/iframe.css:
--------------------------------------------------------------------------------
1 | a{text-decoration:none}
2 | a:link{color:#3388FF}
3 | a:visited{color:#3388FF}
4 | a:hover{color:#C8C8C8}
5 | a:active{color:#FFFFFF}
6 | div.title{font-family:"Old English Text MT";font-size:48px;font-weight:bold;color:white;display:inline}
7 | div.subtitle{font-family:"黑体";font-size:15px;font-weight:bold;color:white;display:inline}
8 | div.line{line-height:80%}
9 | div.menu{font-family:"微软雅黑";font-size:18px;font-weight:bold;color:white;display:inline}
10 | div.about{font-family:"宋体";font-size:13px;font-weight:bold;color:white;line-height:0%;display:inline}
11 | div.center{margin-left:auto;margin-right:auto;display:inline}
12 | div.iframetitle{font-family:"微软雅黑";font-size:24px;font-weight:bold;display:inline}
13 | div.iframesubtitle{font-family:"黑体";font-size:18px;font-weight:bold;display:inline}
14 | div.iframedescription{font-family:"微软雅黑";font-size:14px;display:inline}
15 | div.iframefooter{font-family:"微软雅黑";font-size:15px;font-weight:bold;display:inline;display:inline}
--------------------------------------------------------------------------------
/url/go.php:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 | ';
21 | }
22 | ?>
23 |
24 |
25 |
26 | 次元跳转 - BiliPlus - ( ゜- ゜)つロ 乾杯~
27 |
28 |
29 |
30 | 次元跳转
31 | BiliPlus文件下载跳转页面
32 |
33 |
34 |
35 | 下载地址
36 | 请稍候,下载将在1秒后自动开始……
如果您的浏览器没有正常开始文件下载,请
点击这里 下载文件。
37 |
38 |
39 | ©2014 BiliPlus 严禁盗用此页面
40 |
41 |
--------------------------------------------------------------------------------
/style/main.css:
--------------------------------------------------------------------------------
1 | a{text-decoration:none}
2 | a:link{color:#FFFFFF}
3 | a:visited{color:#FFFFFF}
4 | a:hover{color:#C8C8C8}
5 | a:active{color:#3388FF}
6 | div.head
7 | {
8 | width:1300px;
9 | height:128px;
10 | background-color:#3388FF;
11 | box-shadow: 0px 6px 0px #858585;
12 | }
13 | div.footer
14 | {
15 | width:1300px;
16 | height:40px;
17 | background-color:#3388FF;
18 | box-shadow: 0px -6px 0px #858585;
19 | }
20 | div.title{font-family:"微软雅黑";font-size:48px;font-weight:bold;color:white;display:inline}
21 | div.subtitle{font-family:"黑体";font-size:15px;font-weight:bold;color:white;display:inline}
22 | div.line{line-height:80%}
23 | div.menu{font-family:"微软雅黑";font-size:18px;font-weight:bold;color:white;display:inline}
24 | div.about{font-family:"宋体";font-size:13px;font-weight:bold;color:white;line-height:0%;display:inline}
25 | div.center{margin-left:auto;margin-right:auto;display:inline}
26 | div.iframetitle{font-family:"微软雅黑";font-size:24px;font-weight:bold;display:inline}
27 | div.iframesubtitle{font-family:"宋体";font-size:16px;font-weight:bold;display:inline}
28 | div.iframedescription{font-family:"微软雅黑";font-size:16px;display:inline}
29 | div.iframefooter{font-family:"宋体";font-size:13px;font-weight:bold;display:inline}
30 | div.iframebox{width:200px;height:60px;font-family:"微软雅黑";font-size:16px;font-weight:bold;background-color:#3388FF}
--------------------------------------------------------------------------------
/style/abplayer/styles.css:
--------------------------------------------------------------------------------
1 | .abp{position:relative}.abp .container{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);position:absolute;display:block;overflow:hidden;margin:0;border:0;top:0;left:0;bottom:0;right:0;z-index:9999;touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.abp .container .cmt{-webkit-transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;position:absolute;padding:3px 0 0;margin:0;color:#fff;font-family:SimHei,SimSun,Heiti,"MS Mincho",Meiryo,"Microsoft YaHei",monospace;font-size:25px;text-decoration:none;text-shadow:-1px 0 black,0 1px black,1px 0 black,0 -1px #000;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;line-height:100%;letter-spacing:0;word-break:keep-all;white-space:pre}.abp .container .cmt.noshadow{text-shadow:none}.abp .container .cmt.rshadow{text-shadow:-1px 0 white,0 1px white,1px 0 white,0 -1px #fff}@font-face{font-family:"\9ED1\4F53";src:local('SimHei')}@font-face{font-family:"\5B8B\4F53";src:local('SimSun')}@font-face{font-family:"\534E\6587\6977\4F53";src:local('SimKai')}@font-face{font-family:"\5E7C\5706";src:local('YouYuan')}@font-face{font-family:"\5FAE\8F6F\96C5\9ED1";src:local('Microsoft YaHei')}
--------------------------------------------------------------------------------
/js/libxml.js:
--------------------------------------------------------------------------------
1 | /***********************
2 | * XMLParser
3 | * == Licensed Under the MIT License : /LICENSING
4 | * Copyright (c) 2012 Jim Chen ( CQZ, Jabbany )
5 | ************************/
6 | function CommentLoader(url,xcm,callback){
7 | if(callback == null)
8 | callback = function(){return;};
9 | var xmlhttp = null;
10 | if (window.XMLHttpRequest){
11 | xmlhttp=new XMLHttpRequest();
12 | }
13 | else{
14 | xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
15 | }
16 | xmlhttp.open("GET",url,true);
17 | xmlhttp.send();
18 | var cm = xcm;
19 | xmlhttp.onreadystatechange = function(){
20 | if (xmlhttp.readyState==4 && xmlhttp.status==200){
21 | if(navigator.appName == 'Microsoft Internet Explorer'){
22 | var f = new ActiveXObject("Microsoft.XMLDOM");
23 | f.async = false;
24 | f.loadXML(xmlhttp.responseText);
25 | cm.load(BilibiliParser(f));
26 | callback();
27 | }else{
28 | cm.load(BilibiliParser(xmlhttp.responseXML));
29 | callback();
30 | }
31 | }
32 | }
33 | }
34 | function createCORSRequest(method, url){
35 | var xhr = new XMLHttpRequest();
36 | if ("withCredentials" in xhr){
37 | xhr.open(method, url, true);
38 | } else if (typeof XDomainRequest != "undefined"){
39 | xhr = new XDomainRequest();
40 | xhr.open(method, url);
41 | } else {
42 | xhr = null;
43 | }
44 | return xhr;
45 | }
--------------------------------------------------------------------------------
/api/play.php:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/api/search.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BiliPlus
2 |
3 | *BiliPlus* is a Bilibili API Helper site based on PHP.
4 |
5 | It can provide you with Bilibili video play&download, hot list&bangumi list, video&special search and other functions based on Open API and some other interfaces of Bilibili.
6 |
7 | ## License
8 |
9 | Copyright (c) 2014 TundraWork, under the
10 | [GNU General Public License, version 2 (GPL-2.0)](http://opensource.org/licenses/GPL-2.0).
11 |
12 | ## Support
13 |
14 | We are now working on a new project and, our update on this project can be very slow.
15 |
16 | However, please feel free to submit any BUGs.
17 |
18 | ## System Require
19 |
20 | 1. PHP 5.3 or higher
21 | 2. MySQL Server of any version
22 | 3. A Domain with SSL support(HTTPS protocol)
23 |
24 | ## Install&Config
25 |
26 | 0. PLEASE NOTE : Duo to the data distribution problem of bilibili CDN server, servers in many areas CAN NOT get the correct API/Interface data, so you should choose servers in a good network environment, good luck!
27 | 1. We recommend you to use a empty MySQL database and run BiliPlus in a new web server.
28 | 2. Edit "/task/mysql.php" and add your MySQL server info so that we can connent to your database.
29 | 3. Copy all files to your web server's root document directory.
30 | 4. Run "/task/install.php" to set up databanse.
31 | 5. Run "/task/createlist.php" to create data cache for some video lists.
32 | 6. Run "/task/getlist.php" to update cache data of the video lists.
33 | 7. Create a Cron task for "/task/getlist.php", we recommend you to run it every one hour.
34 | 8. (optional) For security reasons, disable the visitor's access permission of "/task" directory.
35 |
36 | ## Wish you have a good time!
--------------------------------------------------------------------------------
/api/play_advanced.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/js/mobile.js:
--------------------------------------------------------------------------------
1 | function isMobile() {
2 | var check = false;
3 | (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);
4 | return check; }
5 |
--------------------------------------------------------------------------------
/html/html5player.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | HTML5弹幕播放器帮助 - BiliPlus - ( ゜- ゜)つロ 乾杯~
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 | HTML5弹幕播放器帮助
17 | 不遵守协议的浏览器都去死吧~!
18 |
19 |
20 | HTML5弹幕播放器是什么?
21 | HTML5弹幕播放器是基于W3C最新推出的HTML5标准(WIKI百科/W3C官网)和相关技术制作的弹幕播放器,它能够在不依赖任何第三方插件(如Flash)的情况下完整实现弹幕播放器的所有功能(PS.发送弹幕/显示脚本弹幕等功能正在开发中...)。
22 |
23 | HTML5弹幕播放器有什么优点?
24 | 1.重复一遍,它能够在不依赖任何第三方插件(如Flash)的情况下完整实现弹幕播放器的所有功能(PS.发送弹幕/显示脚本弹幕等功能正在开发中...),这就使得“FlashPlayer更新”等等插件使人烦躁的提示一去不返,同时也能提高浏览器运行速度和安全性。
2.由于功耗高、安全性差等问题,Flash被淘汰已是大势所趋(PS.已经不支持Flash的设备:Android 4.4+、Mac OS、iOS),使用新的播放器势在必行。
3.相对于上面所说的Flash的种种缺陷,HTML5与它正相反,由于它完全由浏览器控制执行,因此效率高、安全性较强。
4.更多...
25 |
26 | 为什么我的浏览器不能正常使用HTML5弹幕播放器?
27 | HTML5是一项较新的标准,由于其采用了大量新技术参数,浏览器开发者需要一段时间来适应它。
因此可能碰巧您使用的浏览器不支持HTML5或支持不完善。
28 |
29 | 我怎样才能正常使用HTML5弹幕播放器?
30 | 目前唯一的办法是升级/更换您的浏览器。
已确认支持HTML5弹幕播放器的浏览器有:Chrome 32或更高版本、Firefox 21或更高版本、Internet Explorer 10或更高版本
已确认不支持HTML5弹幕播放器的浏览器有:Internet Explorer 9或更低版本、任何使用IE8或更低版本Internet Explorer内核的浏览器(如360系列浏览器\搜狗系列浏览器\百度系列浏览器的旧版本)
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/api/login.php:
--------------------------------------------------------------------------------
1 | Visitor Control System - BiliPlusRedirecting...';
26 | exit();
27 | }
28 | if ($_GET['act']=='visit')
29 | {
30 | setcookie ("visiturl",$_GET['url'],time()+3600*24*30,"/");
31 | exit();
32 | }
33 | if (empty($_GET['act']))
34 | {
35 | if (empty($_GET['access_key'])||empty($_GET['mid'])||empty($_GET['uname']))
36 | {
37 | echo 'Bad Request';
38 | exit();
39 | }
40 | else
41 | {
42 | $login = 2;
43 | setcookie ("login",$login,time()+3600*24*30,"/");
44 | setcookie ("mid",$_GET['mid'],time()+3600*24*30,"/");
45 | setcookie ("uname",$_GET['uname'],time()+3600*24*30,"/");
46 | setcookie ("access_key",$_GET['access_key'],time()+3600*24*30,"/");
47 | echo 'Visitor Control System - BiliPlusRedirecting...';
48 | }
49 | }
50 | if ($_GET["act"]=='logout')
51 | {
52 | $login = 1;
53 | $uname = '时空游客'.$_COOKIE['uid'];
54 | setcookie ("login",$login,time()-3600,"/");
55 | setcookie ("access_key",'',time()-3600,"/");
56 | setcookie ("mid",'',time()-3600,"/");
57 | setcookie ("uname",$uname,time()+3600*24*30,"/");
58 | echo 'Visitor Control System - BiliPlusRedirecting...';
59 | }
--------------------------------------------------------------------------------
/open/download.php:
--------------------------------------------------------------------------------
1 | 400,'error'=>'Bad Request'));
15 | }
16 | }
17 | else
18 | $page = 1;
19 | $id = $av.'_'.$page;
20 | $apijson = mysql_query("SELECT * FROM CACHE_PAGE WHERE ID='{$id}'");
21 | if (!mysql_num_rows($apijson))
22 | {
23 | echo json_encode(array('code'=>404,'error'=>'DATA_NOT_FOUND:AV'.$av.'P'.$page.' does not have cache'));
24 | }
25 | else
26 | {
27 | $apijson = mysql_fetch_array($apijson);
28 | $datatime = $apijson['LASTUPDATE'];
29 | $info = json_decode($apijson['DATA'],true);
30 | if (!array_key_exists("code",$info))
31 | {
32 | if (isset($info['list'][($page-1)]['cid']))
33 | {
34 | $cid = $info['list'][($page-1)]['cid'];
35 | $vid = $info['list'][($page-1)]['vid'];
36 | if (empty($vid)) $vid = 'N/A';
37 | $videoxml = mysql_query("SELECT * FROM CACHE_VIDEO WHERE CID='{$cid}'");
38 | $videoxml = mysql_fetch_array($videoxml);
39 | $data = $videoxml['DATA'];
40 | $errorcheck = json_decode($data,true);
41 | if (empty($errorcheck["error_code"]))
42 | {
43 | $play = simplexml_load_string($data,'SimpleXMLElement',LIBXML_NOCDATA);
44 | if (($play->result)=='succ'||($play->result)=='suee')
45 | {
46 | $videolength = ($play->timelength)/1000;
47 | $part = 0;
48 | $video = '';
49 | while(!empty($play->durl->$part->url))
50 | {
51 | $partlength = (string)($play->durl->$part->length)/1000;
52 | $parturl = (string)$play->durl->$part->url;
53 | $videopart[$part] = array('url'=>$parturl,'length'=>$partlength);
54 | $part++;
55 | }
56 | $getmp4 = json_decode($apijson['MP4'],true);
57 | if (!stristr($getmp4['src'],'letv.cn'))
58 | {
59 | $getmp4 = null;
60 | }
61 | $from_real = (string)$play->from;
62 | $from_src = (string)$info['list'][($page-1)]['type'];
63 | if(empty($from_real)) $from_real = null;
64 | $src = (string)$play->src;
65 | if($src==400) $from_real='sina';
66 | if(empty($from_src)) $from_src = null;
67 | echo json_encode(array('code'=>200,'datatime'=>$datatime,'data'=>array('title'=>$info['title'],'pagecount'=>$info['pages'],'pagetitle'=>$info['list'][($page-1)]['part'],'author'=>array('id'=>$info['mid'],'nick'=>$info['author']),'info'=>array('time'=>$info['created_at'],'play'=>$info['play'],'danmaku'=>$info['video_review'],'score'=>$info['credit'],'coin'=>$info['coins'],'favourite'=>$info['favorites']),'video'=>array('source_real'=>$from_real,'source_current'=>$from_src,'length'=>$videolength,'source'=>$videopart,'mp4'=>$getmp4['src'],'danmaku'=>'http://comment.bilibili.com/'.$cid.'.xml'))));
68 | }
69 | else
70 | {
71 | echo json_encode(array('code'=>500,'error'=>'VIDEO_PARSING_ERROR:BAD_API_XML:['.$play->type.']'.$play->message));
72 | }
73 | }
74 | else
75 | {
76 | echo json_encode(array('code'=>500,'error'=>'VIDEO_PARSING_ERROR:API_ERROR:['.$errorcheck["error_code"].']'.$errorcheck["error_text"]));
77 | }
78 | }
79 | else
80 | {
81 | echo json_encode(array('code'=>404,'error'=>'PAGE_NOT_FOUND: AV'.$av.' does not have page '.$_GET["page"]));
82 | }
83 | }
84 | else
85 | {
86 | if ($info["code"]==-403)
87 | {
88 | echo json_encode(array('code'=>403,'error'=>'PERMISSION_DENIED:['.$info["code"].']'.$info["error"]));
89 | }
90 | else
91 | {
92 | echo json_encode(array('code'=>404,'error'=>'CID_NOT_FOUND:['.$info["code"].']'.$info["error"]));
93 | }
94 | }
95 | }
96 | }
97 | else
98 | {
99 | echo json_encode(array('code'=>400,'error'=>'Bad Request'));
100 | }
--------------------------------------------------------------------------------
/open/html5.php:
--------------------------------------------------------------------------------
1 | 400,'error'=>'Bad Request'));
26 | }
27 | }
28 | else
29 | $page = 1;
30 | $id = $_GET["av"].'_'.$page;
31 | $apijson = mysql_query("SELECT * FROM CACHE_PAGE WHERE ID='{$id}'");
32 | if (!mysql_num_rows($apijson))
33 | {
34 | $error = 1;
35 | $e_text = 'Error: [404] AV id not found.';
36 | }
37 | else
38 | {
39 | $apijson = mysql_fetch_array($apijson);
40 | $return = json_decode($apijson['DATA'],true);
41 | if (isset($return['list'][($page-1)]['cid']))
42 | {
43 | $cid = $return['list'][($page-1)]['cid'];
44 | $mp4 = json_decode($apijson['MP4'],true);
45 | if (stristr($mp4['src'],'letv'))
46 | {
47 | $video = $mp4['src'];
48 | $comment = 'http://comment.bilibili.com/'.$cid.'.xml';
49 | }
50 | else
51 | {
52 | $error = 9;
53 | $e_text = 'Error: [500] Could not found LETV MP4 file.';
54 | }
55 | }
56 | else
57 | {
58 | $error = 1;
59 | $e_text = 'Error: [404] Page not found.';
60 | }
61 | }
62 | }
63 | else
64 | {
65 | $error = 9;
66 | $e_text = 'Error: [400] Bad request.';
67 | }
68 | }
69 | if ($_GET["type"]=='file')
70 | {
71 | if (!empty($_GET["mp4"]))
72 | {
73 | $video = $_GET["mp4"];
74 | $comment = $_GET["comment"];
75 | }
76 | else
77 | {
78 | $error = 9;
79 | $e_text = 'Error: [400] Bad request.';
80 | }
81 | }
82 | }
83 | else
84 | {
85 | $error = 9;
86 | $e_text = 'Error: [400] Bad request.';
87 | }
88 | if ($error!=0)
89 | {
90 | echo $e_text;
91 | }
92 | else
93 | {
94 | echo '
95 |
96 |
97 |
98 |
99 |
100 |
101 |
111 |
112 |
113 |
117 |
118 |
';
119 | }
120 | ?>
--------------------------------------------------------------------------------
/html/about.php:
--------------------------------------------------------------------------------
1 |
11 |
12 | 关于 - BiliPlus
13 | 我们所度过的每个平凡的日常,也许就是连续发生的奇迹
14 |
15 |
16 | BiliPlus能够为我做什么?
17 | BiliPlus可以使您:
·方便地下载哔哩哔哩上的任意视频/弹幕文件
·选择您喜欢的弹幕播放器播放弹幕视频
·通过简洁的页面无干扰地欣赏弹幕视频
·快速搜索哔哩哔哩上的投稿/专题并直接下载/播放
18 |
19 |
20 | BiliPlus是怎样实现这些功能/获得这些数据的?
21 | 目前,BiliPlus中所有数据通过以下接口获得:
·哔哩哔哩弹幕网开放平台(api.bilibili.tv) [请参阅:
分类:API - 嗶哩嗶哩百科]
·哔哩哔哩弹幕网内部接口(interface.bilibili.tv) [请与
orz@loli.my 联系]
·吐槽弹幕网开放平台(www.tucao.cc/api_v2) [请参阅:
API_V2参数使用格式说明]
·哔哩哔哩唧唧ASS弹幕接口(非开放接口) [本接口为非开放接口,仅供哔哩哔哩唧唧及BiliPlus内部使用]
·BiliSound MP3下载接口(www.bilibili.fm) [站点升级中,请等待新版本API]
22 |
23 |
24 | 为什么我总是遇到错误?
25 | 由于BiliPlus通过哔哩哔哩开放平台实时获取信息,因此BiliPlus的稳定性依赖于哔哩哔哩开放平台,我们将不断改进程序以为您提供更好的服务。
以下是对于一些常见错误代码的解释,您可以参照这些解释明白错误原因。
[-1] app key error AppKey错误。请直接刷新数据。
[-404] no such doc 文档不存在。请确定您输入了正确的AV号。
[-503] overspeed API请求过于频繁导致B站拒绝响应。可能BiliPlus目前访客过多,请稍后刷新页面即可。
如遇到其他错误欢迎与BiliPlus联系。
26 |
27 |
28 | 位元之门
29 | 也许您会喜欢上这些位元?

#欢迎热爱二次元的站长直接与我们联系申请链接,不接受任何纯粹为提高流量的申请#
30 |
31 |
32 | Open Source License
33 |
34 |
35 |
36 | OPEN API
37 | BiliPlus提供开放API接口,通过简单易懂的方式分享站点资源,帮助开发者快速获取BiliBili视频数据。
目前可用接口:
[DOWNLOAD] 提供指定AVid和Page下的视频基础信息及源视频、MP4视频、XML弹幕下载地址
[HTML5] 提供指定AVid和Page的HTML5弹幕播放器DIV,可直接镶入页面使用
接口使用方式:
请直接和我们联系获取具体信息
38 |
39 |
40 | 联系我们
41 | E-MAIL:tundrawork(AT)gmail.com
如需快速联系,请在邮件内附上QQ联系方式。
42 |
43 |
44 | 权利声明
45 | 本站不提供任何视听上传服务,所有内容均来自正规视频站点所提供的公开引用资源。
本站所提供动画番剧资源仅供测试,如需观看请访问放映权所有方网站,制作方需要您对正版的支持!
46 |
47 |
48 | Copyright © 2014 Tundra 除“开源项目文件”及“由外部接口获取的信息”外,对站点内容保留一切权力。
49 |
--------------------------------------------------------------------------------
/task/install.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Info Fetch Engine - 安装 - BiliPlus
12 |
13 |
14 | 数据库LIST_HOT创建成功...';
146 | else
147 | echo '数据库LIST_HOT创建失败!';
148 | if (mysql_query($createtable2,$link))
149 | echo '数据库LIST_BANGUMI创建成功...';
150 | else
151 | echo '数据库LIST_BANGUMI创建失败!';
152 | if (mysql_query($createtable3,$link))
153 | echo '数据库LIST_AMINE创建成功...';
154 | else
155 | echo '数据库LIST_AMINE创建失败!';
156 | if (mysql_query($createtable4,$link))
157 | echo '数据库LIST_MUSIC创建成功...';
158 | else
159 | echo '数据库LIST_MUSIC创建失败!';
160 | if (mysql_query($createtable5,$link))
161 | echo '数据库LIST_GAME创建成功...';
162 | else
163 | echo '数据库LIST_GAME创建失败!';
164 | if (mysql_query($createtable6,$link))
165 | echo '数据库LIST_ENTERTAINMENT创建成功...';
166 | else
167 | echo '数据库LIST_ENTERTAINMENT创建失败!';
168 | if (mysql_query($createtable7,$link))
169 | echo '数据库LIST_FILM创建成功...';
170 | else
171 | echo '数据库LIST_FILM创建失败!';
172 | if (mysql_query($createtable8,$link))
173 | echo '数据库LIST_SCIENCE创建成功...';
174 | else
175 | echo '数据库LIST_SCIENCE创建失败!';
176 | if (mysql_query($createtable9,$link))
177 | echo '数据库BANGUMI创建成功...';
178 | else
179 | echo '数据库BANGUMI创建失败!';
180 | if (mysql_query($createtable10,$link))
181 | echo '数据库CACHE_PAGE创建成功...';
182 | else
183 | echo '数据库CACHE_PAGE创建失败!';
184 | if (mysql_query($createtable11,$link))
185 | echo '数据库CACHE_VIDEO创建成功...';
186 | else
187 | echo '数据库CACHE_VIDEO创建失败!';
188 | mysql_close($link);
189 | echo "系统安装完成!如有任何错误请检查MySQL连接设置和数据库状态,并在清空数据库后重新运行本页面。请在安装完成后删除此文件以避免安全问题!"
190 | ?>
191 |
192 |
--------------------------------------------------------------------------------
/js/Parsers.js:
--------------------------------------------------------------------------------
1 | /**
2 | AcFun Format
3 | Licensed Under MIT License
4 | An alternative format comment parser
5 | **/
6 | function AcfunParser(jsond){
7 | function fillRGB(string){
8 | while(string.length < 6){
9 | string = "0" + string;
10 | }
11 | return string;
12 | }
13 | var list = [];
14 | try{
15 | var jsondt = JSON.parse(jsond);
16 | }catch(e){
17 | console.log('Error: Could not parse json list!');
18 | return [];
19 | }
20 | for(var i=0;i 0){
25 | data.stime = parseFloat(xc[0]) * 1000;
26 | data.color = '#' + fillRGB(parseInt(xc[1]).toString(16));
27 | data.mode = parseInt(xc[2]);
28 | data.size = parseInt(xc[3]);
29 | if(data.mode != 7){
30 | data.text = jsondt[i].m.replace(/(\/n|\\n|\n|\r\n|\\r)/g,"\n");
31 | data.text = data.text.replace(/\r/g,"\n");
32 | data.text = data.text.replace(/\s/g,"\u00a0");
33 | }else
34 | data.text = jsondt[i].m;
35 | data.hash = xc[4];
36 | data.date = parseInt(xc[5]);
37 | if(data.mode ==7){
38 | //High level positioned dm
39 | try{
40 | var x = JSON.parse(data.text);
41 | }catch(e){
42 | console.log('[Err] Error parsing internal data for comment');
43 | console.log('[Dbg] ' + data.text);
44 | continue;
45 | }
46 | data.text = x.n; /*.replace(/\r/g,"\n");*/
47 | data.text = data.text.replace(/\ /g,"\u00a0");
48 | console.log(data.text);
49 | if(x.p != null){
50 | data.x = x.p.x;
51 | data.y = x.p.y;
52 | }else{
53 | data.x = 0;
54 | data.y = 0;
55 | }
56 | data.shadow = x.b;
57 | data.duration = 4000;
58 | if(x.l != null)
59 | data.duration = x.l* 1000;
60 | if(x.z != null){
61 | data.movable = true;
62 | data.toX = x.z[0].x;
63 | data.toY = x.z[0].y;
64 | data.moveDuration = x.z[0].l != null ? (x.z[0].l * 1000) : 500;
65 | data.moveDelay = 0;
66 | }
67 | }
68 | list.push(data);
69 | }
70 | }
71 | return list;
72 | }
73 | /**
74 | Bilibili Format
75 | Licensed Under MIT License
76 | Takes in an XMLDoc and parses that into a Generic Comment List
77 | **/
78 | function BilibiliParser(xmlDoc){
79 | //Parse into Array
80 | function fillRGB(string){
81 | while(string.length < 6){
82 | string = "0" + string;
83 | }
84 | return string;
85 | }
86 |
87 | //Format the bili output to be json-valid
88 | function format(string){
89 | return string.replace(/\t/,"\\t");
90 | }
91 |
92 | var elems = xmlDoc.getElementsByTagName('d');
93 | var tlist = [];
94 | for(var i=0;i= 7){
124 | obj.rZ = adv[5];
125 | obj.rY = adv[6];
126 | }
127 | obj.movable = false;
128 | if(adv.length >= 11){
129 | obj.movable = true;
130 | obj.toX = adv[7];
131 | obj.toY = adv[8];
132 | obj.moveDuration = 500;
133 | obj.moveDelay = 0;
134 | if(adv[9]!='')
135 | obj.moveDuration = adv[9];
136 | if(adv[10]!="")
137 | obj.moveDelay = adv[10];
138 | if(adv.length > 11){
139 | obj.shadow = adv[11];
140 | if(adv[12]!=null)
141 | obj.font = adv[12];
142 | }
143 | }
144 | obj.duration = 2500;
145 | if(adv[3] < 12){
146 | obj.duration = adv[3] * 1000;
147 | }
148 | obj.alphaFrom = 1;
149 | obj.alphaTo = 1;
150 | var tmp = adv[2].split('-');
151 | if(tmp != null && tmp.length>1){
152 | obj.alphaFrom = parseFloat(tmp[0]);
153 | obj.alphaTo = parseFloat(tmp[1]);
154 | }
155 | }catch(e){
156 | console.log('[Err] Error occurred in JSON parsing');
157 | console.log('[Dbg] ' + text);
158 | }
159 | }
160 | }
161 | //Before we push
162 | if(obj.text != null)
163 | obj.text = obj.text.replace(/\u25a0/g,"\u2588");
164 | tlist.push(obj);
165 | }
166 | }
167 | return tlist;
168 | }
169 |
--------------------------------------------------------------------------------
/play/do.php:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
14 |
15 |
16 | \'" style="border:none" class="video" height="650" width="1160">';
20 | echo '