解放双眼,点击阅读

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代表已经过期了

所以我们可以得到以下组合:

  1. status==0或者status==0且theme_type==0没有开通大会员
  2. status==1且theme_type==1大会员(没过期)
  3. status==1且theme_type==0大会员(已过期)
  4. status==2且theme_type==1年度大会员(没过期)
  5. 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].'">';

?>

注意:

本篇教程是天天自己写的,如果哪里出错欢迎留言指出。

写作不易,希望对你有帮助!

Comments

0