hexo-bilibili-bangumi
Version:
366 lines (290 loc) • 10.5 kB
Markdown
# hexo-bilibili-bangumi
[](https://www.npmjs.com/package/hexo-bilibili-bangumi)
[](https://www.npmjs.com/package/hexo-bilibili-bangumi)
[](https://www.npmjs.com/package/hexo-bilibili-bangumi)
[](https://github.com/HCLonely/hexo-bilibili-bangumi/blob/master/LICENSE)
## 💡 介绍
为 Hexo 博客添加追番/追剧页面。
- ✨ 支持多个数据源(哔哩哔哩、Bangumi、AniList、Simkl)
- 🎨 支持自定义样式
- 🚀 支持图片懒加载
- 📊 支持进度展示
- 🔄 支持数据自动更新
- 📱 响应式设计
- 🖼️ 支持图片镜像缓存
- 📄 支持手动添加数据
[效果预览](https://demo.hclonely.com/bangumis/)
## 📦 安装
```bash
npm install hexo-bilibili-bangumi --save
```
## ⚙️ 配置
### 基础配置
将以下配置写入站点的配置文件 `_config.yml` 中(不是主题的配置文件):
```yaml
bangumi: # 追番设置
enable: true # 是否启用
source: bili # 数据源
path: bangumis/index.html # 页面路径
vmid: # 用户ID
title: '追番列表' # 页面标题
quote: '生命不息,追番不止!' # 页面引言
show: 1 # 初始显示页面: 0=想看, 1=在看, 2=看过
lazyload: true # 是否启用图片懒加载
loading: # 加载动画
metaColor: # meta 信息字体颜色
color: # 简介字体颜色
webp: true # 是否使用 webp 格式图片
progress: true # 是否显示进度条
...
cinema: # 追剧设置
enable: true # 是否启用
source: bili
...
game: # 游戏设置,仅支持source: bgmv0
enable: true # 是否启用
source: bgmv0
...
```
<details>
<summary>详细配置</summary>
``` yaml
bangumi: # 追番设置
enable: true
source: bili
bgmInfoSource: 'bgmv0'
path:
vmid:
title: '追番列表'
quote: '生命不息,追番不止!'
show: 1
lazyload: true
srcValue: '__image__'
lazyloadAttrName: 'data-src=__image__'
loading:
showMyComment: false
pagination: false
metaColor:
color:
webp:
progress:
progressBar:
extraOrder:
order: latest
proxy:
host: '代理host'
port: '代理端口'
extra_options:
key: value
coverMirror:
cinema: # 追剧设置
enable: true
path:
vmid:
title: '追剧列表'
quote: '生命不息,追剧不止!'
show: 1
lazyload: true
srcValue: '__image__'
lazyloadAttrName: 'data-src=__image__'
loading:
metaColor:
color:
webp:
progress:
progressBar:
extraOrder:
order:
extra_options:
key: value
coverMirror:
game: # 游戏设置,仅支持source: bgmv0
enable: true
path:
source: bgmv0
vmid:
title: '游戏列表'
quote: '生命不息,游戏不止!'
show: 1
lazyload: true
srcValue: '__image__'
lazyloadAttrName: 'data-src=__image__'
loading:
metaColor:
color:
webp:
progress:
progressBar:
extraOrder:
order:
extra_options:
key: value
coverMirror:
```
</details>
### 详细参数说明
#### 基础参数
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| enable | boolean | false | 是否启用该功能 |
| source | string | 'bili' | 数据源选择。`bili`: [哔哩哔哩源](https://www.bilibili.com/), `bgmv0`: [Bgm Api源(api.bgm.tv)](https://bgm.tv/), `bangumi`: [Bangumi源(bangumi.tv)](https://bangumi.tv/), `bgm`: [Bangumi源(bgm.tv)](https://bgm.tv/), `anilist`: [AniList源](https://anilist.co/), `simkl`: [Simkl源](https://simkl.com/) |
| path | string | 'bangumis/index.html' | 生成页面的路径 |
| vmid | string/number | - | 用户Id。[如何获取](#-获取用户-id) |
| title | string | '追番列表' | 页面标题 |
| quote | string | '生命不息,追番不止!' | 页面顶部的引言,支持HTML |
#### 显示控制
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| show | number | 1 | 初始显示的内容类型:0=想看,1=在看,2=看过 |
| lazyload | boolean | true | 是否启用图片懒加载,可避免首次加载时间过长 |
| srcValue | string | '\_\_image\_\_' | 设置封面图的默认src值,`__image__`为封面链接,`__loading__`为loading图片链接 |
| lazyloadAttrName | string | 'data-src=\_\_image\_\_' | 懒加载属性名称和值的格式 |
| loading | string | - | 加载中显示的图片URL |
| metaColor | string | - | meta信息的字体颜色,支持CSS颜色值(如'#FFFFFF') |
| color | string | - | 简介文字的字体颜色 |
#### 图片处理
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| webp | boolean | true | 是否使用webp格式图片(仅支持哔哩哔哩源,可大幅减小图片体积) |
| coverMirror | string | - | 封面图片镜像服务地址,用于解决防盗链、跨域等问题([图片镜像服务](#图片镜像服务)) |
#### 进度显示
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| progress | boolean | true | 是否显示数据获取进度条 |
| progressBar | boolean | true | 是否在追番页面显示观看进度条(仅支持bili和bgmv0源) |
#### 数据处理
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| pagination | boolean | false | 是否启用分页优化,建议番剧数量较多时启用 |
| order | string | - | 排序方式:score=评分升序,-score=评分降序 ,其他=默认顺序|
| extraOrder | number | - | 手动添加数据的显示顺序:1=优先显示,其他=默认顺序 |
| showMyComment | boolean | false | 是否显示个人评论(仅支持bgm、anilist源) |
#### 代理设置
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| proxy.host | string | - | 代理服务器地址 |
| proxy.port | number | - | 代理服务器端口 |
#### 扩展选项
| 参数名 | 类型 | 默认值 | 说明 |
|-------|------|--------|------|
| extra_options | object | - | 扩展配置,会被注入到Hexo的page变量中 |
| bgmInfoApi | string | 'bgmApi' | Bangumi信息源:`bgmApi`: [Bangumi Api](https://github.com/bangumi/api/), `bgmSub`: [Bangumi-Subject](https://github.com/czy0729/Bangumi-Subject) |
### 图片镜像服务
当遇到图片加载失败(403错误)或加载缓慢时,可以配置 `coverMirror` 使用镜像服务:
```yaml
coverMirror: 'https://image.baidu.com/search/down?url=' # 示例配置
```
推荐的镜像服务地址:
```text
https://image.baidu.com/search/down?url= # 百度镜像(限制5MB)
https://images.weserv.nl/?url= # Weserv
https://pic1.xuehuaimg.com/proxy/ # 雪花镜像
https://search.pstatic.net/common?src= # Naver镜像
```
## 🚀 使用方法
### 更新数据
在生成或部署博客之前,需要更新追番/追剧数据:
```bash
# 更新追番数据
hexo bangumi -u
# 使用 bili 源时显示追番进度(需要 SESSDATA)
hexo bangumi -u 'your_sessdata_here'
# 更新追剧数据
hexo cinema -u
# 更新游戏数据
hexo game -u
```
### 删除数据
```bash
# 删除追番数据
hexo bangumi -d
# 删除追剧数据
hexo cinema -d
# 删除游戏数据
hexo game -d
```
## 📝 手动添加数据
在 `source/_data/` 目录下创建 `extra_bangumis.json`(追番)或 `extra_cinemas.json`(追剧):
```json
{
"watchedExtra": [
{
"title": "番剧标题",
"type": "番剧",
"area": "日本",
"cover": "封面图片链接",
"totalCount": "全12话",
"link": "https://example.com/xxx",
"des": "简介内容..."
}
]
}
```
可用数组名:
- `wantWatchExtra`: 想看
- `watchingExtra`: 在看
- `watchedExtra`: 看过
## 🔍 获取用户 ID
<details>
<summary>哔哩哔哩 UID</summary>
1. 登录 [哔哩哔哩](https://www.bilibili.com/)
2. 访问 [个人空间](https://space.bilibili.com/)
3. 网址最后的数字即为 UID
4. **注意:** 需要将追番列表设为公开
</details>
<details>
<summary>Bangumi 用户名</summary>
1. 登录 [Bangumi](https://bangumi.tv/)
2. 打开控制台 (Ctrl + Shift + J)
3. 输入:
```javascript
document.getElementById('header').getElementsByTagName('a')[0].getAttribute('href').split('/').at(-1)
```
</details>
<details>
<summary>Bangumi 用户 ID</summary>
1. 登录 [Bangumi](https://bangumi.tv/)
2. 打开控制台 (Ctrl + Shift + J)
3. 输入:
```javascript
CHOBITS_UID
```
</details>
<details>
<summary>AniList ID</summary>
1. 登录 [AniList](https://anilist.co/home)
2. 打开控制台 (Ctrl + Shift + J)
3. 输入:
```javascript
JSON.parse(window.localStorage.getItem('auth')).id
```
</details>
<details>
<summary>Simkl Token</summary>
1. 登录 [Simkl](https://simkl.com/)
2. 创建一个App: [https://simkl.com/settings/developer/new/](https://simkl.com/settings/developer/new/)
3. `Name`和`Description`随便填,`Redirect URI`填写`127.0.0.1`
4. 创建App后记住`Client ID`和`Client Secret`
5. 打开`https://simkl.com/oauth/authorize?response_type=code&client_id={your_client_id}&redirect_uri=http://127.0.0.1`,注意把`{your_client_id}`改成你的`Client ID`
6. 授权后会跳转到`127.0.0.1/?code=your_code`,记住`your_code`
7. 打开`https://simkl.docs.apiary.io/#reference/authentication-oauth-2.0/exchange-code-for-access_token?console=1`,找到右侧的`Body`并点击。修改如下
```json
{
"code" : "你的code",
"client_id" : "你的Client ID",
"client_secret" : "你的Client Secret",
"redirect_uri" : "127.0.0.1",
"grant_type" : "authorization_code"
}
```
8. 修改后点击右下角的`Call Resource`按钮,然后拉到最下面,右下角找到`"access_token": "your_token",`,记住`your_token`
9. `vmid`填入`{your_client_id}-{your_token}`,`{your_client_id}`替换为App的`Client ID`,`{your_token}`替换为上一步得到的`your_token`
</details>
## 🎨 主题适配
1. Fork 本项目并克隆到本地
2. 安装依赖:`npm install`
3. 在 `src/lib/templates/theme/` 添加主题样式文件
4. 运行 `npm run build`
5. 提交 PR
## 📄 开源协议
[Apache License 2.0](./LICENSE)