├── 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 |
4 | 说明 5 |
6 | 解析源 7 | 此功能可获得投稿源视频文件、MP4视频文件、弹幕文件,请填写投稿AV号及分P页码。
目前仅通过调用哔哩哔哩开放API获取信息,如解析失败请检查您的节操。 8 |
9 |
10 | 提示 11 | 根据哔哩哔哩服务器情况,点击“解析”后可能需要等待数秒,请稍候。
此功能仅为方便哔哩哔哩弹幕网会员保存视频/弹幕资源用,请严格遵守投稿UP主及哔哩哔哩弹幕网的相关规定使用资源。 12 |
13 |

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 |
9 | 10 |
11 | 说明 12 |
13 | 视频/弹幕源 14 | 请填写投稿AV号及分P页码。
目前仅支持解析哔哩哔哩源。 15 |
16 |
17 | 播放器 18 | BiliPlayer 哔哩哔哩官方播放器,支持所有功能
HTML5 适合不支持Flash的移动设备/Mac OS系统使用,不支持发送弹幕 [详细浏览器支持情况]
MukioPlayer 哔哩哔哩早期播放器,支持播放器设置,支持查看/发送普通、高级弹幕,弹幕以游客身份发送 19 |
20 |

21 |
22 | 视频/弹幕源 23 | AV
24 | 分P页码:
25 |

26 |
27 | 设置 28 | 播放器:
29 |

30 |
31 |
-------------------------------------------------------------------------------- /api/search.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 搜索 6 | 7 | 8 | 11 | 14 | 17 | 18 | 19 | 22 | 23 |
9 | 10 | 12 | 13 | 15 | 16 |
20 | 21 |
24 |
25 |
-------------------------------------------------------------------------------- /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 |
13 | 14 |
15 | 说明 16 |
17 | 弹幕源 18 | 请填写投稿AV号及分P页码。 19 |
20 |
21 | 视频源 22 | 如直接使用原投稿自带视频源,请将“视频源”设置全部留空。
如使用自定义视频源,请填写相应站点的视频ID,只可填写一个站点。
由于MukioPlayer长时间未更新,各种视频源设置均可能失效。 23 |
24 |
25 | 播放器 26 | MukioPlayer为第三方播放器,支持播放器设置,支持查看/发送普通、高级弹幕,弹幕以游客身份发送。 27 |
28 |

29 |
30 | 弹幕源 31 | AV
32 | 分P页码:
33 |

34 |
35 | 视频源 36 | 新浪 vid=
37 | 优酷 ykid=
38 | 腾讯 qid=
39 | 土豆 tdid=
40 | 6间房 rid=
41 |

42 |
43 | 设置 44 | 播放器:
45 |

46 |
47 |
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 |
This site includes some file from open source projects, here is a list of the projects.
·ABPlayer HTML5 Site:https://github.com/jabbany/ABPlayerHTML5 License:MIT License
ABPlayerHTML5-bilibili-ver Site:https://github.com/Zhuogu/ABPlayerHTML5-bilibili-ver License:MIT License
·CommentCoreLibrary Site:https://github.com/jabbany/CommentCoreLibrary License:MIT License
·MukioPlayerPlus Site:http://code.google.com/p/mukioplayer License:MIT License
·AssCompressor Site:https://github.com/CHOSX/AssCompressor License:GNU General Public License
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 ''; 21 | } 22 | if ($_GET["player"]=='bilibili_bili') 23 | { 24 | echo ''; 25 | } 26 | if ($_GET["player"]=='bilibili_iqiyi720') 27 | { 28 | echo ''; 29 | } 30 | if ($_GET["player"]=='bilibili_iqiyi1080') 31 | { 32 | echo ''; 33 | } 34 | if ($_GET["player"]=='bilibili_tucao') 35 | { 36 | echo ''; 37 | } 38 | if ($_GET["player"]=='mukio') 39 | { 40 | echo ''; 41 | } 42 | if ($_GET["player"]=='mukio_3rd') 43 | { 44 | echo ''; 45 | } 46 | if ($_GET["player"]=='tucao') 47 | { 48 | echo ''; 49 | } 50 | ?> 51 | 52 | -------------------------------------------------------------------------------- /include/home.php: -------------------------------------------------------------------------------- 1 | 8 | 33 |
BiliPlus , ( ゜- ゜)つロ 乾杯~
34 |

35 |
36 |
37 |
下载视频文件/弹幕XML
38 |
39 |
40 | 41 | AV
42 |
43 |
更多高级选项……
44 |
45 |
46 |
47 |
播放弹幕视频
48 |
49 |
50 | 51 | AV
52 |
53 |
更多高级选项……
54 |
55 |
56 |
57 |
搜索投稿/专题
58 |
59 |
60 | 61 |
62 |
63 |
更多高级选项……
64 |
65 |
66 |

67 |
浏览更多视频
68 |

72 |
本站不提供任何视听上传服务,所有内容均来自正规视频站点所提供的公开引用资源。
本站所提供动画番剧资源仅供测试,如需观看请访问放映权所有方网站,制作方需要您对正版的支持!

-------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | <?php echo $title; ?> - BiliPlus - ( ゜- ゜)つロ 乾杯~ 64 | 82 | 83 | 84 |
85 | '; 89 | exit(); 90 | } 91 | if ($_COOKIE['login']==1) 92 | { 93 | echo '

欢迎,'.$_COOKIE["uname"].' | 连接哔哩哔哩账户

'; 94 | } 95 | if ($_COOKIE['login']==2) 96 | { 97 | echo '

欢迎,'.$_COOKIE["uname"].' | 退出哔哩哔哩账户

'; 98 | } 99 | ?> 100 |
101 |
102 |

少女祈祷中...
Now Loading...

103 |
104 |
105 | 108 |
109 | 121 | 122 | 128 | 129 | -------------------------------------------------------------------------------- /style/abplayer/bilibili-helper.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /style/typo.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /* 防止用户自定义背景颜色对网页的影响,添加让用户可以自定义字体 */ 4 | html { 5 | color: #444333; 6 | background: #fff; 7 | -webkit-text-size-adjust: 100%; 8 | -ms-text-size-adjust: 100%; 9 | text-rendering: optimizelegibility; 10 | } 11 | 12 | /* 内外边距通常让各个浏览器样式的表现位置不同 */ 13 | body, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { 14 | margin: 0; 15 | padding: 0; 16 | } 17 | 18 | /* 重设 HTML5 标签, IE 需要在 js 中 createElement(TAG) */ 19 | article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { 20 | display: block; 21 | } 22 | 23 | /* HTML5 媒体文件跟 img 保持一致 */ 24 | audio, canvas, video { 25 | display: inline-block; 26 | *display: inline; 27 | *zoom: 1; 28 | } 29 | 30 | /* 要注意表单元素并不继承父级 font 的问题 */ 31 | body, button, input, select, textarea { 32 | font:500 0.875em/1.8 Microsoft Yahei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif; 33 | } 34 | 35 | /* 去除 IE6 input/button 多余的空白 */ 36 | button, input { 37 | *width: auto; 38 | *overflow: visible; 39 | 40 | /* 让 input 和 button 一样高 */ 41 | line-height:22px; 42 | } 43 | 44 | /* 去掉各Table cell 的边距并让其边重合 */ 45 | table { 46 | border-collapse: collapse; 47 | border-spacing: 0; 48 | } 49 | 50 | /* IE bug fixed: th 不继承 text-align*/ 51 | th { 52 | text-align: inherit; 53 | } 54 | 55 | /* 去除默认边框 */ 56 | fieldset, img { 57 | border: 0; 58 | } 59 | 60 | /* 解决 IE6-7 图片缩放锯齿问题 */ 61 | img { 62 | -ms-interpolation-mode: bicubic; 63 | } 64 | 65 | /* ie6 7 8(q) bug 显示为行内表现 */ 66 | iframe { 67 | display: block; 68 | } 69 | 70 | /* 块/段落引用 */ 71 | blockquote { 72 | font-family:Optima, Georgia, STSong, serif; 73 | margin: 1em 0; 74 | color:#999; 75 | padding: 0.6em 1em; 76 | background:#f8f8f8; 77 | border-left: 0.4em solid #ddd; 78 | } 79 | blockquote blockquote { 80 | padding: 0 0 0 1em; 81 | margin-left: 2em; 82 | } 83 | blockquote p { 84 | margin-bottom: 0; 85 | } 86 | 87 | /* Firefox 以外,元素没有下划线,需添加 */ 88 | acronym, abbr { 89 | border-bottom: 1px dotted; 90 | font-variant: normal; 91 | } 92 | 93 | /* 添加鼠标问号,进一步确保应用的语义是正确的(要知道,交互他们也有洁癖,如果你不去掉,那得多花点口舌) */ 94 | abbr { 95 | cursor: help; 96 | } 97 | 98 | /* 一致的 del 样式 */ 99 | del { 100 | text-decoration: line-through; 101 | } 102 | 103 | address, caption, cite, code, dfn, em, th, var { 104 | font-style: normal; 105 | font-weight: 400; 106 | } 107 | 108 | /* 去掉列表前的标识, li 会继承,大部分网站通常用列表来很多内容,所以应该当去 */ 109 | ul, ol { 110 | list-style: none; 111 | } 112 | 113 | /* 对齐是排版最重要的因素, 别让什么都居中 */ 114 | caption, th { 115 | text-align: left; 116 | } 117 | 118 | q:before, q:after { 119 | content: ''; 120 | } 121 | 122 | /* 统一上标和下标 */ 123 | sub, sup { 124 | font-size: 75%; 125 | line-height: 0; 126 | position: relative; 127 | vertical-align: text-top\9; 128 | } 129 | :root sub, :root sup{ 130 | vertical-align: baseline; /* for ie9 and other mordern browsers */ 131 | } 132 | sup { 133 | top: -0.5em; 134 | } 135 | sub { 136 | bottom: -0.25em; 137 | } 138 | 139 | /* 让链接在 hover 状态下显示下划线 */ 140 | a:hover { 141 | text-decoration: underline; 142 | } 143 | 144 | /* 默认不显示下划线,保持页面简洁 */ 145 | ins, a { 146 | text-decoration: none; 147 | } 148 | 149 | /* 专名号:虽然 u 已经重回 html5 Draft,但在所有浏览器中都是可以使用的, 150 | * 要做到更好,向后兼容的话,添加 class="typo-u" 来显示专名号 151 | * 关于 标签:http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-u-element 152 | * 被放弃的是 4,之前一直搞错 http://www.w3.org/TR/html401/appendix/changes.html#idx-deprecated 153 | * 一篇关于 标签的很好文章:http://html5doctor.com/u-element/ 154 | */ 155 | u, .typo-u { 156 | text-decoration: underline; 157 | } 158 | 159 | /* 标记,类似于手写的荧光笔的作用 */ 160 | mark { 161 | background: #fffdd1; 162 | } 163 | 164 | /* 代码片断 */ 165 | pre, code { 166 | font-family: "Courier New", Courier, monospace; 167 | white-space: pre-wrap; 168 | word-wrap: break-word; 169 | } 170 | pre { 171 | background: #f8f8f8; 172 | border:1px solid #ddd; 173 | padding: 1em 1.5em; 174 | } 175 | 176 | /* 一致化 horizonal rule */ 177 | hr{ 178 | border:none; 179 | border-bottom:1px solid #cfcfcf; 180 | margin-bottom:10px; 181 | *color:pink;*filter:chroma(color=pink); 182 | height:10px; 183 | *margin:-7px 0 2px; 184 | } 185 | 186 | /* 底部印刷体、版本等标记 */ 187 | small, .typo-small, 188 | 189 | /* 图片说明 */ 190 | figcaption { 191 | font-size: 0.9em; 192 | color: #888; 193 | } 194 | 195 | /* 可拖动文件添加拖动手势 */ 196 | [draggable] { 197 | cursor: move; 198 | } 199 | 200 | .clearfix:before, .clearfix:after { 201 | content: ""; 202 | display: table; 203 | } 204 | 205 | .clearfix:after { 206 | clear: both 207 | } 208 | 209 | .clearfix { 210 | zoom: 1 211 | } 212 | 213 | /* 强制文本换行 */ 214 | .textwrap, .textwrap td, .textwrap th{ 215 | word-wrap:break-word; 216 | word-break:break-all; 217 | } 218 | .textwrap-table{ 219 | table-layout:fixed; 220 | } 221 | 222 | /* 提供 serif 版本的字体设置 */ 223 | .serif{font-family:Palatino, Optima, STSong, Georgia, serif;} 224 | 225 | /* 保证块/段落之间的空白隔行 */ 226 | .typo p, .typo pre, .typo ul, .typo ol, .typo dl, .typo form, .typo hr, .typo table, 227 | .typo-p, .typo-pre, .typo-ul, .typo-ol, .typo-dl, .typo-form, .typo-hr, .typo-table { 228 | margin-bottom: 1.2em; 229 | } 230 | 231 | h1, h2, h3, h4, h5, h6{ 232 | font-weight: 500; 233 | *font-weight: 800; 234 | font-family: Helvetica Neue, Microsoft Yahei,Hiragino Sans GB,WenQuanYi Micro Hei,sans-serif; 235 | color:#333; 236 | } 237 | 238 | /* 标题应该更贴紧内容,并与其他块区分,margin 值要相应做优化 */ 239 | .typo h1, .typo h2, .typo h3, .typo h4, .typo h5, .typo h6, 240 | .typo-h1, .typo-h2, .typo-h3, .typo-h4, .typo-h5, .typo-h6 { 241 | margin-bottom: 0.4em; 242 | line-height: 1.5; 243 | } 244 | .typo h1, .typo-h1 { 245 | font-size: 1.8em; 246 | } 247 | .typo h2, .typo-h2 { 248 | font-size: 1.6em; 249 | } 250 | .typo h3, .typo-h3 { 251 | font-size: 1.4em; 252 | } 253 | .typo h4, .typo-h4 { 254 | font-size: 1.2em; 255 | } 256 | .typo h5, .typo h6, .typo-h5, .typo-h6 { 257 | font-size: 1em; 258 | } 259 | 260 | /* 在文章中,应该还原 ul 和 ol 的样式 */ 261 | .typo ul, .typo-ul { 262 | margin-left: 1.3em; 263 | list-style: disc; 264 | } 265 | .typo ol, .typo-ol { 266 | list-style: decimal; 267 | margin-left: 1.9em; 268 | } 269 | .typo li ul, .typo li ol, .typo-ul ul, .typo-ul ol, .typo-ol ul, .typo-ol ol { 270 | margin-top: 0; 271 | margin-bottom: 0; 272 | margin-left: 2em; 273 | } 274 | .typo li ul, .typo-ul ul, .typo-ol ul { 275 | list-style: circle; 276 | } 277 | 278 | /* 同 ul/ol,在文章中应用 table 基本格式 */ 279 | .typo table th, .typo table td, .typo-table th, .typo-table td .typo table caption{ 280 | border: 1px solid #ddd; 281 | padding: 0.5em 1em; 282 | color:#666; 283 | } 284 | .typo table th, .typo-table th { 285 | background: #fbfbfb; 286 | } 287 | .typo table thead th, .typo-table thead th { 288 | background: #f1f1f1; 289 | } 290 | .typo table .caption { 291 | border-bottom:none; 292 | } 293 | 294 | /* 去除 webkit 中 input 和 textarea 的默认样式 */ 295 | .typo-input, .typo-textarea{ 296 | -webkit-appearance:none; 297 | border-radius:0; 298 | } 299 | 300 | /* 高亮选中 */ 301 | ::-moz-selection { 302 | background:#08c; 303 | color:#fff; 304 | } 305 | ::selection { 306 | background:#08c; 307 | color:#fff; 308 | } 309 | 310 | /* TODO: 供着重号使用 */ 311 | .typo-em, .typo em, legend, caption {font-weight: 700;} 312 | -------------------------------------------------------------------------------- /task/createlist.php: -------------------------------------------------------------------------------- 1 | '; 4 | echo '--------------------
'; 5 | $json1 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&page=1&pagesize=16&order=comment'); 6 | $return1 = json_decode($json1,true); 7 | $number1 = 0; 8 | while (isset($return1['list'][$number1]['aid'])) 9 | { 10 | $id1 = $number1+1; 11 | mysql_query("INSERT INTO LIST_HOT (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return1["list"][$number1]["title"]}','{$return1["list"][$number1]["aid"]}','{$return1["list"][$number1]["pic"]}','{$return1["list"][$number1]["description"]}','{$return1["list"][$number1]["play"]}','{$return1["list"][$number1]["video_review"]}','{$return1["list"][$number1]["favorites"]}')"); 12 | $number1 = $number1+1; 13 | echo 'CACHED HOT,'.$id1.'
'; 14 | } 15 | echo '--------------------
'; 16 | $json2 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=13&page=1&pagesize=16&days=7&ver=2&order=comment'); 17 | $return2 = json_decode($json2,true); 18 | $number2 = 0; 19 | while (isset($return1['list'][$number2]['aid'])) 20 | { 21 | $id2 = $number2+1; 22 | mysql_query("INSERT INTO LIST_BANGUMI (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return2["list"][$number2]["title"]}','{$return2["list"][$number2]["aid"]}','{$return2["list"][$number2]["pic"]}','{$return2["list"][$number2]["description"]}','{$return2["list"][$number2]["play"]}','{$return2["list"][$number2]["video_review"]}','{$return2["list"][$number2]["favorites"]}')"); 23 | $number2 = $number2+1; 24 | echo 'CACHED BANGUMI,'.$id2.'
'; 25 | } 26 | echo '--------------------
'; 27 | $json3 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=1&page=1&pagesize=16&days=7&ver=2&order=comment'); 28 | $return3 = json_decode($json3,true); 29 | $number3 = 0; 30 | while (isset($return3['list'][$number3]['aid'])) 31 | { 32 | $id3 = $number3+1; 33 | mysql_query("INSERT INTO LIST_AMINE (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return3["list"][$number3]["title"]}','{$return3["list"][$number3]["aid"]}','{$return3["list"][$number3]["pic"]}','{$return3["list"][$number3]["description"]}','{$return3["list"][$number3]["play"]}','{$return3["list"][$number3]["video_review"]}','{$return3["list"][$number3]["favorites"]}')"); 34 | $number3 = $number3+1; 35 | echo 'CACHED AMINE,'.$id3.'
'; 36 | } 37 | echo '--------------------
'; 38 | $json4 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=3&page=1&pagesize=16&days=7&ver=2&order=comment'); 39 | $return4 = json_decode($json4,true); 40 | $number4 = 0; 41 | while (isset($return4['list'][$number4]['aid'])) 42 | { 43 | $id4 = $number4+1; 44 | mysql_query("INSERT INTO LIST_MUSIC (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return4["list"][$number4]["title"]}','{$return4["list"][$number4]["aid"]}','{$return4["list"][$number4]["pic"]}','{$return4["list"][$number4]["description"]}','{$return4["list"][$number4]["play"]}','{$return4["list"][$number4]["video_review"]}','{$return4["list"][$number4]["favorites"]}')"); 45 | $number4 = $number4+1; 46 | echo 'CACHED MUSIC,'.$id4.'
'; 47 | } 48 | echo '--------------------
'; 49 | $json5 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=4&page=1&pagesize=16&days=7&ver=2&order=comment'); 50 | $return5 = json_decode($json5,true); 51 | $number5 = 0; 52 | while (isset($return5['list'][$number5]['aid'])) 53 | { 54 | $id5 = $number5+1; 55 | mysql_query("INSERT INTO LIST_GAME (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return5["list"][$number5]["title"]}','{$return5["list"][$number5]["aid"]}','{$return5["list"][$number5]["pic"]}','{$return5["list"][$number5]["description"]}','{$return5["list"][$number5]["play"]}','{$return5["list"][$number5]["video_review"]}','{$return5["list"][$number5]["favorites"]}')"); 56 | $number5 = $number5+1; 57 | echo 'CACHED GAME,'.$id5.'
'; 58 | } 59 | echo '--------------------
'; 60 | $json6 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=5&page=1&pagesize=16&days=7&ver=2&order=comment'); 61 | $return6 = json_decode($json6,true); 62 | $number6 = 0; 63 | while (isset($return6['list'][$number6]['aid'])) 64 | { 65 | $id6 = $number6+1; 66 | mysql_query("INSERT INTO LIST_ENTERTAINMENT (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return6["list"][$number6]["title"]}','{$return6["list"][$number6]["aid"]}','{$return6["list"][$number6]["pic"]}','{$return6["list"][$number6]["description"]}','{$return6["list"][$number6]["play"]}','{$return6["list"][$number6]["video_review"]}','{$return6["list"][$number6]["favorites"]}')"); 67 | $number6 = $number6+1; 68 | echo 'CACHED ENTERTAINMENT,'.$id6.'
'; 69 | } 70 | echo '--------------------
'; 71 | $json7 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=11&page=1&pagesize=16&days=7&ver=2&order=comment'); 72 | $return7 = json_decode($json7,true); 73 | $number7 = 0; 74 | while (isset($return7['list'][$number7]['aid'])) 75 | { 76 | $id7 = $number7+1; 77 | mysql_query("INSERT INTO LIST_FILM (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return7["list"][$number7]["title"]}','{$return7["list"][$number7]["aid"]}','{$return7["list"][$number7]["pic"]}','{$return7["list"][$number7]["description"]}','{$return7["list"][$number7]["play"]}','{$return7["list"][$number7]["video_review"]}','{$return7["list"][$number7]["favorites"]}')"); 78 | $number7 = $number7+1; 79 | echo 'CACHED FILM,'.$id7.'
'; 80 | } 81 | echo '--------------------
'; 82 | $json8 = file_get_contents('http://api.bilibili.cn/list?appkey=5a88bc9210cda8e6&type=json&tid=36&page=1&pagesize=16&days=7&ver=2&order=comment'); 83 | $return8 = json_decode($json8,true); 84 | $number8 = 0; 85 | while (isset($return7['list'][$number8]['aid'])) 86 | { 87 | $id8 = $number8+1; 88 | mysql_query("INSERT INTO LIST_SCIENCE (TITLE,AID,PIC,INFO,PLAY,DANMU,FAVOURITE) VALUES ('{$return8["list"][$number8]["title"]}','{$return8["list"][$number8]["aid"]}','{$return8["list"][$number8]["pic"]}','{$return8["list"][$number8]["description"]}','{$return8["list"][$number8]["play"]}','{$return8["list"][$number8]["video_review"]}','{$return8["list"][$number8]["favorites"]}')"); 89 | $number8 = $number8+1; 90 | echo 'CACHED SCIENCE,'.$id8.'
'; 91 | } 92 | echo '--------------------
'; 93 | /* 验证密钥生成 */ 94 | function get_sign($params, $key) 95 | { 96 | $_data = array(); 97 | ksort($params); 98 | reset($params); 99 | foreach ($params as $k => $v) 100 | { 101 | $_data[] = $k . '=' . rawurlencode($v); 102 | } 103 | $_sign = implode('&', $_data); 104 | return strtolower(md5($_sign.$key)); 105 | } 106 | /* 验证密钥生成 */ 107 | $sign = get_sign(array("type"=>"json","btype"=>"2","appkey"=>"e0dbc7885f0b0fb2","access_key"=>"f5dd9c5fa47bfeb2b5e19f037cde6ce1"),'ab31b0c788f50903583bda7111f72fa8'); 108 | $return9 = json_decode(file_get_contents('http://api.bilibili.cn/bangumi?type=json&btype=2&appkey=e0dbc7885f0b0fb2&access_key=f5dd9c5fa47bfeb2b5e19f037cde6ce1&sign='.$sign),true); 109 | $number9 = 0; 110 | while (isset($return9['list'][$number9]['spid'])) 111 | { 112 | mysql_query("INSERT INTO BANGUMI (TITLE,SPID,COVER,WEEKDAY,COUNT,CLICK,ATTENTION,LASTUPDATE) VALUES ('{$return9["list"][$number9]["title"]}','{$return9["list"][$number9]["spid"]}','{$return9["list"][$number9]["cover"]}','{$return9["list"][$number9]["weekday"]}','{$return9["list"][$number9]["bgmcount"]}','{$return9["list"][$number9]["click"]}','{$return9["list"][$number9]["attention"]}','{$return9["list"][$number9]["lastupdate_at"]}')"); 113 | $number9 = $number9+1; 114 | } 115 | echo 'CACHED BANGUMI,TOTAL:'.($number9+1).'
--------------------
'; 116 | echo 'PROCESS END.'; -------------------------------------------------------------------------------- /guide/do.php: -------------------------------------------------------------------------------- 1 | $v) 8 | { 9 | $_data[] = $k . '=' . rawurlencode($v); 10 | } 11 | $_sign = implode('&', $_data); 12 | return strtolower(md5($_sign.$key)); 13 | } 14 | function GetInfo($av,$page) 15 | { 16 | $sign = GetSign(array("type"=>"json","appkey"=>"21087a09e533a072","id"=>$av,"page"=>$page,"batch"=>"1","check_area"=>"1","platform"=>"android","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 17 | $apiurl = 'http://api.bilibili.com/view?type=json&appkey=21087a09e533a072&id='.$av.'&page='.$page.'&batch=1&check_area=1&platform=android&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign; 18 | $curl = curl_init(); 19 | curl_setopt($curl, CURLOPT_URL,$apiurl); 20 | curl_setopt($curl, CURLOPT_USERAGENT,'BiliPlus-UserGuidePage/1.0.0 (tundrawork@gmail.com)'); 21 | curl_setopt($curl, CURLOPT_REFERER,"http://www.bilibili.tv/"); 22 | curl_setopt($curl, CURLOPT_HEADER,0); 23 | curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 24 | curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); 25 | $apijson = curl_exec($curl); 26 | curl_close($curl); 27 | $info = json_decode($apijson,true); 28 | return $info; 29 | } 30 | if (strcasecmp(mb_substr($_GET['q'],0,2,'utf-8'),'AV')==0) 31 | { 32 | $str1 = mb_substr($_GET['q'],2); 33 | if(strlen($str1)<1) 34 | { 35 | $view = 0; 36 | } 37 | else 38 | { 39 | if (preg_match("/^[1-9][0-9]*$/",$str1)) 40 | { 41 | $view = 1; 42 | $av = $str1; 43 | $page = 1; 44 | } 45 | else 46 | { 47 | $view = 0; 48 | } 49 | } 50 | } 51 | else 52 | { 53 | if (mb_stripos($_GET['q'],'/video/av')) 54 | { 55 | $str1 = mb_substr($_GET['q'],(mb_stripos($_GET['q'],'/video/av')+9)); 56 | if (mb_stripos($str1,'.html')) 57 | { 58 | $view = 1; 59 | $av = mb_substr($str1,0,(mb_stripos($str1,'/index_'))); 60 | $page = mb_substr($str1,(mb_stripos($str1,'/index_')+7),(mb_stripos($str1,'.html')-(mb_stripos($str1,'/index_')+7))); 61 | } 62 | else 63 | { 64 | if (mb_substr($str1,-1)=='/') 65 | { 66 | $view = 1; 67 | $av = mb_substr($str1,0,(mb_stripos($str1,'/'))); 68 | $page = 1; 69 | } 70 | else 71 | { 72 | $view = 1; 73 | $av = $str1; 74 | $page = 1; 75 | } 76 | } 77 | } 78 | else 79 | { 80 | if (preg_match("/^[1-9][0-9]*$/",$_GET['q'])) 81 | { 82 | $view = 2; 83 | } 84 | else 85 | { 86 | $view = 0; 87 | } 88 | } 89 | } 90 | if ($view==1) 91 | { 92 | $info = GetInfo($av,$page); 93 | if (empty($info['title'])) 94 | { 95 | echo '
搜索 您输入的AV号不存在,也许您想进行搜索…

96 |
97 | 98 | 99 |
'; 100 | } 101 | else 102 | { 103 | echo '
下载/播放 成功检测到AV号,请问您需要做什么呢…

104 | 109 |
110 |
'.$info['title'].'
UP主:'.$info['author'].'
'.$info['created_at'].'
'.$info['description'].'
使用BiliPlus下载
使用BiliPlus播放

← 返回
111 |
'; 112 | } 113 | } 114 | if ($view==0) 115 | { 116 | echo '
搜索 未检测到AV号或B站视频页地址,也许您想进行搜索…

117 |
118 | 119 | 120 |
'; 121 | } 122 | if ($view==2) 123 | { 124 | echo '
下载/播放 您是否在找“AV'.$_GET['q'].'”?
125 |
请在首页输入“AV'.$_GET['q'].'”以下载/播放此投稿。

126 |
搜索 未检测到AV号或B站视频页地址,也许您想进行搜索…

127 |
128 | 129 | 130 |
'; 131 | } 132 | exit; -------------------------------------------------------------------------------- /include/list.php: -------------------------------------------------------------------------------- 1 | 21 |
分区列表
22 |
I used to be an adventurer like you, then I took an arrow in the knee.

23 | 26 |
动画
27 |
28 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 34 | $number = $number+1; 35 | } 36 | ?> 37 |

38 |
音乐·舞蹈
39 |
40 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 46 | $number = $number+1; 47 | } 48 | ?> 49 |

50 |
游戏
51 |
52 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 58 | $number = $number+1; 59 | } 60 | ?> 61 |

62 |
娱乐
63 |
64 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 70 | $number = $number+1; 71 | } 72 | ?> 73 |

74 |
科学·技术
75 |
76 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 82 | $number = $number+1; 83 | } 84 | ?> 85 |

86 |
番组
87 |
88 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 94 | $number = $number+1; 95 | } 96 | ?> 97 |

98 |
影视剧
99 |
100 |
'.$return['TITLE'].'
播放:'.$return['PLAY'].' | 弹幕:'.$return['DANMU'].' | 收藏:'.$return['FAVOURITE'].' 
下载视频文件
播放弹幕视频
'.$return['INFO'].'
'; 106 | $number = $number+1; 107 | } 108 | ?> 109 |

110 |
本站不提供任何视听上传服务,所有内容均来自正规视频站点所提供的公开引用资源。
本站所提供动画番剧资源仅供测试,如需观看请访问放映权所有方网站,制作方需要您对正版的支持!

-------------------------------------------------------------------------------- /guide/home.php: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | BiliPlus - ( ゜- ゜)つロ 乾杯~ 12 | 34 | 80 | 81 | 82 |
83 |

少女祈祷中,请稍后...
Now Loading, Please Wait...
© 2014

84 |
85 | 100 | 101 | '; -------------------------------------------------------------------------------- /include/bangumi.php: -------------------------------------------------------------------------------- 1 | 21 |
二次元 - 新番放送
22 |
(」・ω・)」うー!(/・ω・)/にゃー!

23 | 26 |
周一/Monday
27 |
28 | 怎么找也找不到呢~
'; 33 | else 34 | { 35 | while($return = mysql_fetch_array($bangumi_1)) 36 | { 37 | $title = urlencode($return['TITLE']); 38 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 39 | $number = $number+1; 40 | } 41 | } 42 | ?> 43 |

44 |
周二/Tuesday
45 |
46 | 怎么找也找不到呢~
'; 51 | else 52 | { 53 | while($return = mysql_fetch_array($bangumi_2)) 54 | { 55 | $title = urlencode($return['TITLE']); 56 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 57 | $number = $number+1; 58 | } 59 | } 60 | ?> 61 |

62 |
周三/Wednesday
63 |
64 | 怎么找也找不到呢~
'; 69 | else 70 | { 71 | while($return = mysql_fetch_array($bangumi_3)) 72 | { 73 | $title = urlencode($return['TITLE']); 74 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 75 | $number = $number+1; 76 | } 77 | } 78 | ?> 79 |

80 |
周四/Thursday
81 |
82 | 怎么找也找不到呢~
'; 87 | else 88 | { 89 | while($return = mysql_fetch_array($bangumi_4)) 90 | { 91 | $title = urlencode($return['TITLE']); 92 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 93 | $number = $number+1; 94 | } 95 | } 96 | ?> 97 |

98 |
周五/Friday
99 |
100 | 怎么找也找不到呢~
'; 105 | else 106 | { 107 | while($return = mysql_fetch_array($bangumi_5)) 108 | { 109 | $title = urlencode($return['TITLE']); 110 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 111 | $number = $number+1; 112 | } 113 | } 114 | ?> 115 |

116 |
周六/Saturday
117 |
118 | 怎么找也找不到呢~
'; 123 | else 124 | { 125 | while($return = mysql_fetch_array($bangumi_6)) 126 | { 127 | $title = urlencode($return['TITLE']); 128 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 129 | $number = $number+1; 130 | } 131 | } 132 | ?> 133 |

134 |
周日/Sunday
135 |
136 | 怎么找也找不到呢~
'; 141 | else 142 | { 143 | while($return = mysql_fetch_array($bangumi_7)) 144 | { 145 | $title = urlencode($return['TITLE']); 146 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 147 | $number = $number+1; 148 | } 149 | } 150 | ?> 151 |

152 |
本站不提供任何视听上传服务,所有内容均来自正规视频站点所提供的公开引用资源。
本站所提供动画番剧资源仅供测试,如需观看请访问放映权所有方网站,制作方需要您对正版的支持!

-------------------------------------------------------------------------------- /include/dorama.php: -------------------------------------------------------------------------------- 1 | 23 |
三次元 - 新番放送
24 |
我们一路奋战,不是为了改变世界,而是为了不让世界改变我们。

25 |
26 | 周一/Monday 35 |
'; 36 | $bangumi_1 = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='1'"); 37 | $number = 0; 38 | if (!mysql_fetch_array($bangumi_1)) 39 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 40 | else 41 | { 42 | while($return = mysql_fetch_array($bangumi_1)) 43 | { 44 | $title = urlencode($return['TITLE']); 45 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 46 | $number = $number+1; 47 | } 48 | } 49 | echo '

'; 50 | } 51 | if ($weekday==2) 52 | { 53 | echo '
周二/Tuesday
54 |
'; 55 | $bangumi = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='2'"); 56 | $number = 0; 57 | if (!mysql_fetch_array($bangumi)) 58 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 59 | else 60 | { 61 | while($return = mysql_fetch_array($bangumi)) 62 | { 63 | $title = urlencode($return['TITLE']); 64 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 65 | $number = $number+1; 66 | } 67 | } 68 | echo '

'; 69 | } 70 | if ($weekday==3) 71 | { 72 | echo '
周三/Wednesday
73 |
'; 74 | $bangumi_1 = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='3'"); 75 | $number = 0; 76 | if (!mysql_fetch_array($bangumi_1)) 77 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 78 | else 79 | { 80 | while($return = mysql_fetch_array($bangumi_1)) 81 | { 82 | $title = urlencode($return['TITLE']); 83 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 84 | $number = $number+1; 85 | } 86 | } 87 | echo '

'; 88 | } 89 | if ($weekday==4) 90 | { 91 | echo '
周四/Thursday
92 |
'; 93 | $bangumi_1 = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='4'"); 94 | $number = 0; 95 | if (!mysql_fetch_array($bangumi_1)) 96 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 97 | else 98 | { 99 | while($return = mysql_fetch_array($bangumi_1)) 100 | { 101 | $title = urlencode($return['TITLE']); 102 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 103 | $number = $number+1; 104 | } 105 | } 106 | echo '

'; 107 | } 108 | if ($weekday==5) 109 | { 110 | echo '
周五/Friday
111 |
'; 112 | $bangumi_1 = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='5'"); 113 | $number = 0; 114 | if (!mysql_fetch_array($bangumi_1)) 115 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 116 | else 117 | { 118 | while($return = mysql_fetch_array($bangumi_1)) 119 | { 120 | $title = urlencode($return['TITLE']); 121 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 122 | $number = $number+1; 123 | } 124 | } 125 | echo '

'; 126 | } 127 | if ($weekday==6) 128 | { 129 | echo '
周六/Saturday
130 |
'; 131 | $bangumi_1 = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='6'"); 132 | $number = 0; 133 | if (!mysql_fetch_array($bangumi_1)) 134 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 135 | else 136 | { 137 | while($return = mysql_fetch_array($bangumi_1)) 138 | { 139 | $title = urlencode($return['TITLE']); 140 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 141 | $number = $number+1; 142 | } 143 | } 144 | echo '

'; 145 | } 146 | if ($weekday==0) 147 | { 148 | echo '
周日/Sunday
149 |
'; 150 | $bangumi = mysql_query("SELECT * FROM BANGUMI WHERE TYPE='3' AND WEEKDAY='0'"); 151 | $number = 0; 152 | if (!mysql_fetch_array($bangumi_1)) 153 | echo '
怎么找也找不到呢~ ⊙ω⊙
'; 154 | else 155 | { 156 | while($return = mysql_fetch_array($bangumi_1)) 157 | { 158 | $title = urlencode($return['TITLE']); 159 | echo '
'.$return['TITLE'].'
点击:'.$return['CLICK'].' | 关注:'.$return['ATTENTION'].' 
共 '.$return['COUNT'].' 话
'.$return['LASTUPDATE'].'
打开新番专题列表
'; 160 | $number = $number+1; 161 | } 162 | } 163 | echo '

'; 164 | } 165 | ?> 166 |
本站不提供任何视听上传服务,所有内容均来自正规视频站点所提供的公开引用资源。
本站所提供影视番剧资源仅供测试,如需观看请访问放映权所有方网站,制作方需要您对正版的支持!

-------------------------------------------------------------------------------- /api/test.php: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | <?php echo $title; ?> - Bilibili API/Interface Testing Tool - BiliPlus 23 | 26 | 27 | 28 |

Bilibili API/Interface Testing Tool

29 |
30 | $v) 37 | { 38 | $_data[] = $k . '=' . rawurlencode($v); 39 | } 40 | $_sign = implode('&', $_data); 41 | return strtolower(md5($_sign.$key)); 42 | } 43 | function UpdateCache($av,$page) 44 | { 45 | global $apijson; 46 | global $mp4json; 47 | global $cid; 48 | global $videoxml; 49 | if (empty($_COOKIE["access_key"])) 50 | { 51 | echo 'ERROR: System_Error [-403] Access_Key not found
Please visit the following url to login. 请使用下方链接登录后刷新本页面。

https://secure.bilibili.com/login?api=http%3A%2F%2Fi.bilicloud.com%2Fapi%2Flogin.php&appkey=fb83589f598aa390&sign=401a93108b41aa57efb518199ce674ce'; 52 | } 53 | else 54 | { 55 | echo '

ACCESS_KEY

'; 56 | echo $_COOKIE["access_key"]; 57 | echo '
'; 58 | echo '

API_VIEW

'; 59 | echo '

Request

'; 60 | $sign = get_sign(array("type"=>"json","appkey"=>"fb83589f598aa390","id"=>$av,"page"=>$page,"batch"=>"1","check_area"=>"1","platform"=>"ios","access_key"=>$_COOKIE["access_key"]),'e14c7832fc119a032b9fd132b5ad1b59'); 61 | $headers['CLIENT-IP'] = '58.32.100.0'; 62 | $headers['X-FORWARDED-FOR'] = '58.32.100.0'; 63 | $headers['Accept-Encoding'] = 'gzip,deflate,sdcl'; 64 | $headerArr = array(); 65 | foreach($headers as $n=>$v){$headerArr[] = $n.':'.$v;} 66 | $apiurl = 'http://api.bilibili.com/view?type=json&appkey=fb83589f598aa390&id='.$av.'&page='.$page.'&batch=1&check_area=1&platform=ios&access_key='.$_COOKIE["access_key"].'&sign='.$sign; 67 | /*echo '-HIDDEN-';*/echo $apiurl; 68 | echo '
'; 69 | echo '

Response

'; 70 | $curl = curl_init(); 71 | curl_setopt($curl, CURLOPT_URL,$apiurl); 72 | curl_setopt($curl, CURLOPT_HTTPHEADER,$headerArr); 73 | curl_setopt($curl, CURLOPT_USERAGENT,'BiliBili API Helper/1.0.0 (tundrawork@gmail.com)'); 74 | curl_setopt($curl, CURLOPT_REFERER,"http://www.bilibili.tv/"); 75 | curl_setopt($curl, CURLOPT_HEADER,0); 76 | curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 77 | curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); 78 | $apijson = curl_exec($curl); 79 | curl_close($curl); 80 | echo $apijson; 81 | echo '
'; 82 | $info = json_decode($apijson,true); 83 | echo '

Decode

'; 84 | if (!array_key_exists("code",$info)) 85 | { 86 | if (isset($info['list'][($page-1)]['cid'])) 87 | { 88 | echo 'SUCCESS'; 89 | echo '
'; 90 | $cid = $info['list'][($page-1)]['cid']; 91 | echo '

INTERFACE_PLAYURL

'; 92 | echo '

Request

'; 93 | $interfaceurl = 'http://interface.bilibili.com/playurl?otype=xml&type=flv&platform=ios&appkey=fb83589f598aa390&cid='.$cid.'&access_key='.$_COOKIE["access_key"]; 94 | /*echo '-HIDDEN-';*/echo $interfaceurl; 95 | echo '
'; 96 | echo '

Response

'; 97 | $curl = curl_init(); 98 | curl_setopt($curl, CURLOPT_URL,$interfaceurl); 99 | curl_setopt($curl, CURLOPT_HTTPHEADER,$headerArr); 100 | curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; WOW64; Trident/6.0)'); 101 | curl_setopt($curl, CURLOPT_REFERER,"http://www.bilibili.tv/"); 102 | curl_setopt($curl, CURLOPT_HEADER,0); 103 | curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 104 | curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); 105 | $videoxml = curl_exec($curl); 106 | curl_close($curl); 107 | echo str_ireplace(' ','    ',nl2br(htmlspecialchars($videoxml))); 108 | echo '
'; 109 | echo '

Decode

'; 110 | $errorcheck = json_decode($videoxml,true); 111 | if (empty($errorcheck["error_code"])) 112 | { 113 | $play = simplexml_load_string($videoxml,'SimpleXMLElement',LIBXML_NOCDATA); 114 | if (($play->result)=='succ'||($play->result)=='suee') 115 | { 116 | echo 'SUCCESS'; 117 | } 118 | else 119 | { 120 | echo 'ERROR: XML_Decode_Error ['.$play->type.'] '.$play->message; 121 | } 122 | } 123 | else 124 | { 125 | echo 'ERROR: API_Error ['.$errorcheck["error_code"].'] '.$errorcheck["error_text"]; 126 | } 127 | echo '
'; 128 | echo '

INTERFACE_CDN

'; 129 | echo '

Request

'; 130 | $cdnurl = 'http://interface.bilibili.com/v_cdn_play?otype=xml&appkey=fb83589f598aa390&cid='.$cid.'&access_key='.$_COOKIE["access_key"]; 131 | /*echo '-HIDDEN-';*/echo $cdnurl; 132 | echo '
'; 133 | echo '

Response

'; 134 | $curl = curl_init(); 135 | curl_setopt($curl, CURLOPT_URL,$cdnurl); 136 | curl_setopt($curl, CURLOPT_HTTPHEADER,$headerArr); 137 | curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; WOW64; Trident/6.0)'); 138 | curl_setopt($curl, CURLOPT_REFERER,"http://www.bilibili.tv/"); 139 | curl_setopt($curl, CURLOPT_HEADER,0); 140 | curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 141 | curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); 142 | $cdnxml = curl_exec($curl); 143 | curl_close($curl); 144 | echo str_ireplace(' ','    ',nl2br(htmlspecialchars($cdnxml))); 145 | echo '
'; 146 | echo '

Decode

'; 147 | $errorcheck = json_decode($cdnxml,true); 148 | if (empty($errorcheck["error_code"])) 149 | { 150 | $play = simplexml_load_string($cdnxml,'SimpleXMLElement',LIBXML_NOCDATA); 151 | if (($play->result)=='succ'||($play->result)=='suee') 152 | { 153 | echo 'SUCCESS'; 154 | } 155 | else 156 | { 157 | echo 'ERROR: XML_Decode_Error ['.$play->type.'] '.$play->message; 158 | } 159 | } 160 | else 161 | { 162 | echo 'ERROR: API_Error ['.$errorcheck["error_code"].'] '.$errorcheck["error_text"]; 163 | } 164 | echo '
'; 165 | echo '

INTERFACE_HTML5

'; 166 | echo '

Request

'; 167 | $html5url = 'http://www.bilibili.com/m/html5?aid='.$av.'&page='.$page; 168 | /*echo '-HIDDEN-';*/echo $html5url; 169 | echo '
'; 170 | echo '

Response

'; 171 | $curl = curl_init(); 172 | curl_setopt($curl, CURLOPT_URL,$html5url); 173 | curl_setopt($curl, CURLOPT_HTTPHEADER,$headerArr); 174 | curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Linux; U; Android 4.3; en-us; Nexus 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36'); 175 | curl_setopt($curl, CURLOPT_REFERER,"http://m.acg.tv/"); 176 | curl_setopt($curl, CURLOPT_HEADER,0); 177 | curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 178 | curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); 179 | $mp4json = curl_exec($curl); 180 | curl_close($curl); 181 | echo nl2br(htmlspecialchars($mp4json)); 182 | echo '
'; 183 | echo '

Decode

'; 184 | $src = json_decode($mp4json,true); 185 | if (!empty($src['src'])) 186 | { 187 | if (stristr($src['src'],'g3.letv.cn')) 188 | { 189 | echo 'SUCCESS'; 190 | } 191 | else 192 | { 193 | echo 'ERROR: JSON_Decode_Error [-404] MP4 not found'; 194 | } 195 | } 196 | else 197 | { 198 | echo 'ERROR: API_Error [-503] Service Unavailable'; 199 | } 200 | echo '
'; 201 | echo '

INTERFACE_PLAYER

'; 202 | echo '

Request

'; 203 | $playerurl = 'http://interface.bilibili.com/player?id=cid:'.$cid; 204 | /*echo '-HIDDEN-';*/echo $playerurl; 205 | echo '
'; 206 | echo '

Response

'; 207 | $curl = curl_init(); 208 | curl_setopt($curl, CURLOPT_URL,$playerurl); 209 | curl_setopt($curl, CURLOPT_HTTPHEADER,$headerArr); 210 | curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; WOW64; Trident/6.0)'); 211 | curl_setopt($curl, CURLOPT_REFERER,"http://www.bilibili.tv/"); 212 | curl_setopt($curl, CURLOPT_HEADER,0); 213 | curl_setopt($curl, CURLOPT_RETURNTRANSFER,1); 214 | curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1); 215 | $playerxml = curl_exec($curl); 216 | curl_close($curl); 217 | echo nl2br(htmlspecialchars($playerxml)); 218 | echo '
'; 219 | echo '

Decode

'; 220 | if (stripos($playerxml,'')) 221 | { 222 | //$aid = substr($playerxml,(stripos($playerxml,'')+5),(stripos($playerxml,'')-1)); 223 | echo 'SUCCESS'; 224 | } 225 | else 226 | { 227 | echo 'ERROR: XML_Decode_Error [-500] AID not found'; 228 | } 229 | } 230 | else 231 | { 232 | echo 'ERROR: JSON_Decode_Error [-500] CID not found'; 233 | } 234 | } 235 | else 236 | { 237 | echo 'ERROR: API_Error ['.$info["code"].'] '.$info["error"]; 238 | } 239 | } 240 | } 241 | if (!empty($_GET["av"])) 242 | { 243 | UpdateCache($_GET["av"],$page); 244 | } 245 | else 246 | { 247 | echo 'ERROR: System_Error [-400] Bad Request.'; 248 | } 249 | ?> 250 |
251 |
252 |
253 |

© TundraWork Some rights reserved.

254 | 255 | -------------------------------------------------------------------------------- /task/getlist.php: -------------------------------------------------------------------------------- 1 | $v) 9 | { 10 | $_data[] = $k . '=' . rawurlencode($v); 11 | } 12 | $_sign = implode('&', $_data); 13 | return strtolower(md5($_sign.$key)); 14 | } 15 | /* 验证密钥生成 */ 16 | include_once dirname(__FILE__).'/mysql.php'; 17 | echo 'EXECTING...
'; 18 | echo '--------------------
'; 19 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","page"=>"1","pagesize"=>"16","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 20 | $json1 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&page=1&pagesize=16&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 21 | $return1 = json_decode($json1,true); 22 | $number1 = 0; 23 | while (isset($return1["list"][$number1]["aid"])) 24 | { 25 | $id1 = $number1+1; 26 | mysql_query("UPDATE LIST_HOT SET TITLE ='{$return1["list"][$number1]["title"]}' WHERE ID='{$id1}'"); 27 | mysql_query("UPDATE LIST_HOT SET AID ='{$return1["list"][$number1]["aid"]}' WHERE ID='{$id1}'"); 28 | mysql_query("UPDATE LIST_HOT SET PIC ='{$return1["list"][$number1]["pic"]}' WHERE ID='{$id1}'"); 29 | mysql_query("UPDATE LIST_HOT SET INFO ='{$return1["list"][$number1]["description"]}' WHERE ID='{$id1}'"); 30 | mysql_query("UPDATE LIST_HOT SET PLAY ='{$return1["list"][$number1]["play"]}' WHERE ID='{$id1}'"); 31 | mysql_query("UPDATE LIST_HOT SET DANMU ='{$return1["list"][$number1]["video_review"]}' WHERE ID='{$id1}'"); 32 | mysql_query("UPDATE LIST_HOT SET FAVOURITE ='{$return1["list"][$number1]["favorites"]}' WHERE ID='{$id1}'"); 33 | $number1 = $number1+1; 34 | } 35 | echo 'CACHED LIST_HOT,TOTAL:'.$id1.'
'; 36 | echo '--------------------
'; 37 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"13","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 38 | $json2 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=13&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 39 | $return2 = json_decode($json2,true); 40 | $number2 = 0; 41 | while (isset($return2["list"][$number2]["aid"])) 42 | { 43 | $id2 = $number2+1; 44 | mysql_query("UPDATE LIST_BANGUMI SET TITLE ='{$return2["list"][$number2]["title"]}' WHERE ID='{$id2}'"); 45 | mysql_query("UPDATE LIST_BANGUMI SET AID ='{$return2["list"][$number2]["aid"]}' WHERE ID='{$id2}'"); 46 | mysql_query("UPDATE LIST_BANGUMI SET PIC ='{$return2["list"][$number2]["pic"]}' WHERE ID='{$id2}'"); 47 | mysql_query("UPDATE LIST_BANGUMI SET INFO ='{$return2["list"][$number2]["description"]}' WHERE ID='{$id2}'"); 48 | mysql_query("UPDATE LIST_BANGUMI SET PLAY ='{$return2["list"][$number2]["play"]}' WHERE ID='{$id2}'"); 49 | mysql_query("UPDATE LIST_BANGUMI SET DANMU ='{$return2["list"][$number2]["video_review"]}' WHERE ID='{$id2}'"); 50 | mysql_query("UPDATE LIST_BANGUMI SET FAVOURITE ='{$return2["list"][$number2]["favorites"]}' WHERE ID='{$id2}'"); 51 | $number2 = $number2+1; 52 | } 53 | echo 'CACHED LIST_BANGUMI,TOTAL:'.$id1.'
'; 54 | echo '--------------------
'; 55 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"1","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 56 | $json3 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=1&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 57 | $return3 = json_decode($json3,true); 58 | $number3 = 0; 59 | while (isset($return3["list"][$number3]["aid"])) 60 | { 61 | $id3 = $number3+1; 62 | mysql_query("UPDATE LIST_AMINE SET TITLE ='{$return3["list"][$number3]["title"]}' WHERE ID='{$id3}'"); 63 | mysql_query("UPDATE LIST_AMINE SET AID ='{$return3["list"][$number3]["aid"]}' WHERE ID='{$id3}'"); 64 | mysql_query("UPDATE LIST_AMINE SET PIC ='{$return3["list"][$number3]["pic"]}' WHERE ID='{$id3}'"); 65 | mysql_query("UPDATE LIST_AMINE SET INFO ='{$return3["list"][$number3]["description"]}' WHERE ID='{$id3}'"); 66 | mysql_query("UPDATE LIST_AMINE SET PLAY ='{$return3["list"][$number3]["play"]}' WHERE ID='{$id3}'"); 67 | mysql_query("UPDATE LIST_AMINE SET DANMU ='{$return3["list"][$number3]["video_review"]}' WHERE ID='{$id3}'"); 68 | mysql_query("UPDATE LIST_AMINE SET FAVOURITE ='{$return3["list"][$number3]["favorites"]}' WHERE ID='{$id3}'"); 69 | $number3 = $number3+1; 70 | } 71 | echo 'CACHED LIST_AMINE,TOTAL:'.$id1.'
'; 72 | echo '--------------------
'; 73 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"3","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 74 | $json4 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=3&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 75 | $return4 = json_decode($json4,true); 76 | $number4 = 0; 77 | while (isset($return4["list"][$number4]["aid"])) 78 | { 79 | $id4 = $number4+1; 80 | mysql_query("UPDATE LIST_MUSIC SET TITLE ='{$return4["list"][$number4]["title"]}' WHERE ID='{$id4}'"); 81 | mysql_query("UPDATE LIST_MUSIC SET AID ='{$return4["list"][$number4]["aid"]}' WHERE ID='{$id4}'"); 82 | mysql_query("UPDATE LIST_MUSIC SET PIC ='{$return4["list"][$number4]["pic"]}' WHERE ID='{$id4}'"); 83 | mysql_query("UPDATE LIST_MUSIC SET INFO ='{$return4["list"][$number4]["description"]}' WHERE ID='{$id4}'"); 84 | mysql_query("UPDATE LIST_MUSIC SET PLAY ='{$return4["list"][$number4]["play"]}' WHERE ID='{$id4}'"); 85 | mysql_query("UPDATE LIST_MUSIC SET DANMU ='{$return4["list"][$number4]["video_review"]}' WHERE ID='{$id4}'"); 86 | mysql_query("UPDATE LIST_MUSIC SET FAVOURITE ='{$return4["list"][$number4]["favorites"]}' WHERE ID='{$id4}'"); 87 | $number4 = $number4+1; 88 | } 89 | echo 'CACHED LIST_MUSIC,TOTAL:'.$id1.'
'; 90 | echo '--------------------
'; 91 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"4","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 92 | $json5 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=4&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 93 | $return5 = json_decode($json5,true); 94 | $number5 = 0; 95 | while (isset($return5["list"][$number5]["aid"])) 96 | { 97 | $id5 = $number5+1; 98 | mysql_query("UPDATE LIST_GAME SET TITLE ='{$return5["list"][$number5]["title"]}' WHERE ID='{$id5}'"); 99 | mysql_query("UPDATE LIST_GAME SET AID ='{$return5["list"][$number5]["aid"]}' WHERE ID='{$id5}'"); 100 | mysql_query("UPDATE LIST_GAME SET PIC ='{$return5["list"][$number5]["pic"]}' WHERE ID='{$id5}'"); 101 | mysql_query("UPDATE LIST_GAME SET INFO ='{$return5["list"][$number5]["description"]}' WHERE ID='{$id5}'"); 102 | mysql_query("UPDATE LIST_GAME SET PLAY ='{$return5["list"][$number5]["play"]}' WHERE ID='{$id5}'"); 103 | mysql_query("UPDATE LIST_GAME SET DANMU ='{$return5["list"][$number5]["video_review"]}' WHERE ID='{$id5}'"); 104 | mysql_query("UPDATE LIST_GAME SET FAVOURITE ='{$return5["list"][$number5]["favorites"]}' WHERE ID='{$id5}'"); 105 | $number5 = $number5+1; 106 | } 107 | echo 'CACHED LIST_GAME,TOTAL:'.$id1.'
'; 108 | echo '--------------------
'; 109 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"5","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 110 | $json6 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=5&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 111 | $return6 = json_decode($json6,true); 112 | $number6 = 0; 113 | while (isset($return6["list"][$number6]["aid"])) 114 | { 115 | $id6 = $number6+1; 116 | mysql_query("UPDATE LIST_ENTERTAINMENT SET TITLE ='{$return6["list"][$number6]["title"]}' WHERE ID='{$id6}'"); 117 | mysql_query("UPDATE LIST_ENTERTAINMENT SET AID ='{$return6["list"][$number6]["aid"]}' WHERE ID='{$id6}'"); 118 | mysql_query("UPDATE LIST_ENTERTAINMENT SET PIC ='{$return6["list"][$number6]["pic"]}' WHERE ID='{$id6}'"); 119 | mysql_query("UPDATE LIST_ENTERTAINMENT SET INFO ='{$return6["list"][$number6]["description"]}' WHERE ID='{$id6}'"); 120 | mysql_query("UPDATE LIST_ENTERTAINMENT SET PLAY ='{$return6["list"][$number6]["play"]}' WHERE ID='{$id6}'"); 121 | mysql_query("UPDATE LIST_ENTERTAINMENT SET DANMU ='{$return6["list"][$number6]["video_review"]}' WHERE ID='{$id6}'"); 122 | mysql_query("UPDATE LIST_ENTERTAINMENT SET FAVOURITE ='{$return6["list"][$number6]["favorites"]}' WHERE ID='{$id6}'"); 123 | $number6 = $number6+1; 124 | } 125 | echo 'CACHED LIST_ENTERTAINMENT,TOTAL:'.$id1.'
'; 126 | echo '--------------------
'; 127 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"11","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 128 | $json7 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=11&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 129 | $return7 = json_decode($json7,true); 130 | $number7 = 0; 131 | while (isset($return7["list"][$number7]["aid"])) 132 | { 133 | $id7 = $number7+1; 134 | mysql_query("UPDATE LIST_FILM SET TITLE ='{$return7["list"][$number7]["title"]}' WHERE ID='{$id7}'"); 135 | mysql_query("UPDATE LIST_FILM SET AID ='{$return7["list"][$number7]["aid"]}' WHERE ID='{$id7}'"); 136 | mysql_query("UPDATE LIST_FILM SET PIC ='{$return7["list"][$number7]["pic"]}' WHERE ID='{$id7}'"); 137 | mysql_query("UPDATE LIST_FILM SET INFO ='{$return7["list"][$number7]["description"]}' WHERE ID='{$id7}'"); 138 | mysql_query("UPDATE LIST_FILM SET PLAY ='{$return7["list"][$number7]["play"]}' WHERE ID='{$id7}'"); 139 | mysql_query("UPDATE LIST_FILM SET DANMU ='{$return7["list"][$number7]["video_review"]}' WHERE ID='{$id7}'"); 140 | mysql_query("UPDATE LIST_FILM SET FAVOURITE ='{$return7["list"][$number7]["favorites"]}' WHERE ID='{$id7}'"); 141 | $number7 = $number7+1; 142 | } 143 | echo 'CACHED LIST_FILM,TOTAL:'.$id1.'
'; 144 | echo '--------------------
'; 145 | $sign = get_sign(array("appkey"=>"21087a09e533a072","type"=>"json","tid"=>"36","page"=>"1","pagesize"=>"16","days"=>"7","ver"=>"2","order"=>"promote","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 146 | $json8 = file_get_contents('http://api.bilibili.com/list?appkey=21087a09e533a072&type=json&tid=36&page=1&pagesize=16&days=7&ver=2&order=promote&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign); 147 | $return8 = json_decode($json8,true); 148 | $number8 = 0; 149 | while (isset($return8["list"][$number8]["aid"])) 150 | { 151 | $id8 = $number8+1; 152 | mysql_query("UPDATE LIST_SCIENCE SET TITLE ='{$return8["list"][$number8]["title"]}' WHERE ID='{$id8}'"); 153 | mysql_query("UPDATE LIST_SCIENCE SET AID ='{$return8["list"][$number8]["aid"]}' WHERE ID='{$id8}'"); 154 | mysql_query("UPDATE LIST_SCIENCE SET PIC ='{$return8["list"][$number8]["pic"]}' WHERE ID='{$id8}'"); 155 | mysql_query("UPDATE LIST_SCIENCE SET INFO ='{$return8["list"][$number8]["description"]}' WHERE ID='{$id8}'"); 156 | mysql_query("UPDATE LIST_SCIENCE SET PLAY ='{$return8["list"][$number8]["play"]}' WHERE ID='{$id8}'"); 157 | mysql_query("UPDATE LIST_SCIENCE SET DANMU ='{$return8["list"][$number8]["video_review"]}' WHERE ID='{$id8}'"); 158 | mysql_query("UPDATE LIST_SCIENCE SET FAVOURITE ='{$return8["list"][$number8]["favorites"]}' WHERE ID='{$id8}'"); 159 | $number8 = $number8+1; 160 | } 161 | echo 'CACHED LIST_SCIENCE,TOTAL:'.$id1.'
'; 162 | echo '--------------------
'; 163 | mysql_query("DELETE FROM BANGUMI"); 164 | echo 'CLEARED BANGUMI CACHE'; 165 | echo '--------------------
'; 166 | $sign = get_sign(array("type"=>"json","btype"=>"2","appkey"=>"21087a09e533a072","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 167 | $return9 = json_decode(file_get_contents('http://api.bilibili.com/bangumi?type=json&btype=2&appkey=21087a09e533a072&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign),true); 168 | $number9 = 0; 169 | while (isset($return9['list'][$number9]['spid'])) 170 | { 171 | mysql_query("INSERT INTO BANGUMI (TITLE,TYPE,SPID,COVER,WEEKDAY,COUNT,CLICK,ATTENTION,LASTUPDATE) VALUES ('{$return9["list"][$number9]["title"]}','2','{$return9["list"][$number9]["spid"]}','{$return9["list"][$number9]["cover"]}','{$return9["list"][$number9]["weekday"]}','{$return9["list"][$number9]["bgmcount"]}','{$return9["list"][$number9]["click"]}','{$return9["list"][$number9]["attention"]}','{$return9["list"][$number9]["lastupdate_at"]}')"); 172 | $number9 = $number9+1; 173 | } 174 | echo 'CACHED BANGUMI_2,TOTAL:'.($number9+1).'
--------------------
'; 175 | echo '--------------------
'; 176 | $sign = get_sign(array("type"=>"json","btype"=>"3","appkey"=>"21087a09e533a072","access_key"=>"237ecfe4b4795a715ea320acda31015a"),'e5b8ba95cab6104100be35739304c23a'); 177 | $return9 = json_decode(file_get_contents('http://api.bilibili.com/bangumi?type=json&btype=3&appkey=21087a09e533a072&access_key=237ecfe4b4795a715ea320acda31015a&sign='.$sign),true); 178 | $number9 = 0; 179 | while (isset($return9['list'][$number9]['spid'])) 180 | { 181 | mysql_query("INSERT INTO BANGUMI (TITLE,TYPE,SPID,COVER,WEEKDAY,COUNT,CLICK,ATTENTION,LASTUPDATE) VALUES ('{$return9["list"][$number9]["title"]}','3','{$return9["list"][$number9]["spid"]}','{$return9["list"][$number9]["cover"]}','{$return9["list"][$number9]["weekday"]}','{$return9["list"][$number9]["bgmcount"]}','{$return9["list"][$number9]["click"]}','{$return9["list"][$number9]["attention"]}','{$return9["list"][$number9]["lastupdate_at"]}')"); 182 | $number9 = $number9+1; 183 | } 184 | echo 'CACHED BANGUMI_3,TOTAL:'.($number9+1).'
--------------------
'; 185 | echo '--------------------
'; 186 | echo 'SUCCESS!'; -------------------------------------------------------------------------------- /js/CommentCoreLibrary.js: -------------------------------------------------------------------------------- 1 | /*!Copyright(c) CommentCoreLibrary (//github.com/jabbany/CommentCoreLibrary) - Licensed under the MIT License */function CommentFilter(){this.modifiers=[],this.runtime=null,this.allowTypes={1:!0,4:!0,5:!0,6:!0,7:!0,8:!0,17:!0},this.doModify=function(a){for(var b=0;b0){if(f.stime=1e3*parseFloat(g[0]),f.color=parseInt(g[1]),f.mode=parseInt(g[2]),f.size=parseInt(g[3]),f.hash=g[4],f.date=parseInt(g[5]),f.position="absolute",7!=f.mode?(f.text=c[e].m.replace(/(\/n|\\n|\n|\r\n|\\r)/g,"\n"),f.text=f.text.replace(/\r/g,"\n"),f.text=f.text.replace(/\s/g," ")):f.text=c[e].m,7==f.mode){try{var h=JSON.parse(f.text)}catch(d){console.log("[Err] Error parsing internal data for comment"),console.log("[Dbg] "+f.text);continue}if(f.position="relative",f.text=h.n,f.text=f.text.replace(/\ /g," "),console.log(f.text),f.opacity=null!=h.a?h.a:1,null!=h.p?(f.x=h.p.x/1e3,f.y=h.p.y/1e3):(f.x=0,f.y=0),f.shadow=h.b,f.dur=4e3,null!=h.l&&(f.moveDelay=1e3*h.l),null!=h.z&&h.z.length>0){f.movable=!0,f.motion=[];for(var i=0,j={x:f.x,y:f.y,alpha:f.opacity,color:f.color},k=0;k=7&&(j.rZ=parseInt(adv[5],10),j.rY=parseInt(adv[6],10)),j.motion=[],j.movable=!1,adv.length>=11){j.movable=!0;var k=500,l={x:{from:j.x,to:parseFloat(adv[7]),dur:k,delay:0},y:{from:j.y,to:parseFloat(adv[8]),dur:k,delay:0}};if(""!==adv[9]&&(k=parseInt(adv[9],10),l.x.dur=k,l.y.dur=k),""!==adv[10]&&(l.x.delay=parseInt(adv[10],10),l.y.delay=parseInt(adv[10],10)),adv.length>11&&(j.shadow=adv[11],"true"===j.shadow&&(j.shadow=!0),"false"===j.shadow&&(j.shadow=!1),null!=adv[12]&&(j.font=adv[12]),adv.length>14)){"relative"===j.position&&(console.log("Cannot mix relative and absolute positioning"),j.position="absolute");for(var m=adv[14],n={x:l.x.from,y:l.y.from},o=[],p=new RegExp("([a-zA-Z])\\s*(\\d+)[, ](\\d+)","g"),q=m.split(/[a-zA-Z]/).length-1,r=p.exec(m);null!==r;){switch(r[1]){case"M":n.x=parseInt(r[2],10),n.y=parseInt(r[3],10);break;case"L":o.push({x:{from:n.x,to:parseInt(r[2],10),dur:k/q,delay:0},y:{from:n.y,to:parseInt(r[3],10),dur:k/q,delay:0}}),n.x=parseInt(r[2],10),n.y=parseInt(r[3],10)}r=p.exec(m)}l=null,j.motion=o}null!==l&&j.motion.push(l)}j.dur=2500,adv[3]<12&&(j.dur=1e3*adv[3]);var f=adv[2].split("-");if(null!=f&&f.length>1){var s=parseFloat(f[0]),t=parseFloat(f[1]);j.opacity=s,s!==t&&(j.alpha={from:s,to:t})}}catch(u){console.log("[Err] Error occurred in JSON parsing"),console.log("[Dbg] "+b)}else 8==j.mode&&(j.code=b);null!=j.text&&(j.text=j.text.replace(/\u25a0/g,"█")),g.push(j)}return g}var BinArray=function(){var a={};return a.bsearch=function(a,b,c){if(0==a.length)return 0;if(c(b,a[0])<0)return 0;if(c(b,a[a.length-1])>=0)return a.length;for(var d=0,e=0,f=0,g=a.length-1;g>=d;){if(e=Math.floor((g+d+1)/2),f++,c(b,a[e-1])>=0&&c(b,a[e])<0)return e;c(b,a[e-1])<0?g=e-1:c(b,a[e])>=0?d=e:console.error("Program Error"),f>1500&&console.error("Too many run cycles.")}return-1},a.binsert=function(b,c,d){var e=a.bsearch(b,c,d);return b.splice(e,0,c),e},a}(),__extends=this.__extends||function(a,b){function c(){this.constructor=a}for(var d in b)b.hasOwnProperty(d)&&(a[d]=b[d]);c.prototype=b.prototype,a.prototype=new c},CommentSpaceAllocator=function(){function a(a,b){"undefined"==typeof a&&(a=0),"undefined"==typeof b&&(b=0),this._pools=[[]],this.avoid=1,this._width=a,this._height=b}return a.prototype.willCollide=function(a,b){return a.stime+a.ttl>=b.stime+b.ttl/2},a.prototype.pathCheck=function(a,b,c){for(var d=a+b.height,e=b.right,f=0;fd||c[f].bottome))return!1;if(this.willCollide(c[f],b))return!1}return!0},a.prototype.assign=function(a,b){for(;this._pools.length<=b;)this._pools.push([]);var c=this._pools[b];if(0===c.length)return a.cindex=b,0;if(this.pathCheck(0,a,c))return a.cindex=b,0;for(var d=0,e=0;ethis._height));e++)if(this.pathCheck(d,a,c))return a.cindex=b,d;return this.assign(a,b+1)},a.prototype.add=function(a){a.height>this._height?(a.cindex=-2,a.y=0):(a.y=this.assign(a,0),BinArray.binsert(this._pools[a.cindex],a,function(a,b){return a.bottomb.bottom?1:0}))},a.prototype.remove=function(a){if(!(a.cindex<0)){if(a.cindex>=this._pools.length)throw new Error("cindex out of bounds");var b=this._pools[a.cindex].indexOf(a);0>b||this._pools[a.cindex].splice(b,1)}},a.prototype.setBounds=function(a,b){this._width=a,this._height=b},a}(),AnchorCommentSpaceAllocator=function(a){function b(){a.apply(this,arguments)}return __extends(b,a),b.prototype.add=function(b){a.prototype.add.call(this,b),b.x=(this._width-b.width)/2},b.prototype.willCollide=function(){return!0},b.prototype.pathCheck=function(a,b,c){for(var d=a+b.height,e=0;ed||c[e].bottom0&&this.animate()},Object.defineProperty(a.prototype,"x",{get:function(){return(null===this._x||void 0===this._x)&&(this._x=this.align%2===0?this.dom.offsetLeft:this.parent.width-this.dom.offsetLeft-this.width),this.absolute?this._x:this._x/this.parent.width},set:function(a){this._x=a,this.absolute||(this._x*=this.parent.width),this.align%2===0?this.dom.style.left=this._x+"px":this.dom.style.right=this._x+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"y",{get:function(){return(null===this._y||void 0===this._y)&&(this._y=this.align<2?this.dom.offsetTop:this.parent.height-this.dom.offsetTop-this.height),this.absolute?this._y:this._y/this.parent.height},set:function(a){this._y=a,this.absolute||(this._y*=this.parent.height),this.align<2?this.dom.style.top=this._y+"px":this.dom.style.bottom=this._y+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"right",{get:function(){return this.x+this.width},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"width",{get:function(){return(null===this._width||void 0===this._width)&&(this._width=this.dom.offsetWidth),this._width},set:function(a){this._width=a,this.dom.style.width=this._width+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"height",{get:function(){return(null===this._height||void 0===this._height)&&(this._height=this.dom.offsetHeight),this._height},set:function(a){this._height=a,this.dom.style.height=this._height+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"size",{get:function(){return this._size},set:function(a){this._size=a,this.dom.style.fontSize=this._size+"px"},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"color",{get:function(){return this._color},set:function(a){this._color=a;var b=a.toString(16);b=b.length>=6?b:new Array(6-b.length+1).join("0")+b,this.dom.style.color="#"+b,0===this._color&&(this.dom.className=this.parent.options.global.className+" rshadow")},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"alpha",{get:function(){return this._alpha},set:function(a){this._alpha=a,this.dom.style.opacity=Math.min(this._alpha,this.parent.options.global.opacity)+""},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"border",{get:function(){return this._border},set:function(a){this._border=a,this.dom.style.border=this._border?"1px solid #00ffff":"none"},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"shadow",{get:function(){return this._shadow},set:function(a){this._shadow=a,this._shadow||(this.dom.className=this.parent.options.global.className+" noshadow")},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"font",{get:function(){return this._font},set:function(a){this._font=a,this.dom.style.fontFamily=this._font.length>0?this._font:""},enumerable:!0,configurable:!0}),a.prototype.time=function(a){this.ttl-=a,this.ttl<0&&(this.ttl=0),this.movable&&this.update(),this.ttl<=0&&this.finish()},a.prototype.update=function(){this.animate()},a.prototype.invalidate=function(){this._x=null,this._y=null,this._width=null,this._height=null},a.prototype._execMotion=function(a,b){for(var c in a)if(a.hasOwnProperty(c)){var d=a[c];this[c]=d.easing(Math.min(Math.max(b-d.delay,0),d.dur),d.from,d.to-d.from,d.dur)}},a.prototype.animate=function(){if(this._alphaMotion&&(this.alpha=(this.dur-this.ttl)*(this._alphaMotion.to-this._alphaMotion.from)/this.dur+this._alphaMotion.from),0!==this.motion.length){var a=Math.max(this.ttl,0),b=this.dur-a-this._motionStart[this._curMotion];return this._execMotion(this.motion[this._curMotion],b),this.dur-a>this._motionEnd[this._curMotion]?(this._curMotion++,void(this._curMotion>=this.motion.length&&(this._curMotion=this.motion.length-1))):void 0}},a.prototype.finish=function(){this.parent.finish(this)},a.prototype.toString=function(){return["[",this.stime,"|",this.ttl,"/",this.dur,"]","(",this.mode,")",this.text].join("")},a.LINEAR=function(a,b,c,d){return a*c/d+b},a}(),ScrollComment=function(a){function b(b,c){a.call(this,b,c),this.dur*=this.parent.options.scroll.scale,this.ttl*=this.parent.options.scroll.scale}return __extends(b,a),Object.defineProperty(b.prototype,"alpha",{set:function(a){this._alpha=a,this.dom.style.opacity=Math.min(Math.min(this._alpha,this.parent.options.global.opacity),this.parent.options.scroll.opacity)+""},enumerable:!0,configurable:!0}),b.prototype.init=function(b){"undefined"==typeof b&&(b=null),a.prototype.init.call(this,b),this.x=this.parent.width,this.parent.options.scroll.opacity<1&&(this.alpha=this._alpha),this.absolute=!0},b.prototype.update=function(){this.x=this.ttl/this.dur*(this.parent.width+this.width)-this.width},b}(CoreComment),CommentManager=function(){function a(a){var b=0;this._listeners={},this.stage=a,this.options={global:{opacity:1,scale:1,className:"cmt"},scroll:{opacity:1,scale:1},limit:0},this.timeline=[],this.runline=[],this.position=0,this.limiter=0,this.filter=null,this.csa={scroll:new CommentSpaceAllocator(0,0),top:new AnchorCommentSpaceAllocator(0,0),bottom:new AnchorCommentSpaceAllocator(0,0),reverse:new CommentSpaceAllocator(0,0),scrollbtm:new CommentSpaceAllocator(0,0)},this.width=this.stage.offsetWidth,this.height=this.stage.offsetHeight,this.startTimer=function(){if(!(b>0)){var a=(new Date).getTime(),c=this;b=window.setInterval(function(){var b=(new Date).getTime()-a;a=(new Date).getTime(),c.onTimerEvent(b,c)},10)}},this.stopTimer=function(){window.clearInterval(b),b=0}}var b=function(a,b){for(var c=Math.PI/180,d=a*c,e=b*c,f=Math.cos,g=Math.sin,h=[f(d)*f(e),f(d)*g(e),g(d),0,-g(e),f(e),0,0,-g(d)*f(e),-g(d)*g(e),f(d),0,0,0,0,1],i=0;ib.stime?1:0})},a.prototype.validate=function(a){return null==a?!1:this.filter.doValidate(a)},a.prototype.load=function(a){this.timeline=a,this.timeline.sort(function(a,b){return a.stime>b.stime?2:a.stimeb.date?1:a.dateb.dbid?1:a.dbidb.stime?2:a.stimeb.date?1:a.dateb.dbid?1:a.dbid0;)this.runline[0].finish();this.dispatchEvent("clear")},a.prototype.setBounds=function(){this.width=this.stage.offsetWidth,this.height=this.stage.offsetHeight,this.dispatchEvent("resize");for(var a in this.csa)this.csa[a].setBounds(this.width,this.height);this.stage.style.perspective=this.width*Math.tan(40*Math.PI/180)/2+"px",this.stage.style.webkitPerspective=this.width*Math.tan(40*Math.PI/180)/2+"px"},a.prototype.init=function(){this.setBounds(),null==this.filter&&(this.filter=new CommentFilter)},a.prototype.time=function(a){if(a-=1,this.position>=this.timeline.length||Math.abs(this.lastPos-a)>=2e3){if(this.seek(a),this.lastPos=a,this.timeline.length<=this.position)return}else this.lastPos=a;for(;this.position0&&this.runline.length>this.limiter)&&(this.validate(this.timeline[this.position])&&this.timeline[this.position].stime<=a);this.position++)this.send(this.timeline[this.position])},a.prototype.rescale=function(){},a.prototype.send=function(a){if(8===a.mode)return console.log(a),void(this.scripting&&console.log(this.scripting.eval(a.code)));if(null==this.filter||(a=this.filter.doModify(a),null!=a)){if(1===a.mode||2===a.mode||6===a.mode)var c=new ScrollComment(this,a);else var c=new CoreComment(this,a);switch(c.mode){case 1:c.align=0;break;case 2:c.align=2;break;case 4:c.align=2;break;case 5:c.align=0;break;case 6:c.align=1}switch(c.init(),this.stage.appendChild(c.dom),c.mode){default:case 1:this.csa.scroll.add(c);break;case 2:this.csa.scrollbtm.add(c);break;case 4:this.csa.bottom.add(c);break;case 5:this.csa.top.add(c);break;case 6:this.csa.reverse.add(c);break;case 17:case 7:(0!==a.rY||0!==a.rZ)&&(c.dom.style.transform=b(a.rY,a.rZ),c.dom.style.webkitTransform=b(a.rY,a.rZ),c.dom.style.OTransform=b(a.rY,a.rZ),c.dom.style.MozTransform=b(a.rY,a.rZ),c.dom.style.MSTransform=b(a.rY,a.rZ))}c.y=c.y,this.dispatchEvent("enterComment",c),this.runline.push(c)}},a.prototype.sendComment=function(a){console.log("CommentManager.sendComment is deprecated. Please use send instead"),this.send(a)},a.prototype.finish=function(a){this.dispatchEvent("exitComment",a),this.stage.removeChild(a.dom);var b=this.runline.indexOf(a);switch(b>=0&&this.runline.splice(b,1),a.mode){default:case 1:this.csa.scroll.remove(a);break;case 2:this.csa.scrollbtm.remove(a);break;case 4:this.csa.bottom.remove(a);break;case 5:this.csa.top.remove(a);break;case 6:this.csa.reverse.remove(a);break;case 7:}},a.prototype.addEventListener=function(a,b){"undefined"!=typeof this._listeners[a]?this._listeners[a].push(b):this._listeners[a]=[b]},a.prototype.dispatchEvent=function(a,b){if("undefined"!=typeof this._listeners[a])for(var c=0;c 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | --------------------------------------------------------------------------------