diff options
| -rwxr-xr-x | bangumi.php | 144 | ||||
| -rw-r--r-- | libs/Bangumi.php | 211 |
2 files changed, 272 insertions, 83 deletions
diff --git a/bangumi.php b/bangumi.php index 8705129..2feb290 100755 --- a/bangumi.php +++ b/bangumi.php @@ -3,19 +3,17 @@ * 追番页面
*
* @author Kengwang
- * @version 1.0.1alpha
* @for BigCoke233/miracles
- * @description 目前暂时用了FormatList,这样效率可能较低,下个版本会修复
*
* @package custom
*/
$this->need('includes/head.php');
$this->need('includes/header.php');
-$this->need('includes/bgmapi.php');
+$this->need('libs/Bangumi.php');
if ($this->fields->uid == !'' && $this->fields->sessdata == !'') {
bilibili::setUserInfo($this->fields->uid, $this->fields->sessdata);
if (empty($_GET['page']) || $_GET['page'] == 0) $page = 1; else $page = $_GET['page'];
- $bgmdataraw = bilibili::getFollowingListRaw($page);
+ $bgmdataraw = bilibili::getFollowingListRaw($page,16);
$bgmlist = bilibili::getFormatList($bgmdataraw['data']['list']);
} else {
$bgmdataraw = array();
@@ -35,93 +33,73 @@ if ($_GET['dbg'] == 'rawlist') { echo "</pre>";
}
*/
+
?>
<main class="main-container container">
- <div class="post-body">
- <br><br><br>
- <div class="about">
- <div class="about-avatar">
- <!-- 头像 -->
- <?php if ($this->options->avatar == ''): echo $this->author->gravatar(500);
- else : ?><img src="<?php $this->options->avatar(); ?>"
- alt="<?php echo $this->author(); ?>"><?php endif; ?>
- <h2 class="about-name"><?php echo $this->author(); ?> の 追番</h2>
- </div>
- <div class="about-social">
- <!-- bilibili按钮 -->
- <?php if ($this->fields->uid == !''): ?>
- <a href="https://space.bilibili.com/<?php echo $this->fields->uid(); ?>" target="_blank"
- title="Bilibili"><i class="iconfont icon-bilibili-"></i></a>
- <?php endif; ?>
- </div>
- </div>
- <div class="post-content" id="post-content">
- <div id="readTip" hidden></div>
- <!-- 文章内容 -->
- <?php $this->content(); ?>
- </div>
- <div class="post-list" style="margin-top: 100px;">
- <!-- 番剧循环开始 -->
- <br>
+ <div class="post-body"><div class="post-content">
+<?php
+//番组链接 $bgm['link'];
+//番组名字 $bgm['name'];
+//番组封面 $bgm['img'];
+//番组介绍 $bgm['des'];
+//观看进度 $bgm['watched'] . "/" . $bgm['all']
+//更新至 $bgm['new']['title'];
+//观看状态 if ($bgm['basket'] == 0) echo '想看';
+// if ($bgm['basket'] == 1) echo '在看';
+// if ($bgm['basket'] == 2) echo '看完';
+/**
+开始循环
+<?php
+if ($bgmdataraw['data']['total'] != 0):
+ foreach ($bgmlist as $bgm) : ?>
+ //content
+ <?php endforeach;
+ else: ?>
+ //if nothing
+<?php endif; ?>
+**/
+?>
+ <div class="container-fluid"><div class="row">
<?php
if ($bgmdataraw['data']['total'] != 0): //没有东西
foreach ($bgmlist as $bgm) : ?>
- <br>
- <br>
- <div class="post-item">
- <div class="container-fluid">
- <div class="row">
- <div class="col-md-3 post-banner-box">
- <a href="<?php echo $bgm['link']; ?>" class="post-link">
- <div class="post-banner">
- <img alt="<?php echo $bgm['name']; ?>" src="<?php echo $bgm['img'] ?>"
- data-original="<?php echo $bgm['img'] ?>" style="filter: none;">
- </div>
- </a>
- </div>
- <div class="col-md-9 post-item-content">
- <a href="<?php echo $bgm['link']; ?>" class="post-link">
- <h1 class="post-title"><?php echo $bgm['name']; ?></h1>
- </a>
- <p class="post-excerpt">
- <?php echo $bgm['des']; ?>
- </p>
- <p class="post-meta">
- 看到 <?php echo $bgm['watched'] . "/" . $bgm['all'] ?> 话
- <br>
- <i class="iconfont icon-block"></i>
- <?php
- // 暂时用bilibili你手动分的类来,具体可见include/bgmapi.php
- if ($bgm['basket'] == 0) echo '想看';
- if ($bgm['basket'] == 1) echo '在看';
- if ($bgm['basket'] == 2) echo '看完';
- ?> <i class="iconfont icon-clock"></i> 更新至
- <?php echo $bgm['new']['title']; ?>
- </p>
- <p class="post-button-box large-screen">
- <a href="<?php echo $bgm['link']; ?>" class="button post-button">一起看~</a>
- </p>
- </div>
- </div>
- </div>
- </div>
+
+ <div class="bangumi-item col-md-4 col-lg-3"><a href="<?php echo $bgm['link']; ?>" target="_blank" class="no-line bangumi-link">
+ <div class="bangumi-banner">
+ <?php $db=Typecho_Db::get();
+ $load_image = $db->fetchAll($db->select('value')->from('table.options')->where('name = %s', "theme:Miracles")->limit(1));
+ $load_image = explode("\";",explode("\"",explode("\"loading_image\";",$load_image[0]["value"],2)[1],2)[1],2)[0]; ?>
+ <img src="/usr/themes/Miracles/images/loading/<?php echo $load_image;?>.gif" data-original="<?php echo $bgm['img'];?>">
+ <div class="bangumi-des">
+ <p><?php echo $bgm['des']; ?></p>
+ </div>
+ </div>
+ <div class="bangumi-content">
+ <h3 class="bangumi-title" title="<?php echo $bgm['name'];?>"><?php echo $bgm['name'];?></h3>
+ <div class="bangumi-progress" style="width:100%">
+ <div class="bangumi-progress-bar" style="width:<?php echo round(($bgm['watched']/$bgm['all'])*100); ?>%"></div>
+ </div>
+ <div class="bangumi-progress-num">进度:<?php echo $bgm['watched']; echo ' / '; echo $bgm['all'];?></div>
+ </div></a>
+ </div>
+
<?php endforeach;
- else: ?>
- <h1 class="about-name">啥也没有呐 !!!∑(゚Д゚ノ)ノ</h1>
+ else: ?>
+ <h1 class="about-name"><?php echo '啥也没有呐 !!!∑(゚Д゚ノ)ノ';?></h1>
<?php endif; ?>
- <div class="post-item">
- <div class="post-pagenav">
- <?php if ($page != 1): ?><a class="post-pagenav-left" href="?page=<?php echo $page - 1; ?>"><i
- class="iconfont icon-chevron-left"></i></a> <?php endif; ?>
- <?php if ($bgmdataraw['data']['pn'] * $bgmdataraw['data']['ps'] < $bgmdataraw['data']['total']): ?>
- <a class="post-pagenav-right" href="?page=<?php echo $page + 1; ?>"><i
- class="iconfont icon-chevron-right"></i></a>
- <?php endif; ?>
- </div>
- </div>
+ </div></div>
<br>
- </div>
- </div>
+ </div>
+ </div>
+ <div class="post-pagenav">
+ <?php if ($page != 1): ?><a class="post-pagenav-left" href="?page=<?php echo $page - 1; ?>"><i
+ class="iconfont icon-chevron-left"></i></a> <?php endif; ?>
+ <?php if ($bgmdataraw['data']['pn'] * $bgmdataraw['data']['ps'] < $bgmdataraw['data']['total']): ?>
+ <a class="post-pagenav-right" href="?page=<?php echo $page + 1; ?>"><i
+ class="iconfont icon-chevron-right"></i></a>
+ <?php endif; ?>
+ </div>
+ <br>
<?php $this->need('includes/comments.php');
?>
</main>
diff --git a/libs/Bangumi.php b/libs/Bangumi.php new file mode 100644 index 0000000..e8d6305 --- /dev/null +++ b/libs/Bangumi.php @@ -0,0 +1,211 @@ +<?php
+
+/**
+ * Bangumi追番API
+ * @author Kengwang
+ * @copyright Kengwang
+ */
+
+
+class BGMFL
+{
+ static function curl($url, $cookie)
+ {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_URL, $url);
+ //地址
+ //curl_setopt ($curl, CURLOPT_COOKIEJAR, $cookiefile);//文件式
+ //curl_setopt ($curl, CURLOPT_COOKIEFILE, $cookiefile);
+ curl_setopt($curl, CURLOPT_COOKIE, $cookie);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+ $str = curl_exec($curl);
+ curl_close($curl);
+ return $str;
+ }
+}
+
+class bilibili
+{
+ private static $uid = '';
+ //用户ID
+ private static $cookie = '';
+
+ //cookie,假如说没有公开就要填写,只需要SESSDATA
+
+ public static function setUserInfo($uid, $sessdata)
+ {
+
+ self::$cookie = 'SESSDATA=' . $sessdata . ';';
+ self::$uid = $uid;
+ }
+
+ public static function getFollowingListRaw($pn = 1, $ps = 15)
+ {
+ /**
+ * 关于链接的注释
+ * 首先说说已知的参数
+ * type : 追逐类型 1为追番 2为追剧 [必须]
+ * follow_status : 番剧类别 0为全部 1为想看 2为在看 3为看过
+ * ps : 每一页的个数 相当于SQL的Limit
+ * pn : 页码,承接上一个参数
+ * vmid : 用户ID [必须]
+ *
+ * 还有什么参数后期补充哦
+ */
+ $back = BGMFL::curl('https://api.bilibili.com/x/space/bangumi/follow/list?type=1&follow_status=0&vmid=' . self::$uid . '&ps=' . $ps . '&pn=' . $pn, self::$cookie);
+ $array = json_decode($back, true);
+ if (!$array) echo "追番状态获取失败";
+ return $array;
+ }
+
+ public static function getFollowingList($pn = 1, $ps = 15)
+ {
+ return self::getFollowingListRaw($ps, $pn)['data']['list'];
+ }
+
+ public static function getFormatList($data = null)
+ {
+ /**
+ * 按照老夫追了那么多番剧,看了那么多情况,可以将它归纳一下
+ *
+ * ssid : 唯一番剧ID [Done]
+ * name : 番剧名称 [Done]
+ * des : 描述简介 没有的话就是 '暂无简介' [Done]
+ * link : 链接 [Done]
+ * status : 番剧状态 0为正在播 1为将开 2为完结 [Done]
+ * followst: 追番状态(自动判断) 0为未看,1为在看,2为看完 [Done]
+ * basket : 在B站定的状态,0为想看 1为在看 2为看完 [Done]
+ * all : 总集数 未开为0 [Done]
+ * watched : 已观看集数 PV为0 [Done]
+ * nowraw : 已观看集数和时间 (Bilibili直接显示) [Done]
+ * progress: 特色功能,追番进度 n% [Done]
+ * img : 图片 [Done]
+ * coin : 硬币 [Done]
+ * score : 分数 未开/未评分番剧是0.0 [Done]
+ * new : 最新集(array)={title:名字 ep:集数 finish:是否完结撒花} [Done]
+ *
+ */
+ if ($data === null) {
+ $data = self::getFollowingList();
+ }
+ $ret = array();
+ foreach ($data as $bangumi) {
+ //判断是否填写Cookie
+ if (empty($bangumi['both_follow'])) {
+ $temp['ssid'] = 0;
+ $temp['name'] = "Cookie填写错误:Cookie错误";
+ // 名称
+ $temp['des'] = "可能由于格式不对或者Cookie过期,请重新获取Cookie并且更改Cookie";
+ $ret[] = $temp;
+ break;
+ } elseif ($bangumi['both_follow'] == 0) {
+ $temp['ssid'] = 0;
+ $temp['name'] = "Cookie填写错误:Cookie与用户名不匹配";
+ // 名称
+ $temp['des'] = "可能由于格式不对或者Cookie过期,请重新获取Cookie并且更改Cookie";
+ $ret[] = $temp;
+ break;
+ }
+
+ $temp['ssid'] = $bangumi['season_id'];
+ //ID
+ $temp['name'] = $bangumi['title'];
+ // 名称
+ $temp['des'] = isset($bangumi['evaluate']) && $bangumi['evaluate'] != '' ? $bangumi['evaluate'] : '暂无简介';
+ // 简介
+ $temp['link'] = 'https:////www.bilibili.com/bangumi/play/ss' . $bangumi['season_id'] . '/';
+ //链接
+ $temp['nowraw'] = $bangumi['progress'];
+ //进度复杂型
+ //番剧状态
+ if ($bangumi['is_finish']) {
+ $temp['status'] = 2;
+ } elseif (!$bangumi['is_started']) {
+ $temp['status'] = 1;
+ } else {
+ $temp['status'] = 0;
+ }
+
+ //获取总集数
+ $total = 0;
+ if ($bangumi['is_finish']) {
+ $total = $bangumi['total_count'];
+ //total_count是预计总集数
+ } elseif (!$bangumi['is_started'] || $bangumi['new_ep']['index_show'] == '即将开播') {
+ $total = 0;
+ } else {
+ $total = $bangumi['new_ep']['title'];
+ if (!is_numeric($total)) $total = $bangumi['total_count'];
+ //有些最后是Extra,默认识别为最后一集
+ }
+ if ($total < 0) $total = 0;
+ $temp['all'] = $total;
+
+ //获取当前看到的集数
+ $ep = 0;
+ if (!$bangumi['is_started']) {
+ //没有开始
+ $ep = 0;
+ } elseif (strpos($bangumi['progress'], '已看完')) {
+ $ep = $total;
+ } elseif (isset($bangumi['progress']) && !strpos($bangumi['progress'], 'PV')) {
+ $ep = self::getSubstr($bangumi['progress'], '第', '话');
+ if (!is_numeric($ep)) $ep = 0;
+ //匹配左右取中间数字
+ } else {
+ $ep = 0;
+ }
+ $temp['watched'] = $ep;
+
+ //追番状态 - Auto
+ if (!$bangumi['is_started'] || $ep == 0) {
+ $temp['followst'] = 0;
+ } elseif ($ep == $total) {
+ $temp['followst'] = 2;
+ } else {
+ $temp['followst'] = 1;
+ }
+
+ //追番状态 - Bilibili
+ $temp['basket'] = $bangumi['follow_status'] - 1;
+
+ //图片 - 原图 (非方形小头像)
+ $temp['img'] = $bangumi['cover'];
+
+ //硬币
+ $temp['coin'] = $bangumi['stat']['coin'];
+
+ //分数
+ $temp['score'] = $bangumi['rating']['score'];
+
+ //进度
+ if ($total == 0) {
+ $percent = 0;
+ } else {
+ $percent = floor($ep * 100 / $total);
+ }
+ $temp['progress'] = $percent;
+
+ //最新
+ $temp['new'] = array(
+ 'title' => '第' . $total . '话 ' . (isset($bangumi['new_ep']['long_title']) ? $bangumi['new_ep']['long_title'] : $bangumi['new_ep']['title']), //紫罗兰的永恒花园为例子,最后一集没有long_title
+ 'ep' => $total,
+ 'finish' => $bangumi['is_finish']
+ );
+
+ $ret[] = $temp;
+ //循环尾 看清楚
+ }
+ return $ret;
+ }
+
+ private static function getSubstr($str, $leftStr, $rightStr)
+ {
+ $left = strpos($str, $leftStr);
+ //echo '左边:'.$left;
+ $right = strpos($str, $rightStr, $left);
+ //echo '<br>右边:'.$right;
+ if ($left < 0 or $right < $left) return '';
+ return substr($str, $left + strlen($leftStr), $right - $left - strlen($leftStr));
+ }
+}
\ No newline at end of file |
