API:
打开官方的接口:
https://api.bilibili.com/x/space/acc/info?mid=353774279&jsonp=jsonp
可以看到如下信息:

*API接口(链接)
https://api.bilibili.com/x/space/acc/info?mid=353774279&jsonp=jsonp
中的
?mid=353774279
是?mid=你的B站UID
可以替换成自己的UID
分析:
其中"mid":"2D天天"是用户的昵称
"sex":"男"是性别
"face":"http://i2.hdslb.com/bfs/face/eb236048e21c34eaf94f18aad8fe68bba2c415ad.jpg"是头像信息
"sign":"我是一只穷苦的小天天"是个性签名
"level":5,"是等级信息
那么我们就可以获取到最基本的UP主的信息了,然后我们用PHP来解析一下
代码:
正则匹配内的(.*?)代表了任意字符,可以用来获取动态的内容
preg_match_all()==正则匹配函数(说白了就是对比内容是不是相同的)
用法:preg_match_all('/匹配的参数'/,'匹配的原内容',匹配成功后的内容,这里填变量)
例子:preg_match_all('/我是2D天天/','你好,我是2D天天,请多多指教',$trstr)
此时$trstr==Array;$trstr[0][0]==我是2D天天
<?php
$bili = file_get_contents("https://api.bilibili.com/x/space/acc/info?mid=353774279&jsonp=jsonp");//获取官方接口返回的数据并赋值到$bili
$stre = '/"mid":(.*?),"name":"(.*?)","sex":"(.*?)","face":"(.*?)","sign":"(.*?)","rank":(.*?),"level":(.*?),"jointime":/';
$result = preg_match_all($stre,$bili,$trstr);//使用正则匹配内容
?>
这里把匹配对应的内容用不同的颜色表示出来

获取到数据后输出
其中:
$result==匹配到的数量,这里匹配到的只有一个,所以它会输出“1”,
这里暂时用不到这个变量。
$trstr==选择输出的内容,格式:$trstr[任意字符内的第几个内容,0代表全部][匹配第几条,0代表第一条]
因为这里只匹配到了一条内容,
所以$trstr的第二个[]填0
按照这样子来就是:

也就是说:
$trstr[1][0]==UID
$trstr[2][0]==昵称
$trstr[3][0]==性别
$trstr[4][0]==头像
$trstr[5][0]==个性签名
$trstr[7][0]==等级
那么这道了这些就直接输出就行了。
<?php
$bili = file_get_contents("https://api.bilibili.com/x/space/acc/info?mid=353774279&jsonp=jsonp");//获取官方接口返回的数据并赋值到$bili
$stre = '/"mid":(.*?),"name":"(.*?)","sex":"(.*?)","face":"(.*?)","sign":"(.*?)","rank":(.*?),"level":(.*?),"jointime":/';
$result = preg_match_all($stre,$bili,$trstr);//使用正则匹配内容
echo '<img src="'.$trstr[4][0].'"></br>用户名:'.$trstr[2][0].'</br>性别:'.$trstr[3][0].'</br>等级:'.$trstr[7][0].'</br>个性签名:'.$trstr[5][0].'</br>UID:'.$trstr[1][0];
?>
输出结果为:

利用上面的方法我们可以获取更多的信息:
这里我们获取一下大会员状态,
大会员的参数有两个,
一个是type大会员类型,
0代表没有开通过大会员
1代表大会员
2代表年度大会员
另一个是theme_type状态,
1代表没过期
0代表已经过期了
所以我们可以得到以下组合:
- status==0或者status==0且theme_type==0没有开通大会员
- status==1且theme_type==1大会员(没过期)
- status==1且theme_type==0大会员(已过期)
- status==2且theme_type==1年度大会员(没过期)
- status==2且theme_type==0年度大会员(已过期)
那么就可以使用if()语句判断大会员状态了
类型和状态是用正则匹配的第12、13条,
也就是类型==$trstr[12][0];状态==$trstr[13][0]
把判断的结果赋值给$vip这个变量,然后输出,
代码如下:
<?php
$bili = file_get_contents("https://api.bilibili.com/x/space/acc/info?mid=353774279&jsonp=jsonp");//获取官方接口返回的数据并赋值到$bili
$stre = '//"mid":(.*?),"name":"(.*?)","sex":"(.*?)","face":"(.*?)","sign":"(.*?)","rank":(.*?),"level":(.*?),"jointime":(.*?)birthday":"(.*?)","coins":(.*?)"type":(.*?)},"vip":{"type":(.*?),"status":(.*?),"theme_type":(.*?),"label":/';
$result = preg_match_all($stre,$bili,$trstr);//使用正则匹配内容
if($trstr[12][0]=="0"&&$trstr[13][0]=="0"){
$vip = "未开通大会员服务";
}elseif($trstr[12][0]=="2"&&$trstr[13][0]=="1"){
$vip = "年度大会员,未过期";
}elseif($trstr[12][0]=="2"&&$trstr[13][0]=="0"){
$vip = "年度大会员,已过期";
}elseif($trstr[12][0]=="1"&&$trstr[13][0]=="1"){
$vip = "大会员,未过期";
}elseif($trstr[12][0]=="1"&&$trstr[13][0]=="0"){
$vip = "大会员,已过期";
}
echo '<img src="'.$trstr[4][0].'"></br>用户名:'.$trstr[2][0].'</br>性别:'.$trstr[3][0].'</br>等级:'.$trstr[7][0].'</br>VIP:'.$vip.'</br>个性签名:'.$trstr[5][0].'</br>UID:'.$trstr[1][0];
?>
运行结果:

后面更多信息只需匹配更多内容即可:
<?php
$bili = file_get_contents("https://api.bilibili.com/x/space/acc/info?mid=353774279&jsonp=jsonp");//获取官方接口返回的数据并赋值到$bili
$stre = '/"mid":(.*?),"name":"(.*?)","sex":"(.*?)","face":"(.*?)","sign":"(.*?)","rank":(.*?),"level":(.*?),"jointime":(.*?)birthday":"(.*?)","coins":(.*?)"type":(.*?)},"vip":{"type":(.*?),"status":(.*?),"theme_type":(.*?),"label":(.*?)"pid":(.*?),"name":"(.*?)","image":"(.*?)","expire":(.*?)top_photo":"(.*?)","theme":/';
$result = preg_match_all($stre,$bili,$trstr);//使用正则匹配内容
if($trstr[12][0]=="0"&&$trstr[13][0]=="0"){
$vip = "未开通大会员服务";
}elseif($trstr[12][0]=="2"&&$trstr[13][0]=="1"){
$vip = "年度大会员,未过期";
}elseif($trstr[12][0]=="2"&&$trstr[13][0]=="0"){
$vip = "年度大会员,已过期";
}elseif($trstr[12][0]=="1"&&$trstr[13][0]=="1"){
$vip = "大会员,未过期";
}elseif($trstr[12][0]=="1"&&$trstr[13][0]=="0"){
$vip = "大会员,已过期";
}
echo '<img src="'.$trstr[4][0].'"></br>用户名:'.$trstr[2][0].'</br>性别:'.$trstr[3][0].'</br>生日:'.$trstr[9][0].'</br>等级:LV'.$trstr[7][0].'</br>VIP:'.$vip.'</br>个性签名:'.$trstr[5][0].'</br>UID:'.$trstr[1][0].'</br>头像挂件:'.$trstr[17][0].'(ID:'.$trstr[16][0].')</br><img src="'.$trstr[18][0].'"></br>空间背景:</br><img src="'.$trstr[20][0].'">';
?>
运行结果如下:

获取其他UP的信息:
这里推荐使用$_GET[]获取UID,方法如下:
接口:
http://你的域名/你的API文件名.php?uid=UID参数
例如:http://api.52tt.xyz/112.php?uid=353774279
代码:
<?php
if($_GET['uid']==null){
echo '请输入UID</br>例子:http://域名/API文件.php?uid=353774279';
}else{
$bili = file_get_contents("https://api.bilibili.com/x/space/acc/info?mid=".$_GET['uid']."&jsonp=jsonp");//获取官方接口返回的数据并赋值到$bili
$stre = '/"mid":(.*?),"name":"(.*?)","sex":"(.*?)","face":"(.*?)","sign":"(.*?)","rank":(.*?),"level":(.*?),"jointime":(.*?)birthday":"(.*?)","coins":(.*?)"type":(.*?)},"vip":{"type":(.*?),"status":(.*?),"theme_type":(.*?),"label":(.*?)"pid":(.*?),"name":"(.*?)","image":"(.*?)","expire":(.*?)top_photo":"(.*?)","theme":/';
$result = preg_match_all($stre,$bili,$trstr);//使用正则匹配内容
if($trstr[12][0]=="0"&&$trstr[13][0]=="0"){
$vip = "未开通大会员服务";
}elseif($trstr[12][0]=="2"&&$trstr[13][0]=="1"){
$vip = "年度大会员,未过期";
}elseif($trstr[12][0]=="2"&&$trstr[13][0]=="0"){
$vip = "年度大会员,已过期";
}elseif($trstr[12][0]=="1"&&$trstr[13][0]=="1"){
$vip = "大会员,未过期";
}elseif($trstr[12][0]=="1"&&$trstr[13][0]=="0"){
$vip = "大会员,已过期";
}
echo '<img src="'.$trstr[4][0].'"></br>用户名:'.$trstr[2][0].'</br>性别:'.$trstr[3][0].'</br>生日:'.$trstr[9][0].'</br>等级:LV'.$trstr[7][0].'</br>VIP:'.$vip.'</br>个性签名:'.$trstr[5][0].'</br>UID:'.$trstr[1][0].'</br>头像挂件:'.$trstr[17][0].'(ID:'.$trstr[16][0].')</br><img src="'.$trstr[18][0].'"></br>空间背景:</br><img src="'.$trstr[20][0].'">';
?>
注意:
本篇教程是天天自己写的,如果哪里出错欢迎留言指出。
写作不易,希望对你有帮助!
文章评论