最近在 B 站看番的时候,闲着无聊打开控制台发现了一个可以获取到最近更新番剧的 API 。因为觉得点进 B 站的新番时间表实在是太麻烦了 太懒了 ,就做了一个可以直接获取最近更新番剧的页面方便以后看。
首先访问这个 API ,可以看到返回了一大堆的东西
把返回的东西放到 JSON 解析器里面解析一下,就可以很清楚的看到返回的内容了,知道这些信息之后就可以开始用 PHP 写了。
{
"code": 0,
"message": "success",
"result": [{
"date": "8-14",//更新日期
"date_ts": 1597334400,
"day_of_week": 5,//更新是星期几,例如这里是星期五
"is_today": 0,//是不是今天更新;0-不是今天更新,1-是今天更新
"seasons": [{
"cover": "http://i0.hdslb.com/bfs/bangumi/image/7bbe825a8d65056b0918
724f3f376e2d3f3c0b15.png",//番剧图片
"delay": 0,
"ep_id": 334752,
"favorites": 217346,
"follow": 0,
"is_published": 1,
"pub_index": "第5话",//更新的是第几话
"pub_time": "01:05",
"pub_ts": 1597338300,
"season_id": 33083,
"season_status": 2,
"square_cover": "http://i0.hdslb.com/bfs/bangumi/image/aed4f3d2885434b9610
da34a311203cd30fb2a2d.jpg",
"title": "富豪刑警 Balance:UNLIMITED(僅限港澳台地區)",//番剧名字
"url": "https://www.bilibili.com/bangumi/play/ss33083"//番剧 URL
},
.....首先用 file_get_contents() 函数将这个 API 里面的数据都读入 $get 中,然后用 json_decode() 函数将 $get 里 JSON 格式的字符串进行编码,把结果存入 $data 中。
$get = file_get_contents("https://bangumi.bilibili.com/web_api/timeline_global");
$data = json_decode($get, true);这里选择第一种情况,其他情况比第一种情况更简单。
接着我们知道这个 API 可以获取到最近 13 天的番剧内容,由 API 返回的数据可以知道 date 是 result 的一个内容,也就是说 API 的 result 部分会有 13 个,所以可以规定 result[] 这个的数组的长度为 13,用 for 循环来获取每一天的 result[] 内容。
用 date('n') 函数来获得当前的月份 date('j') 来获得现在是几号存入 $nowtime 里;用 $data[result][$d][date] 来获得番剧的更新日期并存入 $pub_time 里。再判断日期的大小。
为什么不用 date('m') 跟 date('d') 呢?是因为 $pub_time 输出的不足两位的月份是不带 0 的,用 date('n') 输出的不足两位的月份也是不带 0 的,两者格式统一,至于 date('j') 的话,因为不清楚 $pub_time 不足两位的日期输出带不带 0 ,所以就暂且认为是不带 0 的。
$get = file_get_contents("https://bangumi.bilibili.com/web_api/timeline_global");
$data = json_decode($get, true);
for ($d = 0;$d <= 13;$d ++){
$nowtime = date('n').'-'.date('j');//获取当前日期
$pub_time = $data[result][$d][date];//获取番剧更新日期
if ($pub_time < $nowtime) {//若更新时间小于当前时间时
echo "";
}
elseif ($pub_time >= $nowtime) {//若更新时间大于当前时间时
....
}}然后我们需要处理更新时间大于或等于当前时间的部分,也就是我们想要输出的番剧列表。再次由 API 得,seasons[] 里面是我们想要得到的的数据,我们首先用 count($data[result][$d][seasons]) 来获取 result[] 里面有多少个 seasons ;并且用 for 循环来获取每一个 seasons[] 的数据,再获取一些重要的数据,就可以得到总的程序:
<?php
$get = file_get_contents("https://bangumi.bilibili.com/web_api/timeline_global");
$data = json_decode($get, true);
for ($d = 0;$d <= 13;$d ++){
$nowtime = date('n').'-'.date('j');//获取当前日期
$pub_time = $data[result][$d][date];//获取番剧更新日期
if ($pub_time < $nowtime) {//若更新时间小于当前时间时
echo "";
}
elseif ($pub_time >= $nowtime) {//若更新时间大于当前时间时
for ($i = 0;$i < count($data[result][$d][seasons]);$i ++){
? >
<div class="box" >
<a href=" <?php echo $data[result][$d][seasons][$i][url]? >" target="_blank" >
<img src=" <?php echo $data[result][$d][seasons][$i][cover]? >" >
</a >
<a href=" <?php echo $data[result][$d][seasons][$i][url]? >" target="_blank" > <?php echo $data[result][$d][seasons][$i][title];? > </a >
<p class="date" > <?php echo '于 '.$data[result][$d][date].' 更新'? > </p >
<p class="pub_index" > <?php echo $data[result][$d][seasons][$i][pub_index]? > </p > <br > <hr >
</div >
<?php }}}? >再用 CSS 美化一下就得到了一个好看的新番时间表。

2020年09月01日 22:43
⣿⣿⣿⣿⣿⣿⢟⣡⣴⣶⣶⣦⣌⡛⠟⣋⣩⣬⣭⣭⡛⢿⣿⣿⣿⣿
⣿⣿⣿⣿⠋⢰⣿⣿⠿⣛⣛⣙⣛⠻⢆⢻⣿⠿⠿⠿⣿⡄⠻⣿⣿⣿
⣿⣿⣿⠃⢠⣿⣿⣶⣿⣿⡿⠿⢟⣛⣒⠐⠲⣶⡶⠿⠶⠶⠦⠄⠙⢿
⣿⠋⣠⠄⣿⣿⣿⠟⡛⢅⣠⡵⡐⠲⣶⣶⣥⡠⣤⣵⠆⠄⠰⣦⣤⡀
⠇⣰⣿⣼⣿⣿⣧⣤⡸⢿⣿⡀⠂⠁⣸⣿⣿⣿⣿⣇⠄⠈⢀⣿⣿⠿
⣰⣿⣿⣿⣿⣿⣿⣿⣷⣤⣈⣙⠶⢾⠭⢉⣁⣴⢯⣭⣵⣶⠾⠓⢀⣴
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣉⣤⣴⣾⣿⣿⣦⣄⣤⣤⣄⠄⢿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠈⢿
⣿⣿⣿⣿⣿⣿⡟⣰⣞⣛⡒⢒⠤⠦⢬⣉⣉⣉⣉⣉⣉⣉⡥⠴⠂⢸
⠻⣿⣿⣿⣿⣏⠻⢌⣉⣉⣩⣉⡛⣛⠒⠶⠶⠶⠶⠶⠶⠶⠶⠂⣸⣿
⣥⣈⠙⡻⠿⠿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⠿⠛⢉⣠⣶⣶⣿⣿
#(doge) 孤寡~
2020年09月01日 22:45
我去,绝了