# APP主题
## 获取主题及加载动画
> https://app.bilibili.com/x/resource/show/skin
*请求方式:GET*
鉴权方式:appkey
认证方式:仅可APP
**url参数:**
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
| ---------- | ---- | ------------ | ----------- | ------------- |
| access_key | str | APP登录Token | APP方式必要 | |
| appkey | str | APP密钥 | APP方式必要 | |
| build | num | 版本 | APP方式必要 | 可为`6082000` |
| ts | num | 当前时间戳 | APP方式必要 | 可为`0` |
| sign | str | APP签名 | APP方式必要 | |
**json回复:**
根对象:
| 字段 | 类型 | 内容 | 备注 |
| ------- | ---- | -------- | ---------------------------------------------------- |
| code | num | 返回值 | 0:成功
-3:API校验密匙错误
-400:请求错误 |
| message | str | 错误信息 | 默认为0 |
| data | obj | 信息本体 | |
`data`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ----- | ------------ | ------------ |
| user_equip | obj | 个性主题信息 | 有效时有此项 |
| skin_colors | array | 主题颜色列表 | |
| load_equip | obj | 加载动画信息 | 有效时有此项 |
`data`中的`user_equip`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | --------------- | ------ |
| id | num | 装扮id | |
| name | str | 装扮名称 | |
| preview | str | 装扮封面url | |
| ver | num | 装扮版本 | 时间戳 |
| package_url | str | 装扮包url | |
| package_md5 | str | 装扮包md5校验值 | |
| data | obj | 装扮配置 | |
`user_equip`中的`data`对象:
| 字段 | 类型 | 内容 | 必要性 | 备注 |
| ------------------- | ---- | ----------------- | -------- | --------------------------- |
| color_mode | str | 颜色模式 | 必要 | light:亮色
dark:暗色 |
| color | str | 前景色? | 必要 | 颜色
1. 使用十六进制颜色值
2. 颜色值的大小写不限,下同
3. 例:#ffffff |
| color_second_page | str | 背景色? | 必要 | 颜色 |
| tail_color | str | 底边栏颜色 | 必要 | 颜色 |
| tail_color_selected | str | 底边栏颜色(选择时) | 必要 | 颜色 |
| tail_icon_ani | bool | 有无底边栏动画 | 必要 | false:无
true:有 |
| tail_icon_ani_mode | str | 底边栏动画循环播放 | 必要 | once:播放一次 |
| head_myself_mp4_play| str | 我的页面头图(视频)循环 | 必要 | once:播放一次
loop:循环播放 |
| tail_icon_mode | str | 底栏改图标或改颜色 | 必要 | img:图标
color:颜色 |
| side_bg_color | str | 侧边栏颜色 | 非必要 | 颜色
5.x 版本客户端的侧边栏 |
| side_line_color | str | 侧边栏线条颜色? | 非必要 | 颜色
5.x 版本客户端的侧边栏 |
| tail_icon_color | str | 底栏图标颜色 | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 |
| tail_icon_color_dark| str | 底栏图标颜色(夜间模式) | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 |
| tail_icon_color_selected| str | 底栏图标颜色(选择时) | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 |
| tail_icon_color_selected_dark| str | 底栏图标颜色(选择时)(夜间模式) | 可能必要 | 颜色
若 tail_icon_mode = "color",则必要 |
`skin_colors`数组:
| 项 | 类型 | 内容 | 备注 |
| ---- | ---- | ------------- | ---- |
| 0 | obj | 主题颜色1 | |
| n | obj | 主题颜色(n+1) | |
| …… | obj | …… | …… |
`skin_colors`数组中的对象:
| 字段 | 类型 | 内容 | 备注 |
| ---------- | ---- | ------------ | ------------------------------- |
| id | num | 颜色id | |
| name | str | 颜色名称 | |
| is_free | bool | 是否免费 | false:收费
true:免费 |
| price | num | 价格 | 单位为硬币 |
| is_bought | bool | 是否已购买 | false:未购买
true:已购买 |
| status | num | 状态 | 1:自动续费
4:已退订 |
| buy_time | num | 购买时间 | 毫秒时间戳 |
| due_time | num | 到期时间 | 毫秒时间戳 |
| color_name | str | 颜色类型名称 | |
| is_overdue | bool | 是否已到期 | false:未到期
true:已到期 |
`data`中的`load_equip`对象:
| 字段 | 类型 | 内容 | 备注 |
| ----------- | ---- | --------------- | ------ |
| id | num | 装扮id | |
| name | str | 装扮名称 | |
| ver | num | 装扮版本 | 时间戳 |
| loading_url | str | 加载动画图标url | |
**示例:**
```shell
curl -G 'https://app.bilibili.com/x/resource/show/skin' \
--data-urlencode 'access_key=xxx' \
--data-urlencode 'appkey=1d8b6e7d45233436' \
--data-urlencode 'build=6082000' \
--data-urlencode 'ts=0' \
--data-urlencode 'sign=ea212fea5b00a6278ea6d9938b4c500e'
```
查看响应示例:
```json
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"user_equip": {
"id": 2529,
"name": "初音未来-日版",
"preview": "http://i0.hdslb.com/bfs/garb/item/2fa16380b31b3cee6c889d645f2699de8e9d9faf.jpg",
"ver": 1598600025,
"package_url": "http://i0.hdslb.com/bfs/garb/zip/9c393edea0c7b7b59685a20cd655363ef573a325.zip",
"package_md5": "7b6d20d998ad543c6a275948a6a1a5fe",
"data": {
"color_mode": "light",
"color": "#212121",
"color_second_page": "#fff2d2",
"side_bg_color": "#ffe7ae",
"tail_color": "#996c00",
"tail_color_selected": "#0d6872",
"tail_icon_ani": true,
"tail_icon_ani_mode": "once"
}
},
"skin_colors": [
{
"id": 2,
"name": "少女粉",
"is_free": true,
"color_name": "pink"
},
{
"id": 1,
"name": "夜间模式",
"is_free": true,
"color_name": "black"
},
{
"id": 3,
"name": "姨妈红",
"price": 5,
"color_name": "red"
},
{
"id": 4,
"name": "咸蛋黄",
"price": 5,
"color_name": "yellow"
},
{
"id": 5,
"name": "早苗绿",
"price": 5,
"status": 4,
"buy_time": 1599219782000,
"due_time": 1601811782000,
"color_name": "green"
},
{
"id": 6,
"name": "胖次蓝",
"price": 5,
"color_name": "blue"
},
{
"id": 7,
"name": "基佬紫",
"price": 5,
"color_name": "purple"
}
],
"load_equip": {
"id": 2531,
"name": "初音未来13周年",
"ver": 1598602035,
"loading_url": "http://i0.hdslb.com/bfs/garb/item/9b12e8b5cc16a4c2e71e91c43796f09d5e132847.webp"
}
}
}
```
## 主题包结构
主题包为app端付费主题(套装)的整合包,以zip格式通过url分发
包内的图片文件为app对应的资源替换,替换时可随意修改后缀 jpg 或 png
必要性:head_bg 及 head_tab_bg 为必要,其他非必要
| 文件名 | 说明 |
| --------------------------------- | -------------------------- |
| head_bg.jpg | 首页顶部栏背景 |
| head_tab_bg.jpg | 顶部栏背景 |
| head_myself_bg.jpg | 【我的】页面头图(小) |
| head_myself_squared_bg.jpg | 【我的】页面头图(大) |
| head_myself_mp4_bg.mp4 | 【我的】页面头图(视频)
格式参考:后缀必须 mp4、分辨率 1242 x 1074、60 FPS、去掉音轨(音频) |
| side_bg.jpg | 侧边栏背景 |
| side_bg_bottom.jpg | 侧边栏底部背景 |
| tail_bg.png | 底部栏背景 |
| tail_icon_main.png | 【首页】按钮 |
| tail_icon_channel.png | 【频道】按钮 |
| tail_icon_dynamic.png | 【动态】按钮 |
| tail_icon_shop.png | 【会员购】按钮 |
| tail_icon_myself.png | 【我的】按钮 |
| tail_icon_pub_btn_bg.png | 【发布】按钮 |
| tail_icon_selected_main.png | 【首页】按钮(选中状态) |
| tail_icon_selected_channel.png | 【频道】按钮(选中状态) |
| tail_icon_selected_dynamic.png | 【动态】按钮(选中状态) |
| tail_icon_selected_shop.png | 【会员购】按钮(选中状态) |
| tail_icon_selected_myself.png | 【我的】按钮(选中状态) |
| tail_icon_selected_pub_btn_bg.png | 【发布】按钮(选中状态) |
以`id=2529(初音未来-日版)`的资源为例
```shell
wget https://i0.hdslb.com/bfs/garb/zip/9c393edea0c7b7b59685a20cd655363ef573a325.zip
unzip -l 9c393edea0c7b7b59685a20cd655363ef573a325.zip
```
返回为
```
Archive: 9c393edea0c7b7b59685a20cd655363ef573a325.zip
Length Date Time Name
--------- ---------- ----- ----
22995 1980-00-00 00:00 tail_icon_selected_myself.png
18444 1980-00-00 00:00 head_bg.jpg
3061 1980-00-00 00:00 head_tab_bg.jpg
188898 1980-00-00 00:00 side_bg.jpg
2842 1980-00-00 00:00 side_bg_bottom.jpg
203134 1980-00-00 00:00 tail_bg.png
27539 1980-00-00 00:00 tail_icon_main.png
25632 1980-00-00 00:00 tail_icon_selected_main.png
27415 1980-00-00 00:00 tail_icon_selected_channel.png
191706 1980-00-00 00:00 head_myself_squared_bg.jpg
27919 1980-00-00 00:00 tail_icon_channel.png
27262 1980-00-00 00:00 tail_icon_selected_dynamic.png
147738 1980-00-00 00:00 head_myself_bg.jpg
28182 1980-00-00 00:00 tail_icon_dynamic.png
25878 1980-00-00 00:00 tail_icon_shop.png
26487 1980-00-00 00:00 tail_icon_selected_shop.png
21831 1980-00-00 00:00 tail_icon_myself.png
--------- -------
1016963 17 files
```