B站来源的Typecho追番页插件

本文最后修改于 169 天前,部分内容可能已经过时!

感谢原插件(WikimoeBangumi)的创作者 广树,我所做的仅仅是在其基础之上进行了些许改动而已。
不想看废话的,就请直接拉到最后。


Übermorgen/Typecho追番插件-B站来源


最近更新

  • 1.0.0.2010, 2020.10.25更新

    • 进一步避免jQuery对主题的依赖
    • 支持自定义每页数量
    • 支持翻页按钮自定义
  • 1.0.0.207, 2020.7.12更新

    • 隔离jquery依赖
  • 1.0.0.204, 2020.4.22更新
    追番信息分页显示,每页30个
  • 1.0.0.202, 2020.2.8更新
    兼容伪静态站
  • 1.0.0.201c, 2020.1.20更新

    1. 进一步撤销了no-referrer标记
    2. 现在番剧封面不直接从b站获取了,会保存到服务器供使用
      注意:因为现在需要下载封面到服务器,所以设置好插件后应先访问一次以构建封面缓存。时间可能较长,耐心等待。
  • 1.0.0.201b 20200116更新
    新增:番剧块背景可调(番剧封面/空白)
    更新请先禁用再启用
  • 1.0.0.201 20200115更新

    1. 修复了评论与番剧封面不兼容的问题
    2. 优化了载入速度。理论上每多45个番剧,载入速度能提升2倍
    3. 现在的番剧封面默认走https协议了

一、为什么想做这个

自打从WP转到Typecho,我就突然有了浏览独立博客的习惯。但博客内容并不是我浏览的重点所在,我更喜欢去看每位博客作者的 关于 页面。真的有意思。

除此之外,我很好奇每个博客的结构。比如都有哪些分类,页面都有什么元素之类的。这关注点有点儿奇怪,不是吗?

但不知是不是我的选择性记忆,我逐渐发现不少的博客都有一个追番页。你说它有什么用吗?我其实没感觉有啥用说实话…所以我也一直没怎么太注意过这种插件。直到我开始应用了看板作为我的进度及备忘工具之后,突然感觉追番页这种有条理的东西,放在那儿也挺有意思的啊。于是便简单搜了搜这类插件。自然,如果你检索过这种插件,那么仅有的两个结果你大概也就知道了:我使用的这个主题的大佬做的熊猫追番,以及WikimoeBangumi。这两个的来源都是 Bangumi 的API,而我从来都是在B站上头(不管是看还是追)的,单开一个账号我也想不起来去打理,又白消耗人家一丁点数据库空间。所以,我便尝试着把WikimoeBangumi改造,用B站的api来实现一个追番插件了。

二、现在成什么样了

每天两小时,连蒙带猜的搞了两天,已经改的差不多了。用抽风Crazy这个头油怪的账号试了一下(不,他并不认识我,之后你会明白为什么可以拿别人账号测试),83个追番加载的速度还算可以接受吧。刨去我的服务器从德国向B站请求数据->B站返回给德国->处理好后将网页发送到圣何塞->圣何塞转送给北京这种由于世界人民大团结而产生的延迟,我认为3秒加载还是可以接受的(这地方我觉得我以后会改一改。我觉得…)

主要更改了哪些呢?

  • api:这是当然的。现在会通过B站来请求追番数据了
  • 登录方式:大佬原本的插件是通过用户名密码,很友好的登陆的。但是B站的第三方登录需要API Key,否则需要破一道图片验证码…这太麻烦了,所以我改成了直接用cookie登录。自然,插件设置页变更成了填写UID和cookie。所以设置的时候有点儿麻烦,但恕我才疏学浅,实在想不到怎么能比较方便的实现登录了…
  • 块显示内容:原本插件会显示中文番剧名、外文番剧名、首播日期、进度。现在更改成了中文番剧名、最后更新的剧集名、首播日期、进度。
  • 进度条显示内容:原本是简洁的当前话数/总话数(类似10/135/未知),但B站的剧集数并没那么规矩,而好在B站api直接提供了一个当前观看状态的值(类似于 已看完第13话已看完PV1看到第2话 1:37这种),顺便为了友好化未知这种冷冰冰的词,所以更改成了观看状态(截掉了具体的观看位置)/共 num 话(类似于 已看完第13话/共 13 话已看完PV1/未完结看到第2话/共 12 话
  • css:稍微的调整了块高度,使其在RAW主题上可以更好地显示;亦调整了图片长宽,避免变形;换成了em单位,对于不同分辨率,显示应该更好一些了?还调整了进度条,现在当番剧未完结时,进度会显示成50%了。
  • (201b新增)css: 块背景可选透明还是番剧封面
  • 函数变更:整体到底是麻烦了还是简单了我也说不清,总之删掉了部分函数,更改了载入追番的逻辑(B站API默认不能直接获取到所有,但是它会返回一个追番总数。所以目前暂时用了一个简单粗暴的解决方案:分多次获取,然后全部显示)(204取消了这个粗暴的逻辑)分页获取,提供上下翻页按钮,更改了curl的方法(加入了伪装登录用的各种需要的头),自然也更改了各种变量对应的json字段,最后增加了一个函数,用于截掉详细进度信息。
  • (201c新增)函数:增加了下载封面到服务器的方法。现在可以完全规避b站禁止跨域导致的封面403问题了。
  • (2010新增)函数: 可以自定义每页展示的番剧数量以及翻页键按钮样式了。
  • (207新增)依赖:独立了jQuery依赖,使得不再要求主题带有jQuery库,(2010新增)并且包含在插件中,不必再担心获取js速度的问题了。

效果 看这里

三、怎么用?

注意

你的博客根目录下不存在bangumi文件。注意是文件,文件夹是没问题的。因为封面会保存到这个文件夹内,所以如果存在同名文件夹没有关系(共用就好),但文件就不成了。

a、插件部署

clone或下载zip,解压放到你的Typecho文件夹/usr/plugins/,并更改文件夹名为BiliBangumi,启用即可。

b、番剧页

参考WikimoeBangumi的部署方法。只不过语句要改成<?php BiliBangumi_Plugin::output(); ?>

c、插件设置

目前一共两个设置项:UID、cookie。

截止到2010,共有5个设置项:UID、cookie、块背景、每页数量和自定义翻页键。

UID很好说,直接把你的BilibiliUID填入即可。此时会有两种情况:

  • 如果你的追番信息是公开的(即别人可以从你的主页看到你追的番):这时候你的追番页应该就可以显示出追番信息了——除了进度相关是失效的。这就是为什么我可以用头油怪的账号做实验。
  • 如果你的追番信息是隐藏的,或者说你想要显示出追番进度,那么就需要“登录”——也就是填入cookie。

至于块背景,你可以选择使用番剧封面还是默认背景色(默认是透明的);每页数量则定义了每一页中展示的番剧数量,默认是10。

自定义翻页键则属于比较高级的设置项。可通过编写css自定义翻页按钮的样式实现更细致的美化。这里只需使用css中属性: 变量;的语法顺次写入即可。不要回车,回车会触发Typecho设置页面的确定按钮。

d、所以如何获取cookie?

  1. 在Bilibili登录你的账号(电脑网页端,推荐使用Chrome)
  2. 点击头像,进入个人主页(此时网址应该是space.bilibili.com/uid号。如果uid号后面还有一堆字符,删掉即可)
  3. 按下万能的F12,切换到Network标签
  4. 清空一下Network里边的内容,然后F5刷新
  5. 不出意外,此时在Network列表内,应该有一项是以UID为名称的条目。点击它
  6. 弹出一个预览窗格,切换到Headers标签页
  7. Request Headers栏目下,会有一个cookie项目。把这个的值复制下来,粘贴到插件设置页,保存
  8. enjoy

e、疑难解答


Q: 封面获取逻辑

A:因为使用no-referrer总会间歇性的失效导致封面无法获取,所以从版本201c开始,封面获取逻辑改为从服务器自身获取:

  • 第一次进入到追番列表的番剧,自动去b站下载封面到typecho文件夹/bangumi/
  • 之后每次访问,封面就会从上述的文件夹获取封面文件了

因为需要下载,所以在初次启用插件时,最好在设置好后自己先访问一次以完成封面下载工作。受限于服务器传输速度和追番数量,第一次访问加载的时间可能会很长,耐心等待封面下载完成即可。

想清除封面文件,只需清理typecho根目录/bangumi即可

Q:迷の版本号

A:是一个拼接出的结果:原插件版本号.日期后两位+月份。这里边我只会更新我自己的版本号部分,原插件版本号会一直保留原样,作为基于哪个版本的参照。这是我的习惯,就像我喜欢留点儿缺陷,后期刷版本号的一种执念

四、更多信息

下载地址:https://gitee.com/stsiao/typecho_bangumi_bili


任何问题,留在这里吧。码云的issue我可能很难想起来去看…

创建时间:2019年12月13日
最后修订:2020年10月24日
另请参阅:
typecho博客
上一篇
打赏
下一篇

添加新评论

已有 56 条评论

 猫猫 2019-12-15 • |

有什么办法让他获取的图片资源是https的吗

 等我稍后补充昵称 2019-12-15 • |
@猫猫

Action.php 里边,找这句话 $img_grid = $value->cover; 后边使用字符串替换,把http换成https就行了。可以参考wikimoebangumi相同位置的语句

 kizx 2019-12-15 • |

想起我曾经也到处找这个追番插件,补充两个我找到的
1. https://blog.sspirits.top/archives/typecho-anime-list-plugin 这个用短代码更简单,我目前就用的这个
2. https://qwq.best/dev/84.html 这个是B站番剧的

 等我稍后补充昵称 2019-12-15 • |
@kizx

嗯 好多调bangumi的接口的追番插件。第二个我没尝试,不过看介绍说的,只支持handsome主题,而且貌似没有登陆动作,所以像我这种不公开追番信息的账户应该不可用

 猫猫 2019-12-15 • |

解决了,但是https403 ,不想添加无来路,算了,还是不搞了吧

 等我稍后补充昵称 2019-12-15 • |
@猫猫

等迭代吧 我好像想到怎么搞这个了。刷版本号是我的执念

 猫猫 2019-12-15 • |
@等我稍后补充昵称

好的,感谢up主弄得这个插件,期待更新

 等我稍后补充昵称 2020-01-20 • |
@猫猫

有兴趣可以试试现在的 封面下载到服务器本地了。无来路、https啥的就完全不需要了

 猫猫 2020-01-22 • |
@等我稍后补充昵称

更新了,还是有点问题,chrome还是403,火狐浏览器正常,手机也显示不了,不知道什么原因,应该不是缓存

 等我稍后补充昵称 2020-01-23 • |
@猫猫

你这是有啥缓存吧 还是解压之后没覆盖?我看图片链接还是i0.xxx的
。看看你插件的文件夹名字对不对

 猫猫 2020-01-23 • |
@等我稍后补充昵称

啊,解决了,估计是第一次删错了文件,把更新后的当成旧版的给删了

 xiaowangwang 2020-02-08 • |

大佬你好,我的网站在读取图片是会读取https://xiaowangwang.top/index.php/bangumi/28541.jpg这个地址
但是,我的图片应该是这个地址https://xiaowangwang.top/bangumi/28541.jpg
怎么办啊

 等我稍后补充昵称 2020-02-08 • |
@xiaowangwang

这是没开伪静态吧?刚更新了一版应该可以了。试一下

 xiaowangwang 2020-02-08 • |

谢谢大佬,解决了

 ChirmyRam 2020-03-25 • |

追番页面一直显示数据加载,服务器也没有bangumi文件夹生成,手动添加bangumi文件夹给与完全访问权限后,刷新页面提示403 forbidden nginx,请问这个如何解决呢?

 等我稍后补充昵称 2020-03-25 • |
@ChirmyRam

看手工建立的bangumi有没有图片文件生成,没有的话就是根目录权限的问题,或者是selinnux设置。先查根目录权限,不行再看这个https://blog.csdn.net/qq_28208381/article/details/96287680

 等我稍后补充昵称 2020-03-25 • |
@ChirmyRam

我看过你的页面了,你可能得需要补一个jQuery。在<head>下面加一行<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

 ChirmyRam 2020-03-25 • |
@等我稍后补充昵称

我用的主题的使用文档中说了主题自带了 jQuery,不需要也不可以再次引入 jQuery 依赖。

 等我稍后补充昵称 2020-03-25 • |
@ChirmyRam

可是我看控制台,有找不到jQuery的报错 如果确定不是jQuery的问题,那就着重看文件夹权限吧

 Ash 2020-03-28 • |
@等我稍后补充昵称

我也是同样的情况怎么办,自己创建了那个文件夹也没用

 Ash 2020-03-28 • |
@等我稍后补充昵称

但是我不会403

 Ash 2020-03-28 • |
@等我稍后补充昵称

解决了,权限问题。。。

 ChirmyRam 2020-04-01 • |
@等我稍后补充昵称

问题解决了,我在服务器里面编辑的追番页面叫bangumi.php,独立页面的自定义slug也取名叫做bangumi,只要这俩名字一样就报404,改了之后才正常。

 等我稍后补充昵称 2020-04-02 • |
@ChirmyRam

解决就好,这我可真是想不到

 Diego 2020-03-28 • |

大大,我把文件夹名改了,但有且只有这个插件会serveerror500,可以解决吗

 等我稍后补充昵称 2020-03-29 • |
@Diego

着重还是看权限吧…因为需要向服务器写入,这地方权限不搞好容易出问题。而且我现在访问你的博客直接报503?

 Diego 2020-03-29 • |
@等我稍后补充昵称

大大,现在应该可以访问了,昨天服务器抽了,apache莫名关闭
请问以下怎么设置权限呢,我把整个web文件夹都设置为可读写了

 等我稍后补充昵称 2020-03-30 • |
@Diego

500错误实在太笼统了…要是全部可读写的话应该就可以自动生成bangumi文件夹,所以你可以试试先删掉bangumi文件夹再访问追番页面,看网站根目录能不能出来这个文件夹;其次不知道你的服务器在哪里?我发现我现在访问是连接超时…所以这500错也有可能是服务器连不上b站搞的…

 某人 11 个月前 • |

这两天装的debian出了问题,xfce桌面,root能登陆,普通用户登录不了,密码正确,点击登陆密码框就自动清空,字符界面能登,并且正常使用,只是图形界面不正常,求解救(我实在不知道请教谁了,好像没多少人用linux,就来请教了)

 某人 11 个月前 • |
@某人

终极小白一个

 绯酒 11 个月前 • |

您好
https://nmsl.pet/bf.html
我的追番似乎有点多,太长了导致了一些bug
鼠标放上去地下的基本上全没了,移开才出现,如果可以的话请您看一下,或者教一下我怎么弄翻页的那种,谢谢

 等我稍后补充昵称 11 个月前 • |
@绯酒

看着确实是加载太多的问题。我有时间试试看能不能改成翻页吧…因为页面这部分就直接用的WikimoeBangumi的逻辑

 等我稍后补充昵称 11 个月前 • |
@绯酒

更新了一下,换成翻页了,可以试试。我没那么多追番不知道还会不会有问题

 王友元同学 11 个月前 • |

不错,就是样式有点简洁了。还有第一次加载失败,但是刷新一下就好啦。

 等我稍后补充昵称 11 个月前 • |
@王友元同学

样式不是我写的

 王友元同学 10 个月前 • |
@等我稍后补充昵称

欸,兄弟你评论回复邮件给判垃圾邮件了,怪不得没消息。

 等我稍后补充昵称 10 个月前 • |
@王友元同学

啊我直接用的mailgun,大概腾讯已经把它拉黑了吧

 arch小白 10 个月前 • |

arch不能玩很多游戏,可以推荐更多更快的平台吗?

 等我稍后补充昵称 10 个月前 • |
@arch小白

对linux来说支持的程度都一样,像Arch分支这种激进的发行版可能支持情况会更好。所以推荐其他平台的话就是windows了

 行人和风 10 个月前 • |

感谢博主,插件很好用。

 noame 9 个月前 • |

大佬,我感觉好像插件获取不了封面,估计是docker版typecho原因,封面路径能不能改到别的地方比如upload?

 等我稍后补充昵称 9 个月前 • |
@noame

你看一下action.php 把里边 /bangumi/ 改成自己的路径试试

 noame 9 个月前 • |
@等我稍后补充昵称

好了!感谢大佬

 Cat 9 个月前 • |

插件好像出问题了,一直转圈,追番数据加载中...

 等我稍后补充昵称 9 个月前 • |
@Cat

有更新过主题或者服务器吗?动画这部分我是直接引用的没动过。它有时候会找不到jquery然后就语法错误(即使引用了jquery),表现出来的结果就是一直转圈

 Magma 8 个月前 • |

有什么方法能实现控制每页的数量,以及可能实现在文章中插入单个番剧的卡片嘛
新手建站对源码不是太理解~

 等我稍后补充昵称 8 个月前 • |
@Magma

插入单个那还是自己写html吧 typecho的插件还没这么厉害的功能。每页数量我是写死的,在action.php有个挺明显的循环,里边判断的数字可以试着改改

 diudiu 5 个月前 • |

非常感谢

 木白 4 个月前 • |

点开追番页后,主页的图和文章都加载不出来,重新刷新整个网页可以加载成功。用的void主题,貌似是 jQuery冲突,因为另一个插件有关闭 jQuery的选项,那个插件也是开启 jQuery首页就不显示,不是学计算机的,不懂代码,请教一下大佬怎么解决

 飞蚊话 4 个月前 • |
@木白

可以把我加的jquery标签删掉。你可以搜搜Action.php,删掉带jquery.min.js的一整行。我有时间把这个开关搞上来

 DandyChan 4 个月前 • |

dalao, 我出现好几个一样的错误 `Undefined property: stdClass::$long_title in`
有点迷惑,不知道如何解决

页面地址:https://katcloud.cn/gumi.html

 飞蚊话 3 个月前 • |
@DandyChan

现在再进来好像没问题?

 DandyChan 3 个月前 • |
@飞蚊话

自己加了两个判断进去暴力解决的。。。因为不怎么懂php
在文章里说明了:https://katcloud.cn/archives/19/
甚至还pull了个request
不过方法实在暴力,还是希望大佬能debug一下

 苏晓晴 3 个月前 • |

PHP8下报错误
Undefined array key "pn" in
怎么解决

 飞蚊话 3 个月前 • |
@苏晓晴

应该是语法有变了吧…试试把pn放在全局变量里边吧 我用的php7 没法测8下面正常与否

 苏晓晴 3 个月前 • |
@飞蚊话

已经解决了 多谢大佬