最近用上了原作广树,由飞蚊话大佬修改的b站追番插件BiliBangumi,但是使用下来出现了一些问题。
Notice: Undefined index: pn in C:\xampp\htdocs\usr\plugins\BiliBangumi\Action.php on line 337
Notice: Undefined property: stdClass::$title in C:\xampp\htdocs\usr\plugins\BiliBangumi\Action.php on line 217
虽然追番列表的显示完全没有问题,进度也是完全正确,但是页面上明晃晃的两个不对劲的undefined
还是令人不爽,跑去大佬的博客留了言,可能比较忙没有得到回复。那么,试着自己着手一下看能不能搞定这个问题吧~
文章较长,若只想查看解决方法,请点击
完整文件:https://github.com/DandyChan/Typecho_Plugin_BiliBangumi
为什么会出现undefined?
第一反应就是,会不会是接口返回的数据名称变了?于是打开Action.php
,找到了对应的请求:
//获取追番json
private function GetCollection($pn) {
return BangumiAPI::curl_get_https(
'https://api.bilibili.com/x/space/bangumi/follow/list?
type=1&follow_status=0&pn='.$pn.'&ps='.$this->blocks.'&vmid='.$this->userID);
}
看得出,type
和follow_status
应该是固定参数。根据上下文,vmid
就是b站的UID,pn
和ps
就不知道是啥了。干脆不要这两个参数只带UID上浏览器直接请求。
欸!自己的追番确实都能获得了,获得的数据里也出现了pn
和ps
这两个值。写进请求中测试了两次后发现原来如此:
"pn": 1, // 页码
"ps": 15, // 每页项数
"total": 17 // 共有追番
也就在此时在GitHub上发现了哔哩哔哩-API收集整理,详细说明了追番接口的各种参数的内容。
此处引用哔哩哔哩-API收集整理对该api的详细介绍。
查询用户追番(追剧)明细
http://api.bilibili.com/x/space/bangumi/follow/list
请求方式:GET
认证方式:Cookie(SESSDATA)
如设置隐私查看自己的需要认证
url参数:
参数名 | 类型 | 内容 | 必要性 | 备注 |
---|---|---|---|---|
vmid | num | 目标用户UID | 必要 | |
pn | num | 页码 | 非必要 | 默认为1 |
ps | num | 每页项数 | 非必要 | 默认为15 |
type | num | 查询类型 | 必要 | 1:追番 2:追剧 |
这下,可以着手修改追番插件了!
裂开......仔细观察发现,之所以出现undefined
,是因为有一部番剧工作细胞 第二季并未开始放送,所以数据里是这样的:
"new_ep": {
"index_show": "即将开播"
}
而其他放送完或放送中的数据是这样的:
"new_ep": {
"id": 23333,
"index_show": "全1话",
"cover":"http://xxx.jpg",
"title": "全片",
"pub_time": "2020-10-01 11:00:00",
"duration": 233333333
}
也难怪title
为undefined
啊......
if (empty($value->new_ep->title)) {
$lastep = $value->new_ep->index_show;
}else{
$lastep = $value->new_ep->title;
}
刷新页面,title undefined
的问题解决。接下来就是pn undefined
了。
通过bilibangumi
请求发现,并没有pn
这个参数,添加参数后则该notice
消失。于是从BiliBangumi_Action
类入手:
if($_GET['pn']=='')
$pn = 1;
else
$pn = $_GET['pn'];
改为:
if(empty($_GET['pn'])){ // 既然没有参数那就直接empty()
$pn = 1;
}else{
$pn = $_GET['pn'];
}
至此,pn undefined
也已解决。主要就是两处的判断出现了问题。
本文作者:一只虾饺
本文链接:https://katcloud.cn/archives/19.html
版权声明:所有文章除特别声明外,均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
有时间的话,不改那个判断,把 public function PrintCollecion($pn, $flag = true) 改成 public function PrintCollecion($pn = 1, $flag = true) 试试?按理说这地方不是我写的,应该没啥问题才对
尝试了一下,pn 又 undefined 了
挺奇怪的,可能真的是 PHP 版本的问题。那个未上映番剧的那个 undefined 可能也是一样的问题...
但我的 php 版本是 7.4.6
cool!不过我追番里边也有工作细胞第二季,我这里为啥就是正常的啊 pn为空这个也是 我的那句话其实就是为了让在不传入pn时候给一个默认pn. 难道是xmapp对那个判断不一样?还是php版本到8了又变了逻辑了…
已经解决 谢谢博主!
好耶