pull/1/head
david082321 4 years ago
parent 6090fc4aca
commit d02832045d

@ -0,0 +1,26 @@
<?php
// 获取 access_key
$access_key = @$_GET['access_key'];
// 判断 access_key
if ($access_key != ""){
$url = "https://black.qimo.ink/?access_key=".$access_key;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$out = curl_exec($ch);
curl_close($ch);
// 如果是黑名单
if ($out=="ban"){
if (REPLACE_HLW==1){
include ("hlw.php");
hlw();
}else{
exit(BLOCK_RETURN);
}
}
}else if (NEED_LOGIN == 1){
exit(BLOCK_RETURN);
}
?>

@ -0,0 +1,93 @@
<?php
$db_host=DB_HOST;
$db_user=DB_USER;
$db_pass=DB_PASS;
$db_name=DB_NAME;
$dbh='mysql:host='.$db_host.';'.'dbname='.$db_name;
try{
$dbh = new PDO($dbh,$db_user,$db_pass);
//echo '成功';
}catch(PDOException $e){
//pass
}
// 参数
$access_key = @$_GET['access_key'];
$area = @$_GET['area'];
$cid = @$_GET['cid'];
$ep_id = @$_GET['ep_id'];
$refresh_cache = 0;
if ($access_key ==""){
$type = "0";
}else{
// 判断大会员
$sqlco = "SELECT `due_date` FROM `keys` WHERE `access_key` = '".$access_key."'";
$cres = $dbh -> query($sqlco);
$vnum = $cres -> fetch();
$due = $vnum['due_date'];
if ((int)$due > time()*1000 ){
$type = "2";
}else{
$type = "1";
}
}
// 获取缓存
function get_cache(){
global $dbh;
global $type;
global $area;
global $cid;
global $ep_id;
global $refresh_cache;
$ts = time();
$sqlco = "SELECT * FROM `cache` WHERE `area` = '$area' AND `type` = '$type' AND `cid` = '$cid' AND `ep_id` = '$ep_id'";
$cres = $dbh -> query($sqlco);
$vnum = $cres -> fetch();
$cache = $vnum['cache'];
$add_time = $vnum['add_time'];
$cache = str_replace("u0026","&",$cache);
if ($cache != ""){
if( (int)$add_time+CACHE_TIME>=$ts){
exit($cache);
}else{
//刷新缓存
$refresh_cache = 1;
}
}
}
// 写入缓存
function write_cache(){
global $dbh;
global $type;
global $area;
global $cid;
global $ep_id;
global $output;
global $refresh_cache;
$ts = time();
$array = json_decode($output, true);
$code = $array['code'];
if ($code == "0"){
$a = explode('mid=', $output);
$out = $a[0];
for($j=1; $j<count($a)-1; $j++){
//echo $a[$j];
$b = explode('orderid=', $a[$j]);
$out = $out.'orderid='.$b[1];
}
$output = $out.$a[count($a)-1];
$sql ="INSERT INTO `cache` (`add_time`,`area`,`type`,`cid`,`ep_id`,`cache`) VALUES ('$ts','$area','$type','$cid','$ep_id','$output')";
//刷新缓存
if ($refresh_cache==1){
$sql = "UPDATE `cache` SET `add_time` = '$ts', `cache` = '$output' WHERE `area` = '$area' AND `type` = '$type' AND `cid` = '$cid' AND `ep_id` = '$ep_id';";
}
$dbh -> exec($sql);
}
}
?>

@ -0,0 +1,39 @@
-- phpMyAdmin SQL Dump
--
-- Host: localhost
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `cache` (
`id` int(10) unsigned NOT NULL COMMENT 'id',
`add_time` int(11) NOT NULL COMMENT '添加时间',
`area` varchar(10) DEFAULT NULL,
`type` tinyint(4) NOT NULL,
`cid` varchar(100) NOT NULL,
`ep_id` varchar(100) DEFAULT NULL,
`cache` mediumtext NOT NULL COMMENT '缓存内容'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='缓存';
ALTER TABLE `cache`
ADD PRIMARY KEY (`id`),
ADD KEY `add_time` (`add_time`);
ALTER TABLE `cache`
MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS `keys` (
`id` int(10) UNSIGNED NOT NULL COMMENT 'id',
`add_time` datetime NOT NULL COMMENT '添加时间',
`uid` int(20) DEFAULT NULL COMMENT '用户ID',
`access_key` varchar(100) DEFAULT NULL,
`due_date` bigint(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='访客表';
ALTER TABLE `keys`
ADD PRIMARY KEY (`id`),
ADD KEY `add_time` (`add_time`);
ALTER TABLE `keys`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', AUTO_INCREMENT=1;
COMMIT;

@ -0,0 +1,19 @@
<?php
// 封锁
define('BLOCK_TYPE','blacklist'); // 封锁类型none 不封锁, blacklist 黑名单, whitelist 本地白名单
define('REPLACE_HLW', 1); // 是否替换成葫芦娃(仅黑/白名单时生效)。0 否, 1 是
define('NEED_LOGIN', 0); //是否要登录用户才能用。0 否, 1 是
define('BILIROAMING', 1); //是否要用哔哩漫游才能使用。0 否, 1 是
// 缓存
define('SAVE_CACHE', 0); //开启缓存须配置MYSQL。0 否, 1 是
define('CACHE_TIME', 7200); //缓存时长(秒)
define('DB_HOST', 'localhost');
define('DB_USER', '这里改成登录的用户名'); //登录的用户名
define('DB_PASS', '登录的密码'); //登录的密码
define('DB_NAME', '数据库名称'); //数据库名称
//其他
define('WELCOME', 'Success!'); //首页欢迎语
define('BLOCK_RETURN', '{"code":-10403,"message":"你已被封锁"}'); //封锁返回内容
?>

@ -0,0 +1,90 @@
<?php
function hlw(){
// 判断来源
$path = explode('/index.php', $_SERVER['PHP_SELF'])[0];
if ($path=="/intl/gateway/v2/ogv/playurl"){
$host = "api.global.bilibili.com";
$type = "intl";
}elseif ($path=="/intl/gateway/v2/app/search/type"){
exit(BLOCK_RETURN);
}elseif ($path=="/pgc/player/api/playurl"){
$host = "api.bilibili.com";
$type = "main";
}elseif ($path=="/intl/gateway/v2/app/subtitle"){
exit(BLOCK_RETURN);
}
$url = "https://black.qimo.ink/hlw.php";
// 如果你是国内服务器,请取消下一行注解
//$url = "https://api.bilibili.com/pgc/player/api/playurl?appkey=1d8b6e7d45233436&area=cn&build=6151000&cid=3684209&device=android&ep_id=62780&fnval=144&fnver=0&force_host=0&fourk=0&mobi_app=android&platform=android&qn=80&ts=1610306582&sign=b30530dcdf4de77dcf94126baa5783a7";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
'User-Agent: '.@$_SERVER["HTTP_USER_AGENT"]
));
$output = curl_exec($ch);
curl_close($ch);
// 分析 output
$array = json_decode($output, true);
$timelength = $array['timelength'];
$base_url = $array['v_base_url'];
$bandwidth = $array['v_bandwidth'];
$backup_url = $array['v_backup_url'];
$a_base_url = $array['a_base_url'];
$a_bandwidth = $array['a_bandwidth'];
$a_backup_url = $array['a_backup_url'];
if ($type=="intl"){
// 再次分析 output并替换成葫芦娃
$array2 = json_decode($output2, true);
$array2['data']['video_info']['timelength'] = $timelength;
// 替换视频
// 好像是count不到正确数量不晓得有没有人会改的
//$v_count = count($array2['data']['video_info']['stream_list']);
for($j=0 ; $j<5; $j++){
$array2['data']['video_info']['stream_list'][$j]['dash_video']['base_url'] = $base_url;
$array2['data']['video_info']['stream_list'][$j]['dash_video']['backup_url'] = $backup_url;
$array2['data']['video_info']['stream_list'][$j]['dash_video']['bandwidth'] = $bandwidth;
}
// 替换音频
//$a_count = count($array2['data']['video_info']['dash_audio']);
for($j=0 ; $j<3 ; $j++){
$array2['data']['video_info']['dash_audio'][$j]['base_url'] = $a_base_url;
$array2['data']['video_info']['dash_audio'][$j]['backup_url'] = $a_backup_url;
$array2['data']['video_info']['dash_audio'][$j]['bandwidth'] = $a_bandwidth;
}
}else{
// 再次分析 output并替换成葫芦娃
$array2 = json_decode($output2, true);
$array2['timelength'] = $timelength;
// 替换视频
$video = $array2['dash']['video'];
$count3 = count($video);
for($j=0 ; $j<$count3; $j++){
$array2['dash']['video'][$j]['base_url'] = $base_url;
$array2['dash']['video'][$j]['backup_url'] = $backup_url;
$array2['dash']['video'][$j]['bandwidth'] = $bandwidth;
}
// 替换音频
$audio = $array2['dash']['audio'];
$count4 = count($audio);
for($j=0 ; $j<$count4 ; $j++){
$array2['dash']['audio'][$j]['base_url'] = $a_base_url;
$array2['dash']['audio'][$j]['backup_url'] = $a_backup_url;
$array2['dash']['audio'][$j]['bandwidth'] = $a_bandwidth;
}
}
// 发送内容
header('Content-Type: application/json; charset=utf-8');
print(json_encode($array2));
exit();
}
?>

@ -0,0 +1,58 @@
<?php
// 加载配置
include ("config.php");
// 缓存用
if (SAVE_CACHE==1){
include ("log.php");
}
// 判断要转发的host
$path = explode('/index.php', $_SERVER['PHP_SELF'])[0];
if ($path=="/intl/gateway/v2/ogv/playurl"){
$host = "api.global.bilibili.com";
include (BLOCK_TYPE.".php"); // 鉴权
}elseif ($path=="/intl/gateway/v2/app/search/type"){
$host = "app.global.bilibili.com";
include (BLOCK_TYPE.".php"); // 鉴权
}elseif ($path=="/pgc/player/api/playurl"){
$host = "api.bilibili.com";
include (BLOCK_TYPE.".php"); // 鉴权
}elseif ($path=="/intl/gateway/v2/app/subtitle"){
$host = "app.global.bilibili.com";
}else {
// 欢迎语
exit(WELCOME);
}
// 模块请求都会带上X-From-Biliroaming的请求头为了防止被盗用可以加上请求头判断
$headerStringValue = $_SERVER['HTTP_X_FROM_BILIROAMING'];
if ($headerStringValue=="" && BILIROAMING==1){
exit(BLOCK_RETURN);
}
// 获取缓存
if (SAVE_CACHE==1){
include ("cache.php");
get_cache();
}
// 转发到b站服务器
$url = "https://".$host.$path."?".$_SERVER['QUERY_STRING'];
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
'User-Agent: '.@$_SERVER["HTTP_USER_AGENT"]
));
$output = curl_exec($ch);
curl_close($ch);
print($output);
if (SAVE_CACHE==1){
write_cache();
}
?>

@ -0,0 +1,3 @@
<?php
include($_SERVER['DOCUMENT_ROOT']."/index.php");
?>

@ -0,0 +1,3 @@
<?php
include($_SERVER['DOCUMENT_ROOT']."/index.php");
?>

@ -0,0 +1,3 @@
<?php
include($_SERVER['DOCUMENT_ROOT']."/index.php");
?>

@ -0,0 +1,58 @@
<?php
// https://zhuanlan.zhihu.com/p/122967323
//获取访客信息
//pdo连接数据库
$db_host=DB_HOST;
$db_user=DB_USER;
$db_pass=DB_PASS;
$db_name=DB_NAME;
$dbh='mysql:host='.$db_host.';'.'dbname='.$db_name;
try{
$dbh = new PDO($dbh,$db_user,$db_pass);
//echo '连接成功';
}catch(PDOException $e){
//pass
}
$access_key = @$_GET['access_key'];
if ($access_key !=""){
$sqlco = "SELECT `uid` as num FROM `keys` WHERE `access_key` = '".$access_key."'";
$cres = $dbh -> query($sqlco);
$vnum = $cres -> fetch();
$uid = $vnum['num'];
if ($uid==""||$uid=="0"){
$out = get_userinfo();
$uid = $out[0];
$due = $out[1];
if ($uid != "0"){
$sql =" INSERT INTO `keys` (`add_time`,`uid`,`access_key`,`due_date`) VALUES (now(),'$uid','$access_key','$due')";
$dbh -> exec($sql);
}
}
}
function get_userinfo(){
$access_key = $_GET['access_key'];
$ts = $_GET['ts'];
$appkey = "1d8b6e7d45233436";
$appsec = "560c52ccd288fed045859ed18bffd973";
$sign = md5("access_key=".$access_key."&appkey=".$appkey."&ts=".$ts.$appsec);
$testurl = "https://app.bilibili.com/x/v2/account/myinfo?access_key=".$access_key."&appkey=".$appkey."&ts=".$ts."&sign=".$sign;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $testurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$array = json_decode($output, true);
$code = $array['code'];
if ($code=="0"){
$out[0] = $array['data']['mid'];
$out[1] = $array['data']['vip']['due_date'];
}else{
$out[0] = "0";
$out[1] = "0";
}
return $out;
}
?>

@ -0,0 +1,3 @@
<?php
//无鉴权模式
?>

@ -0,0 +1,3 @@
<?php
include($_SERVER['DOCUMENT_ROOT']."/index.php");
?>

@ -0,0 +1,67 @@
<?php
// 白名单
$whitelist = array("1", "2", "3");
// 获取 access_key
$access_key = @$_GET['access_key'];
// 判断 access_key
if ($access_key != ""){
if (SAVE_CACHE==1){
$uid = get_uid_fromsql();
}else{
$uid = get_uid();
}
if (!in_array($uid, $whitelist)) {
if (REPLACE_HLW==1){
include ("hlw.php");
hlw();
}else{
exit(BLOCK_RETURN);
}
}
}else{
exit(BLOCK_RETURN);
}
function get_uid(){
$access_key = $_GET['access_key'];
$ts = time();
$appkey = "1d8b6e7d45233436";
$appsec = "560c52ccd288fed045859ed18bffd973";
$sign = md5("access_key=".$access_key."&appkey=".$appkey."&ts=".$ts.$appsec);
$testurl = "https://app.bilibili.com/x/v2/account/myinfo?access_key=".$access_key."&appkey=".$appkey."&ts=".$ts."&sign=".$sign;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $testurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$array = json_decode($output, true);
$code = $array['code'];
if ($code=="0"){
$uid = $array['data']['mid'];
}else{
$uid = "0";
}
return $uid;
}
function get_uid_fromsql(){
$db_host=DB_HOST;
$db_user=DB_USER;
$db_pass=DB_PASS;
$db_name=DB_NAME;
$dbh='mysql:host='.$db_host.';'.'dbname='.$db_name;
try{
$dbh = new PDO($dbh,$db_user,$db_pass);
//echo '成功';
}catch(PDOException $e){
//pass
}
$access_key = $_GET['access_key'];
$sqlco = "SELECT `uid` FROM `keys` WHERE `access_key` = '".$access_key."'";
$cres = $dbh -> query($sqlco);
$vnum = $cres -> fetch();
$uid = $vnum['uid'];
return $uid;
}
?>
Loading…
Cancel
Save