几乎一致的动态样式渲染!
一、项目介绍
1、介绍
形象担当:@禾咕咕
2、基本功能
本项目实现了将哔哩哔哩返回的数据渲染为类似与B站APP官方的分享图片。 如下图所示:
3、环境
本项目基于Python3.9.0开发,在其他版本的运行状态未知。本项目使用2021年7月的哔哩哔哩API接口,不保证后续接口与数据结构不会发生变化。
4、依赖
| Package | Version |
|---|---|
| Pillow | 8.0.1 |
| aiohttp | 3.7.2 |
| qrcode | 6.1 |
| pydantic | 1.7.3 |
| pathlib | 1.0.1 |
| matplotlib | 3.4.0 |
| urllib3 | 1.25.11 |
| fonttools | 4.24.4 |
5、项目结构
本项目结构如下:
├─ bilibili_dynamic
│ │
│ │ DynamicRender.py 主要的程序文件
│ │ format.py 进行数据验证的程序文件
│ │ initialize.py 进行初始化的程序文件
│ │ network.py 进行网络通信的程序文件
│ │ textTools.py 进行渲染的部分文字工具
│ │ __init__.py __init__.py
│ │ _version.py 版本信息
│ ├─ typeface 字体文件夹
│ │ │ Unifont.ttf Unifont字体
│ │ │ CODE2000.ttf CODE2000字体
│ │ │ NotoColorEmoji.ttf Noto emoji字体
│ │ │ NotoSansCJKsc-Regular.otf 思源黑体
│ │ │ NONT LICENSE Noto字体 LICENSE
│ │ ├─ reserve 后备字体
│ │
│ ├─ element 图片组件文件夹
│
│ README.md 自述文件
│ LICENSE LICENSE
│ test.py 示例
6、交流
外联群QQ:781665797
二、使用
1、安装
(1)、pip安装(推荐)
您可以使用pip快速的安装
pip install bilibili-dynamic
目前 pip 源中的0.0.7版本存在问题。请根据(3)、使用releases中的版本 安装 我们会在0.0.8修复
(2)、自行构建
- 克隆仓库中的代码。
- 您可以使用
poetry工具,如果您没有,可以执行下列pip 命令。
pip install poetry
- 在项目根目录执行以下命令bulid
poetry publish --build
- ./dist 中是构建完成的项目,然后执行(3) 所述的方法安装。
(3)、使用releases中的版本
请您前往releases页面,自行下载后缀名为.whl的文件,并牢记文件名称。然后使用:
pip install 下载下来的文件名称
2、使用
- 传入 API返回数据中的
data下的card或与结构之一样的数据。
from bilibili_dynamic import DynamicRender
import asyncio
# 导入数据示例
from dylist import dylist
Render = DynamicRender.DynamicPictureRendering(path="./tmp")
async def test():
for element in dylist:
await Render.ReneringManage(element)
# 您可以在实例化的类中的 ReprenderIMG 获得图片对象
Render.ReprenderIMG.show()
break
# 运行协程函数需要在事件循环中运行
loop = asyncio.get_event_loop()
loop.run_until_complete(test())
注意: 这个写法只适用于
0.0.7(含)以上的版本。
我们在
test.py中准备了一个小示例,您可以参考其使用。
三、如何工作
我们将动态的渲染分为五大部分,每部分独立渲染:
头部信息、文字部分、功能块(图片动态的图片、视频的视频等)、附加卡片(相关游戏、直播预约等)、转发信息(转发内容)
每部分根据动态的内容渲染,如果没有该部分则不渲染。
每个模块渲染是异步的,其关系您可以根据下图理解:
此图仅供参考,在使用过程中有诸多因素会影响渲染的流程。
附加卡片通常不会下载图片,除了卡片展示游戏相关时。
转发信息就是将上述流程嵌套了一次,只是不渲染头部信息,其余基本一致,故不赘述。
1、头部信息
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的headRendering方法。
如项目介绍图片当中的一致,本模块实现了将头像、挂件缓存与渲染,同时本模块可以对该动态发布的时间、账号是否大会员、认证账号进行详细的渲染。
2、文字部分
该部分是本项目的核心模块,主要实现了将动态文字进行富文本化。实现是在DynamicRender.py中的DynamicPictureRendering类中的NGSSTrcker方法。
为了方便您更好对这个理解这个模块的运作方式,下图介绍了该模块的工作细节:
NGSS识别了特殊文本的样式,和在字符串中的位置,是后续文本处理的指导性数据。RenderList包含了以特殊文本为分隔符的所有文本信息。rl包含了以字符为单位的文本渲染信息。pl包含了以bilibili表情包为单位的渲染信息。tl包含了以特殊功能图片的渲染信息,如动态抽奖前的小礼物,投票的柱状图,网页链接的链接图标。
3、功能块
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的FunctionBlock方法。
它实现了渲染九宫格与专栏封面,视频封面,与直播封面。
4、附加卡片
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的AddCard方法。
它实现了渲染投票,视频预约,直播预约,游戏信息等。
5、转发信息
这个模块的实现是在DynamicRender.py中的DynamicPictureRendering类中的Reprender方法。
渲染源动态内容,原理与总动态基本一致,差别仅在字体颜色和对于头部信息渲染的省略。
这个模块调用了上述除过头部信息以外的三个模块。
四、贡献 - 特别感谢 - license
1、贡献
如果您发现了更好的使用方法,不妨分享出来!你可以使用pr功能提交请求,我会审阅。或者在使用中出现了什么问题,都可以提交issue,或者加入我们的外联群(QQ:781665797)交流。
2、特别感谢
bilibili-API-collect:非常详细的 B站 api 文档HarukaBot:非常nb的机器人Google Noto Fonts:适用于所有语言的漂亮且免费的字体!unifont:伟大的字体项目
3、license
MIT.
Release files for bilibili-dynamic 0.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| BiliBili_dynamic-0.0.8.tar.gz | 25.9 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| BiliBili_dynamic-0.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:52.0 MB
Release files / BiliBili_dynamic-0.0.8.tar.gz
| Download URL | BiliBili_dynamic-0.0.8.tar.gz |
|---|---|
| Size | 25.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32665ba426a65a8957ebf9bd60da57c579f9bb96989207274e7332bf0a9243c1
|
|
BLAKE2b-256 checksum How to use checksums |
3c37ea7a54d28dcbf255bb7fdb7ea62d2d225f437b1f15b047015092bd4c078a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.0
|
Release files / BiliBili_dynamic-0.0.8-py3-none-any.whl
| Download URL | BiliBili_dynamic-0.0.8-py3-none-any.whl |
|---|---|
| Size | 26.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b4ef9d2ae3e131fa080f7089aced479ff01bd5ae1c9c54f48ac9cf94e4bd79c4
|
|
BLAKE2b-256 checksum How to use checksums |
bc498e54d66e8efa7695de3a9050659f24131951c8a94ae6a3713fa10c695101
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.0
|